Source code for metaheuristic_designer.strategies.classic.local_search
"""
Local Search strategy (single solution, multiple perturbations per iteration).
"""
from __future__ import annotations
from typing import Optional
from ...parent_selection import create_parent_selection
from ...initializer import Initializer
from ...search_strategy import SearchStrategy
from ...operator import Operator
from ...population import Population
from ...survivor_selection_base import SurvivorSelection
from ...survivor_selection import create_survivor_selection
from ...utils import RNGLike
from ..population_based_strategy import PopulationBasedStrategy
[docs]
class LocalSearch(PopulationBasedStrategy):
"""
Local Search algorithm.
At each iteration the current solution is duplicated *iterations*
times, and every copy is perturbed independently. The best
among the original and the perturbed copies survives. By default,
the survivor selection is set to ``"local_search"`` (one parent
vs. many offspring).
Parameters
----------
initializer : Initializer
Population initializer.
operator : Operator, optional
Perturbation operator.
survivor_sel : SurvivorSelection, optional
Survivor selection; defaults to ``"local_search"``.
name : str, optional
Display name (default ``"LocalSearch"``).
iterations : int, optional
Number of perturbed copies per iteration (default 100).
rng : RNGLike, optional
Random number generator.
\\*\\*kwargs
Forwarded to :class:`SearchStrategy`.
"""
def __init__(
self,
initializer: Initializer,
operator: Optional[Operator] = None,
survivor_sel: Optional[SurvivorSelection] = None,
name: str = "LocalSearch",
iterations: int = 100,
rng: Optional[RNGLike] = None,
**kwargs,
):
if survivor_sel is None:
survivor_sel = create_survivor_selection("local_search")
super().__init__(
initializer,
parent_sel=create_parent_selection("repeat", amount=iterations * initializer.population_size),
operator=operator,
survivor_sel=survivor_sel,
name=name,
rng=rng,
# Forced kwargs
iterations=iterations,
**kwargs,
)