Fully migrate from flags
- Copy members to new array - Replace members - Don't remove members from population
This commit is contained in:
parent
20fb79ef76
commit
dc111a64f8
|
@ -23,7 +23,7 @@ for i in range(0, args.iter):
|
||||||
cls()
|
cls()
|
||||||
print("Epoch: %d " % i)
|
print("Epoch: %d " % i)
|
||||||
elite = round(args.pop * .1)
|
elite = round(args.pop * .1)
|
||||||
crossover = round(args.pop * .8)
|
crossover = round((args.pop * .8) / 2)
|
||||||
pop.advance_generation(elite, crossover)
|
pop.advance_generation(elite, crossover)
|
||||||
best_fit.append(pop.best_fitness().fitness())
|
best_fit.append(pop.best_fitness().fitness())
|
||||||
#input("...")
|
#input("...")
|
||||||
|
@ -34,5 +34,5 @@ print(pop.best_fitness())
|
||||||
|
|
||||||
plt.plot(best_fit)
|
plt.plot(best_fit)
|
||||||
plt.xlabel("Epoch")
|
plt.xlabel("Epoch")
|
||||||
plt.ylabel("Fitness")
|
plt.ylabel("Best fitness")
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from individual import Individual, Flag
|
from individual import Individual
|
||||||
from random import Random
|
from random import Random
|
||||||
|
|
||||||
rand = Random()
|
rand = Random()
|
||||||
|
@ -67,26 +67,29 @@ class Population(object):
|
||||||
sorted_members = sorted(self.members, key=lambda
|
sorted_members = sorted(self.members, key=lambda
|
||||||
x: x.fitness(), reverse=True)[:amount]
|
x: x.fitness(), reverse=True)[:amount]
|
||||||
|
|
||||||
for member in sorted_members:
|
|
||||||
self.members.remove(member)
|
|
||||||
|
|
||||||
return sorted_members
|
return sorted_members
|
||||||
|
|
||||||
def advance_generation(self, n_elite, n_crossover):
|
def advance_generation(self, n_elite, n_crossover):
|
||||||
new_generation = list()
|
new_generation = list()
|
||||||
|
|
||||||
# elitism
|
# elitism
|
||||||
for member in self.elite(n_elite):
|
#for member in self.elite(n_elite):
|
||||||
new_generation.append(member)
|
#new_generation.append(member)
|
||||||
|
|
||||||
# parent
|
# parent
|
||||||
for ind in range(0, n_crossover):
|
for ind in range(0, n_crossover):
|
||||||
x, y = self.roulette().crossover(self.roulette())
|
parent_one = self.roulette()
|
||||||
self.members.append(x)
|
parent_two = self.roulette()
|
||||||
self.members.append(y)
|
x, y = parent_one.crossover(parent_two)
|
||||||
|
new_generation.append(x)
|
||||||
|
new_generation.append(y)
|
||||||
|
|
||||||
# persist
|
while len(new_generation) < len(self.members):
|
||||||
[new_generation.append(member) for member in self.members
|
new_generation.append(self.roulette())
|
||||||
if member.flag is Flag.UNSET]
|
|
||||||
|
self.members = new_generation
|
||||||
|
|
||||||
self.mutate(2)
|
self.mutate(2)
|
||||||
|
|
||||||
|
def remove_member(self, member):
|
||||||
|
self.members.remove(member)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user