Source code for metaheuristic_designer.simple.particle_swarm

"""
Ready-to-run Particle Swarm Optimisation wrappers.
"""

from __future__ import annotations
from typing import Optional

from metaheuristic_designer.encoding import Encoding
from metaheuristic_designer.objective_function import ObjectiveFunc
from ..algorithm import Algorithm
from ..initializers import UniformInitializer
from ..encodings import TypeCastEncoding, SigmoidEncoding
from ..strategies import PSO
from ..utils import RNGLike, check_random_state


[docs] def particle_swarm_binary( objfunc: ObjectiveFunc, population_size: int = 100, w: float = 0.7, c1: float = 1.5, c2: float = 1.5, encoding: Optional[Encoding] = None, random_state: Optional[RNGLike] = None, **kwargs, ) -> Algorithm: """Particle Swarm Optimisation for binary-coded vectors. Parameters ---------- objfunc : ObjectiveFunc The objective function to optimise. population_size : int, optional Swarm size (default 100). w : float, optional Inertia weight (default 0.7). c1 : float, optional Cognitive acceleration coefficient (default 1.5). c2 : float, optional Social acceleration coefficient (default 1.5). encoding : Encoding, optional Encoding; defaults to :class:`SigmoidEncoding`. random_state : RNGLike, optional Random seed or generator. **kwargs Forwarded to :class:`Algorithm`. """ random_state = check_random_state(random_state) if encoding is None: encoding = SigmoidEncoding(as_probability=False, threshold=0.5) pop_initializer = UniformInitializer( objfunc.dimension, objfunc.lower_bound, objfunc.upper_bound, population_size=population_size, dtype=float, encoding=encoding, random_state=random_state, ) search_strat = PSO( initializer=pop_initializer, w=w, c1=c1, c2=c2, random_state=random_state, ) return Algorithm(objfunc, search_strat, **kwargs)
[docs] def particle_swarm_discrete( objfunc: ObjectiveFunc, population_size: int = 100, w: float = 0.7, c1: float = 1.5, c2: float = 1.5, encoding: Optional[Encoding] = None, random_state: Optional[RNGLike] = None, **kwargs, ) -> Algorithm: """Particle Swarm Optimisation for integer-coded vectors. Parameters ---------- objfunc : ObjectiveFunc The objective function to optimise. population_size : int, optional Swarm size (default 100). w : float, optional Inertia weight (default 0.7). c1 : float, optional Cognitive acceleration coefficient (default 1.5). c2 : float, optional Social acceleration coefficient (default 1.5). encoding : Encoding, optional Encoding; defaults to :class:`TypeCastEncoding` (float → int). random_state : RNGLike, optional Random seed or generator. **kwargs Forwarded to :class:`Algorithm`. """ random_state = check_random_state(random_state) if encoding is None: encoding = TypeCastEncoding(float, int) pop_initializer = UniformInitializer( objfunc.dimension, objfunc.lower_bound, objfunc.upper_bound, population_size=population_size, dtype=float, encoding=encoding, random_state=random_state, ) search_strat = PSO( initializer=pop_initializer, w=w, c1=c1, c2=c2, random_state=random_state, ) return Algorithm(objfunc, search_strat, **kwargs)
[docs] def particle_swarm_real( objfunc: ObjectiveFunc, population_size: int = 100, w: float = 0.7, c1: float = 1.5, c2: float = 1.5, encoding: Optional[Encoding] = None, random_state: Optional[RNGLike] = None, **kwargs, ) -> Algorithm: """Particle Swarm Optimisation for real-coded vectors. Parameters ---------- objfunc : ObjectiveFunc The objective function to optimise. population_size : int, optional Swarm size (default 100). w : float, optional Inertia weight (default 0.7). c1 : float, optional Cognitive acceleration coefficient (default 1.5). c2 : float, optional Social acceleration coefficient (default 1.5). encoding : Encoding, optional Encoding applied to the genotype. random_state : RNGLike, optional Random seed or generator. **kwargs Forwarded to :class:`Algorithm`. """ random_state = check_random_state(random_state) pop_initializer = UniformInitializer( objfunc.dimension, objfunc.lower_bound, objfunc.upper_bound, population_size=population_size, dtype=float, encoding=encoding, random_state=random_state, ) search_strat = PSO( initializer=pop_initializer, w=w, c1=c1, c2=c2, random_state=random_state, ) return Algorithm(objfunc, search_strat, **kwargs)