Create children correctly

This commit is contained in:
George Lacey 2017-09-25 19:03:27 +01:00
parent af16b969b4
commit ceb10dbbde

View File

@ -15,27 +15,31 @@ class Population(object):
return_string = "" return_string = ""
position = 0 position = 0
for member in self.members: for member in self.members:
return_string += "%d:\tx: %f\ty: %f\tfit: %f\n" %\ return_string += "%d:\tx: %e\ty: %e\tfit: %e\n" %\
(position, member.x, member.y, member.fitness) (position, member.x, member.y, member.fitness())
position += 1 position += 1
return_string += "Average fit:\t%e" % self.avg_fitness()
return return_string return return_string
def fitness_function(self): def fitness_function(self):
for member in self.members: for member in self.members:
member.fitness_function() member.fitness()
def total_fitness(self): def total_fitness(self):
total = 0 total = 0
for member in self.members: for member in self.members:
total += member.fitness total += member.fitness()
return total return total
def avg_fitness(self):
return float(self.total_fitness() / len(self.members))
def roulette(self, divisor=1): def roulette(self, divisor=1):
total = self.total_fitness() / divisor total = self.total_fitness() / divisor
position = rand.uniform(0, total) position = rand.uniform(0, total)
for member in self.members: for member in self.members:
position -= member.fitness / divisor position -= member.fitness() / divisor
if position <= 0: if position <= 0:
return member return member
@ -46,8 +50,8 @@ class Population(object):
parents.append(self.roulette()) parents.append(self.roulette())
children = list() children = list()
for i in range(0, len(parents) - 2, 2): for i in range(0, len(parents) - 1, 2):
parents[i].crossover(parents[i + 1]) one, two = self.members[i].crossover(parents[i + 1])
children.append(parents[i]) children.append(one)
children.append(parents[i+1]) children.append(two)
self.members = children self.members = children