Implement the stationary replacement operator
This commit is contained in:
parent
7056534872
commit
04719dd8bc
|
@ -158,15 +158,34 @@ def generational_replacement(previous_population, current_population):
|
||||||
return new_population
|
return new_population
|
||||||
|
|
||||||
|
|
||||||
def stationary_replacement(previous_population, current_population):
|
def get_best_elements(population):
|
||||||
new_population = previous_population
|
first_index = population.index(max(population, key=lambda x: x.fitness))
|
||||||
|
population.pop(first_index)
|
||||||
|
second_index = population.index(max(population, key=lambda x: x.fitness))
|
||||||
|
return first_index, second_index
|
||||||
|
|
||||||
|
|
||||||
|
def get_worst_elements(population):
|
||||||
|
first_index = population.index(min(population, key=lambda x: x.fitness))
|
||||||
|
population.pop(first_index)
|
||||||
|
second_index = population.index(min(population, key=lambda x: x.fitness))
|
||||||
|
return first_index, second_index
|
||||||
|
|
||||||
|
|
||||||
|
def stationary_replacement(prev_population, current_population):
|
||||||
|
new_population = prev_population
|
||||||
|
worst_indexes = get_worst_elements(prev_population)
|
||||||
|
best_indexes = get_best_elements(current_population)
|
||||||
|
for worst, best in zip(worst_indexes, best_indexes):
|
||||||
|
if current_population[best].fitness > prev_population[worst].fitness:
|
||||||
|
new_population[worst] = current_population[best]
|
||||||
return new_population
|
return new_population
|
||||||
|
|
||||||
|
|
||||||
def replace_population(previous_population, current_population, mode):
|
def replace_population(prev_population, current_population, mode):
|
||||||
if mode == "generational":
|
if mode == "generational":
|
||||||
return generational_replacement(previous_population, current_population)
|
return generational_replacement(prev_population, current_population)
|
||||||
return stationary_replacement(previous_population, current_population)
|
return stationary_replacement(prev_population, current_population)
|
||||||
|
|
||||||
|
|
||||||
def genetic_algorithm(n, m, data, mode):
|
def genetic_algorithm(n, m, data, mode):
|
||||||
|
|
Loading…
Reference in New Issue