From ceb10dbbde49b8a9912fd224fb08f0867ebbd8af Mon Sep 17 00:00:00 2001 From: George Lacey Date: Mon, 25 Sep 2017 19:03:27 +0100 Subject: [PATCH] Create children correctly --- src/population.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/population.py b/src/population.py index 29cd95f..53678bd 100644 --- a/src/population.py +++ b/src/population.py @@ -15,27 +15,31 @@ class Population(object): return_string = "" position = 0 for member in self.members: - return_string += "%d:\tx: %f\ty: %f\tfit: %f\n" %\ - (position, member.x, member.y, member.fitness) + return_string += "%d:\tx: %e\ty: %e\tfit: %e\n" %\ + (position, member.x, member.y, member.fitness()) position += 1 + return_string += "Average fit:\t%e" % self.avg_fitness() return return_string def fitness_function(self): for member in self.members: - member.fitness_function() + member.fitness() def total_fitness(self): total = 0 for member in self.members: - total += member.fitness + total += member.fitness() return total + def avg_fitness(self): + return float(self.total_fitness() / len(self.members)) + def roulette(self, divisor=1): total = self.total_fitness() / divisor position = rand.uniform(0, total) for member in self.members: - position -= member.fitness / divisor + position -= member.fitness() / divisor if position <= 0: return member @@ -46,8 +50,8 @@ class Population(object): parents.append(self.roulette()) children = list() - for i in range(0, len(parents) - 2, 2): - parents[i].crossover(parents[i + 1]) - children.append(parents[i]) - children.append(parents[i+1]) + for i in range(0, len(parents) - 1, 2): + one, two = self.members[i].crossover(parents[i + 1]) + children.append(one) + children.append(two) self.members = children