Source code for jmetal.algorithm.singleobjective.evolution_strategy
from copy import copy
from typing import TypeVar, List
from jmetal.core.algorithm import EvolutionaryAlgorithm
from jmetal.core.operator import Mutation
from jmetal.core.problem import Problem
from jmetal.util.evaluator import Evaluator, SequentialEvaluator
from jmetal.util.generator import Generator, RandomGenerator
from jmetal.util.termination_criterion import TerminationCriterion
S = TypeVar('S')
R = TypeVar('R')
"""
.. module:: evolutionary_algorithm
:platform: Unix, Windows
:synopsis: Implementation of Evolutionary Algorithms.
.. moduleauthor:: Antonio J. Nebro <antonio@lcc.uma.es>, Antonio Benítez-Hidalgo <antonio.b@uma.es>
"""
[docs]class EvolutionStrategy(EvolutionaryAlgorithm[S, R]):
def __init__(self,
problem: Problem,
mu: int,
lambda_: int,
elitist: bool,
mutation: Mutation,
termination_criterion: TerminationCriterion,
population_generator: Generator = RandomGenerator(),
population_evaluator: Evaluator = SequentialEvaluator()):
super(EvolutionStrategy, self).__init__(
problem=problem,
population_size=mu,
offspring_population_size=lambda_)
self.mu = mu
self.lambda_ = lambda_
self.elitist = elitist
self.mutation_operator = mutation
self.population_generator = population_generator
self.population_evaluator = population_evaluator
self.termination_criterion = termination_criterion
self.observable.register(termination_criterion)
[docs] def create_initial_solutions(self) -> List[S]:
return [self.population_generator.new(self.problem)
for _ in range(self.population_size)]
[docs] def evaluate(self, solution_list: List[S]):
return self.population_evaluator.evaluate(solution_list, self.problem)
[docs] def stopping_condition_is_met(self) -> bool:
return self.termination_criterion.is_met
[docs] def selection(self, population: List[S]) -> List[S]:
return population
[docs] def reproduction(self, population: List[S]) -> List[S]:
offspring_population = []
for solution in population:
for j in range(int(self.lambda_ / self.mu)):
new_solution = copy(solution)
offspring_population.append(self.mutation_operator.execute(new_solution))
return offspring_population
[docs] def replacement(self, population: List[S], offspring_population: List[S]) -> List[S]:
population_pool = []
if self.elitist:
population_pool = population
population_pool.extend(offspring_population)
else:
population_pool.extend(offspring_population)
population_pool.sort(key=lambda s: s.objectives[0])
new_population = []
for i in range(self.mu):
new_population.append(population_pool[i])
return new_population
[docs] def get_result(self) -> R:
return self.solutions[0]
[docs] def get_name(self) -> str:
return 'Elitist evolution Strategy'