Source code for metaheuristic_designer.strategies.classic.ES
"""
Evolution Strategy.
"""
from __future__ import annotations
from typing import Optional
from ...initializer import Initializer
from ...operator import Operator
from ...survivor_selection_base import SurvivorSelection
from ...parent_selection_base import ParentSelection
from ...operators import CompositeOperator
from ..variable_population import VariablePopulation
[docs]
class ES(VariablePopulation):
"""
Evolution Strategy (μ+λ or μ,λ).
Applies mutation (and optionally crossover) to the selected
parents, then selects survivors. By default, no parent
selection is performed (all individuals are used).
Parameters
----------
initializer : Initializer
Population initializer.
mutation_op : Operator
Mutation operator.
crossover_op : Operator, optional
Crossover operator. If ``None``, only mutation is applied.
parent_sel : ParentSelection, optional
Parent selection (default: use the whole population).
survivor_sel : SurvivorSelection, optional
Survivor selection (default: generational).
offspring_size : int, optional
Number of offspring per generation.
name : str, optional
Display name (default ``"ES"``).
**kwargs
Forwarded to :class:`VariablePopulation`.
"""
def __init__(
self,
initializer: Initializer,
mutation_op: Operator,
crossover_op: Optional[Operator] = None,
parent_sel: Optional[ParentSelection] = None,
survivor_sel: Optional[SurvivorSelection] = None,
offspring_size: Optional[int] = None,
name: str = "ES",
**kwargs,
):
if crossover_op is None:
evolve_op = mutation_op
else:
evolve_op = CompositeOperator([mutation_op, crossover_op])
super().__init__(
initializer, operator=evolve_op, parent_sel=parent_sel, survivor_sel=survivor_sel, offspring_size=offspring_size, name=name, **kwargs
)