Source code for benchmarks.rosenbrock

"""`Rosenbrock optimization <https://academic.oup.com/comjnl/article/3/3/175/345501>`_ benchmark.
"""

from .base import NumericalBenchmark
from scipy import optimize

[docs]class Rosenbrock(NumericalBenchmark): ''' The benchmark uses the :class:`scipy.optimize.rosen` version of \ Rosenbrock, as given by .. math:: \\sum_{i=1}^{\\text{dim} - 1} (100(X_{i+1} - X_{i}^{2})^2 + (1 - X_{i - 1})^2 ''' def __init__(self, dim): '''Initializes the benchmark Args: dim (int): number of dimensions that constitute the position ''' super(Rosenbrock, self).__init__(dim, -30.0, 30.0, True)
[docs] def evaluate(self, pos): '''Evaluate the given position Args: pos (list): list of floats representing the position components Returns: dict: fitness value of the given position along with the static data required by \ :class:`~core.objective_interface.ObjectiveInterface` ''' return { 'fitness': optimize.rosen(pos), 'epochs': 1, 'filename': '', 'params': self.dim, 'momentum': {'': ('', 0)} }
[docs] def momentum_eval(self, pos, weights, m_epochs): '''Redundant implementation as :func:`~benchmarks.rosenbrock.Rosenbrock.evaluate` \ to satisfy the :class:`~core.objective_interface.ObjectiveInterface` hooks Args: pos (list): list of position components (floats) weights (str): N/A m_epochs (int): N/A Returns: dict: a dictionary containing the evaluated fitness value ''' return { 'fitness': optimize.rosen(pos) }