forked from nahumj/evolution_of_novel_colicins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
66 lines (50 loc) · 1.67 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
"""
Simulation:
1) colicin-immunity interaction module
2) Bacterial Population module
"""
from colicin import Colicin
from immunity import Immunity
from organism import Organism
from population import Population
from colicin_bitstring import Colicin as ColicinBit
from immunity_bitstring import Immunity as ImmunityBit
from bitstring import Bitstring
import mutate
def average_colicin_int(population):
ids = [col.id for col in population.colicins_produced()]
return average(ids)
def average(nums):
return sum(nums) / float(len(nums))
def average_colicin_bitstring_distance(population, ancestor_col):
dists = [ancestor_col.id.hamming_distance(col.id)
for col in population.colicins_produced()]
return average(dists)
def colicin_int_demo():
org = Organism([Colicin(0)], [Immunity(0, 5)])
pop = Population(org for _ in range(5))
for gen in range(1000):
pop.advance_generation()
average_id = average_colicin_int(pop)
if gen % 100 == 0:
print("{}\t{}".format(gen, average_id))
def colicin_bitstring_demo():
mutate.mutation_rate = 0.05
bit = Bitstring("0000000000000000000")
bit2 = Bitstring("1000000000000000000")
col = ColicinBit(bit)
imm = ImmunityBit(bit2, 1)
org = Organism([col], [imm, imm])
pop = Population(org for _ in range(100))
for gen in range(101):
pop.advance_generation()
if gen % 10 == 0:
average_dist = average_colicin_bitstring_distance(pop, col)
print("{}\t{}".format(gen, average_dist))
def main():
colicin_bitstring_demo()
if __name__ == '__main__':
print('start')
main()
print('done')