Begin refactor
This commit is contained in:
parent
985fac54a2
commit
b62202ccd2
|
@ -56,7 +56,7 @@ class Population(object):
|
||||||
for member in members:
|
for member in members:
|
||||||
position -= member.fitness()
|
position -= member.fitness()
|
||||||
if position <= 0:
|
if position <= 0:
|
||||||
return member.set_flag(Flag.PARENT)
|
return member
|
||||||
|
|
||||||
def mutate(self, chance):
|
def mutate(self, chance):
|
||||||
for member in self.members:
|
for member in self.members:
|
||||||
|
@ -64,37 +64,29 @@ class Population(object):
|
||||||
member.mutate()
|
member.mutate()
|
||||||
|
|
||||||
def elite(self, amount):
|
def elite(self, amount):
|
||||||
return sorted(self.members, key=lambda x: x.fitness(),
|
sorted_members = sorted(self.members, key=lambda
|
||||||
reverse=True)[:amount]
|
x: x.fitness(), reverse=True)[:amount]
|
||||||
|
|
||||||
|
for member in sorted_members:
|
||||||
|
self.members.remove(member)
|
||||||
|
|
||||||
|
return sorted_members
|
||||||
|
|
||||||
def advance_generation(self, n_elite, n_crossover):
|
def advance_generation(self, n_elite, n_crossover):
|
||||||
|
new_generation = list()
|
||||||
for member in self.members:
|
|
||||||
member.reset_flag()
|
|
||||||
|
|
||||||
# elitism
|
# elitism
|
||||||
for member in self.elite(n_elite):
|
for member in self.elite(n_elite):
|
||||||
member.flag = Flag.ELITE
|
new_generation.append(member)
|
||||||
|
|
||||||
potential_parents = [member for member in self.members if member.flag
|
|
||||||
is Flag.UNSET]
|
|
||||||
# parent
|
# parent
|
||||||
for ind in range(0, n_crossover):
|
for ind in range(0, n_crossover):
|
||||||
while not self.roulette(members=potential_parents):
|
x, y = self.roulette().crossover(self.roulette())
|
||||||
pass
|
self.members.append(x)
|
||||||
|
self.members.append(y)
|
||||||
|
|
||||||
# persist
|
# persist
|
||||||
[member.set_flag(Flag.PERSIST) for member in self.members
|
[new_generation.append(member) for member in self.members
|
||||||
if member.flag is Flag.UNSET]
|
if member.flag is Flag.UNSET]
|
||||||
|
|
||||||
parents = [member for member in self.members if member.flag is
|
|
||||||
Flag.PARENT]
|
|
||||||
|
|
||||||
for ind in range(0, len(parents), 2):
|
|
||||||
if ind is len(parents) - 1:
|
|
||||||
parents[ind].set_flag(Flag.PERSIST)
|
|
||||||
else:
|
|
||||||
parents[ind], parents[ind + 1] = parents[ind]\
|
|
||||||
.crossover(parents[ind + 1])
|
|
||||||
|
|
||||||
self.mutate(2)
|
self.mutate(2)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user