def loop(self): self.cntGenes=0 self.menu={} for s in self.species: self.cntGenes+=len(s.genes) self.menu[s.num]=[] for g in s.genes: self.menu[s.num].append(g.num) self.showInfo() sumfitness=0.0 newspecies=[] newgenes = [] for s in self.species: s.breed() for n in s.newSpecies(): newspecies.append(n) for n in newspecies: self.species.append(Specie(members=[n],appearTime=self.generation)) for s in self.species: for n in s.newGenes(): newgenes.append(n) while len(newgenes): n=newgenes[0] for s in self.species: for o in s.genes: if o not in newgenes: self.adjustFitness(new=n,old=o) del newgenes[0] for s in self.species: s.sort() s.recountFitness() sumfitness+=s.fitness # sumfitness/=len(self.species) self.resource+=RESOURCE dieList=[] i=0 while i <len(self.species): s=self.species[i] r=self.resource*(s.fitness)/sumfitness print '[%d] get resource:%d'%(s.num,r) for d in s.distribute(resource=r): dieList.append(d) if not len(s.genes): print 'The specie [%d] has died out.'%s.num del self.species[i] continue i+=1 self.resource=0.0 while len(dieList): # self.resource+=self.happyCorner(unlucky=dieList[0]) self.happyCorner(unlucky=dieList[0]) del dieList[0] saveCurrent(self.packCurrent()) self.generation+=1
def init(): drop() print'Initializing...' str=GeneStructure(gsNew=-1,fromDB=1,num=0) g=Gene(structure=str,weights=[],thresholds=[],num=0) for i in range (0,SIZE_SENSOR+SIZE_OUTPUT+1): str.appendNeuron() g.thresholds.append(random.uniform(-0.5,0.5)) for i in range(0,SIZE_SENSOR): str.appendSynapse(origin=i,terminus=SIZE_SENSOR+SIZE_OUTPUT) g.weights.append(random.uniform(-2,2)) str.appendSynapse(origin=SIZE_SENSOR+SIZE_OUTPUT,terminus=i+SIZE_SENSOR) g.weights.append(random.uniform(-2,2)) save.saveStruct(str.pack()) g.set() sp1=Specie(members=[g],appearTime=0) nature=Nature(species=[sp1],generation=0,restResource=0) save.saveCurrent(nature.packCurrent()) print'Initializing has been done.'