Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/petri_dish/diff/69a4724e7cac/petri.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 28 23:05:31 2014
Кодировка:
petri_dish: petri.py diff

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