pondělí 5. prosince 2011

Jednoduchý experiment

V čase 0 existuje jediný objekt, který má periodu rovnu 1.0. Každý objekt periodicky podle své periody vygeneruje nový objekt, který bude mít zcela náhodně buď dvojnásobnou periodu, nebo periodu poloviční. Pokud hádáte, že počet objektů bude růst exponenciálně nebo superexponencionálně, tak hádejte znovu, nebo si spusťte přiložený program. Tento miniexperiment by měl sloužit jako ukázka, že evoluce není jenom záležitosti výběru, protože zde žádný výběr není, ale i způsobu replikace. Pustil jsem to 10 x a graf přilkádám.
import random

class object:
    def __init__(self, objs, P):
        self.objs = objs
        self.P = P
        self.T = 0.0
    def sleep(self):
        self.T = self.T + self.P
    def run(self):
        if random.uniform(0.0, 1.0) > 0.5:
            newP = 2 * self.P
        else:
            newP = 0.5 * self.P   
        child = object(self.objs, newP)
        child.T = self.T
        self.objs.append(child)
        child.sleep()
        self.sleep() 
  
  
objs = []
first = object(objs, 1.0)
objs.append(first)


Tsim = 0.0

for isim in range(100):
        print Tsim, len(objs)
 
        for i in range(len(objs)):
            obj = objs[i]
            if obj.T == Tsim:
                obj.run()
        Tsim = None
        for obj in objs:
            if Tsim == None or Tsim > obj.T:
                Tsim = obj.T 
 

Žádné komentáře: