petri_dish
diff petri.py @ 22:69a4724e7cac
added help and statistics
author | Yashina Ksenia <ksenia_yashina@kodomo.fbb.msu.ru> |
---|---|
date | Thu, 23 Dec 2010 16:58:48 +0300 |
parents | 2df48c61bd42 |
children |
line diff
1.1 --- a/petri.py Mon Dec 20 02:38:11 2010 +0300 1.2 +++ b/petri.py Thu Dec 23 16:58:48 2010 +0300 1.3 @@ -1,11 +1,18 @@ 1.4 class Petri (object): 1.5 - def __init__ (self, num=1, bacteria=[], radius=150, delta=5, bact_r=10, full_lifetime=1000): 1.6 + def __init__ (self, num=1, bacteria=[], radius=150, delta=5, bact_r=10, full_lifetime=1000,total=0,total_mut=0,\ 1.7 + total_min=0,total_max=0,s_num=0,a_num=0): 1.8 self.num=num 1.9 self.bacteria=bacteria 1.10 self.radius=radius 1.11 self.delta=delta 1.12 self.bact_r=bact_r 1.13 self.full_lifetime=full_lifetime 1.14 + self.total=self.num 1.15 + self.total_max=self.num 1.16 + self.total_min=self.num 1.17 + self.total_mut=total_mut 1.18 + self.s_num=s_num 1.19 + self.a_num=a_num 1.20 1.21 def step (self, delta_t, env,a,s): 1.22 for bact in self.bacteria: 1.23 @@ -13,15 +20,35 @@ 1.24 if bact.lifetime <= 0: 1.25 self.bacteria.remove(bact) 1.26 self.num-=1 1.27 + if self.num<self.total_min: 1.28 + self.total_min=self.num 1.29 continue 1.30 collide=bact.check_collision(self.bacteria,1,self.bact_r,delta_t) 1.31 if not(collide): 1.32 if bact.reprod('a', env, 0.1) and a: 1.33 - bact.asexual(self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) 1.34 + diff=bact.asexual(self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) 1.35 + self.total+=diff*2 1.36 + self.num+=diff 1.37 + if diff>0: 1.38 + self.a_num+=1 1.39 + if bact.mutated and diff>0: 1.40 + self.total_mut+=2 1.41 + if self.num>self.total_max: 1.42 + self.total_max=self.num 1.43 continue 1.44 bact.move(self.bacteria, delta_t, self.radius, self.delta, self.bact_r) 1.45 continue 1.46 if bact.reprod('s', env,1) and s: 1.47 - bact.sexual(collide, self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) 1.48 + diff=bact.sexual(collide, self.bacteria, delta_t, self.radius, self.delta, self.bact_r, self.full_lifetime) 1.49 + if diff>0: 1.50 + self.total+=4 1.51 + self.s_num+=1 1.52 + self.num+=2 1.53 + self.total_mut+=diff-1 1.54 + if self.num>self.total_max: 1.55 + self.total_max=self.num 1.56 continue 1.57 bact.collision(collide, self.bacteria, delta_t, self.radius, self.delta, self.bact_r) 1.58 + if self.num<=0: 1.59 + return False 1.60 + return True