From 6d1c9be3a3b55806b4a4c16c7a35f986e5eefa86 Mon Sep 17 00:00:00 2001 From: George Lacey Date: Mon, 25 Sep 2017 09:47:56 +0100 Subject: [PATCH] Implement advance_generation -Implement printing --- src/population.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/population.py b/src/population.py index 2a7f7a4..29cd95f 100644 --- a/src/population.py +++ b/src/population.py @@ -7,10 +7,19 @@ rand = Random() class Population(object): def __init__(self, size): - self.members = [] + self.members = list() for current in range(0, size): self.members.append(Individual()) + def __str__(self): + 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) + position += 1 + return return_string + def fitness_function(self): for member in self.members: member.fitness_function() @@ -24,11 +33,21 @@ class Population(object): def roulette(self, divisor=1): total = self.total_fitness() / divisor position = rand.uniform(0, total) + for member in self.members: position -= member.fitness / divisor if position <= 0: return member def advance_generation(self): - crossover_members = [] - crossover_members.append(self.roulette()) + self.fitness_function() + parents = list() + for i in range(0, len(self.members)): + 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]) + self.members = children