Implement advance_generation

-Implement printing
This commit is contained in:
George Lacey 2017-09-25 09:47:56 +01:00
parent 1e97d4e031
commit 6d1c9be3a3

View File

@ -7,10 +7,19 @@ rand = Random()
class Population(object): class Population(object):
def __init__(self, size): def __init__(self, size):
self.members = [] self.members = list()
for current in range(0, size): for current in range(0, size):
self.members.append(Individual()) 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): def fitness_function(self):
for member in self.members: for member in self.members:
member.fitness_function() member.fitness_function()
@ -24,11 +33,21 @@ class Population(object):
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
def advance_generation(self): def advance_generation(self):
crossover_members = [] self.fitness_function()
crossover_members.append(self.roulette()) 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