Implement mutation
This commit is contained in:
parent
dcfb7f2e34
commit
a5a8108e99
|
@ -18,7 +18,10 @@ class Population(object):
|
||||||
return_string += "%d:\tx: %e\ty: %e\tfit: %e\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_string += "Average fit:\t%e\n" % self.avg_fitness()
|
||||||
|
best = self.best_fitness()
|
||||||
|
return_string += "Best fit:\tx:%e,\ty:%e\tf:%e" %\
|
||||||
|
(best.x, best.y, best.fitness())
|
||||||
return return_string
|
return return_string
|
||||||
|
|
||||||
def fitness_function(self):
|
def fitness_function(self):
|
||||||
|
@ -34,6 +37,14 @@ class Population(object):
|
||||||
def avg_fitness(self):
|
def avg_fitness(self):
|
||||||
return float(self.total_fitness() / len(self.members))
|
return float(self.total_fitness() / len(self.members))
|
||||||
|
|
||||||
|
def best_fitness(self):
|
||||||
|
best_member = self.members[0]
|
||||||
|
|
||||||
|
for member in self.members:
|
||||||
|
if float(member.fitness()) > best_member.fitness():
|
||||||
|
best_member = member
|
||||||
|
return best_member
|
||||||
|
|
||||||
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)
|
||||||
|
@ -43,6 +54,11 @@ class Population(object):
|
||||||
if position <= 0:
|
if position <= 0:
|
||||||
return member
|
return member
|
||||||
|
|
||||||
|
def mutate(self, chance):
|
||||||
|
for member in self.members:
|
||||||
|
if rand.randint(0, 1/chance) == 0:
|
||||||
|
member.mutate()
|
||||||
|
|
||||||
def advance_generation(self):
|
def advance_generation(self):
|
||||||
self.fitness_function()
|
self.fitness_function()
|
||||||
parents = list()
|
parents = list()
|
||||||
|
@ -54,4 +70,5 @@ class Population(object):
|
||||||
one, two = self.members[i].crossover(parents[i + 1])
|
one, two = self.members[i].crossover(parents[i + 1])
|
||||||
children.append(one)
|
children.append(one)
|
||||||
children.append(two)
|
children.append(two)
|
||||||
|
self.mutate(0.1)
|
||||||
self.members = children
|
self.members = children
|
||||||
|
|
Loading…
Reference in New Issue
Block a user