Source code for f3dasm_optimize._src.evosax_optimizers
# Modules
# =============================================================================
# Standard
from typing import Optional
# Third-party
from evosax import BIPOP_CMA_ES, CMA_ES, DE, PSO, SimAnneal
# Local
from ._protocol import Domain
from .adapters.evosax_implementations import EvoSaxOptimizer
# Authorship & Credits
# =============================================================================
__author__ = 'Martin van der Schelling (M.P.vanderSchelling@tudelft.nl)'
__credits__ = ['Martin van der Schelling']
__status__ = 'Stable'
# =============================================================================
#
# =============================================================================
[docs]class EvoSaxCMAES(EvoSaxOptimizer):
require_gradients: bool = False
def __init__(
self, domain: Domain, population: int = 30, seed: Optional[int] = None,
**kwargs):
super().__init__(
domain=domain, population=population, seed=seed)
self.evosax_algorithm = CMA_ES
self._set_algorithm()
# =============================================================================
[docs]class EvoSaxPSO(EvoSaxOptimizer):
require_gradients: bool = False
def __init__(
self, domain: Domain, population: int = 30, seed: Optional[int] = None,
**kwargs):
super().__init__(
domain=domain, population=population, seed=seed, **kwargs)
self.evosax_algorithm = PSO
self._set_algorithm()
# =============================================================================
[docs]class EvoSaxSimAnneal(EvoSaxOptimizer):
require_gradients: bool = False
def __init__(
self, domain: Domain, population: int = 30, seed: Optional[int] = None,
**kwargs):
super().__init__(
domain=domain, population=population, seed=seed)
self.evosax_algorithm = SimAnneal
self._set_algorithm()
# =============================================================================
EvoSaxDE_DEFAULTS = {'population': 30}
[docs]class EvoSaxDE(EvoSaxOptimizer):
require_gradients: bool = False
def __init__(
self, domain: Domain, population: int = 30, seed: Optional[int] = None,
**kwargs):
super().__init__(
domain=domain, population=population, seed=seed)
self.evosax_algorithm = DE
self._set_algorithm()
# =============================================================================
class EvoSaxBIPOPCMAES(EvoSaxOptimizer):
require_gradients: bool = False
def __init__(
self, domain: Domain, population: int = 30, seed: Optional[int] = None,
**kwargs):
super().__init__(
domain=domain, population=population, seed=seed)
self.evosax_algorithm = BIPOP_CMA_ES
self._set_algorithm()