Source code for metaheuristic_designer.operators.factories.differential_evolution
"""
Differential Evolution operator registry and factory.
"""
from typing import Optional
from ...encoding import Encoding
from ..operator_functions.utils import OperatorFnDef
from ..operator_functions.differential_evolution import (
differential_evolution_best1,
differential_evolution_rand1,
differential_evolution_best2,
differential_evolution_rand2,
differential_evolution_current_to_rand1,
differential_evolution_current_to_best1,
differential_evolution_current_to_pbest1,
)
from ...operator import OperatorFromLambda
# fmt: off
de_ops_map = {
"de/rand/1": OperatorFnDef(differential_evolution_rand1),
"de_rand_1": OperatorFnDef(differential_evolution_rand1),
"de/best/1": OperatorFnDef(differential_evolution_best1),
"de_best_1": OperatorFnDef(differential_evolution_best1),
"de/rand/2": OperatorFnDef(differential_evolution_rand2),
"de_rand_2": OperatorFnDef(differential_evolution_rand2),
"de/best/2": OperatorFnDef(differential_evolution_best2),
"de_best_2": OperatorFnDef(differential_evolution_best2),
"de/current-to-rand/1": OperatorFnDef(differential_evolution_current_to_rand1),
"de_current_to_rand_1": OperatorFnDef(differential_evolution_current_to_rand1),
"de/current-to-best/1": OperatorFnDef(differential_evolution_current_to_best1),
"de_current_to_best_1": OperatorFnDef(differential_evolution_current_to_best1),
"de/current-to-pbest/1": OperatorFnDef(differential_evolution_current_to_pbest1),
"de_current_to_pbest_1": OperatorFnDef(differential_evolution_current_to_pbest1),
}
# fmt: on
[docs]
def create_differential_evolution_operator(
method: str,
encoding: Optional[Encoding] = None,
vectorized: bool = True,
name: Optional[str] = None,
**kwargs
) -> OperatorFromLambda:
"""
Create a DE operator by name.
Parameters
----------
method : str
DE variant string, e.g., ``"de/rand/1"``.
encoding : Encoding, optional
Encoding applied to the genotype.
vectorized : bool, optional
Unused; kept for interface compatibility.
name : str, optional
Display name; defaults to *method*.
**kwargs
Forwarded to the DE operator function (e.g., ``F``, ``Cr``).
Returns
-------
OperatorFromLambda
The wrapped DE operator.
"""
if name is None:
name = method
return OperatorFromLambda(operator_fn=de_ops_map[method.lower()], name=method, encoding=encoding, preserves_order=True, **kwargs)