Create children correctly
This commit is contained in:
parent
af16b969b4
commit
ceb10dbbde
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user