Source code for iwopy.benchmarks.rosenbrock

import numpy as np

from iwopy import SimpleProblem, SimpleObjective


[docs]class RosenbrockObjective(SimpleObjective): """ The Rosenbrock function is defined as f(x,y) = (a-x)^2 + b(y-x^2)^2 Recommended values for the parameters are: a = 1 b = 100 Domain: x = [-inf, inf] y = [-inf, inf] The unconstraint Rosenbrock function has a global minima at (x,y) = (1,1) with a function value of f(x,y) = 0 Parameters ---------- problem : iwopy.Problem The underlying optimization problem pars : tuple The a, b parameters ana_deriv : bool Switch for analytical derivatives name : str The function name """
[docs] def __init__( self, problem, pars=(1.0, 100.0), ana_deriv=False, name="f", ): super().__init__(problem, name, n_components=1, has_ana_derivs=ana_deriv) # Parameters of branin function, # (a, b) self._pars = pars
[docs] def f(self, x, y): """ The Rosenbrock function f(x, y) """ a, b = self._pars return (a - x) ** 2 + b * (y - x**2) ** 2
[docs] def g(self, var, x, y, components=None): """ The derivative of the Rosenbrock function """ a, b = self._pars if var == 0: return -2 * (a - x) - 2 * b * (y - x**2) * 2 * x else: return 2 * b * (y - x**2)
[docs]class RosenbrockProblem(SimpleProblem): """ Problem definition of benchmark function Rosenbrock. Parameters ---------- lower : list of float The minimal variable values upper : list of float The maximal variable values initial : list of float The initial values ana_deriv : bool Switch for analytical derivatives name : str The name of the problem Attributes ---------- initial_values : list of float The initial values """
[docs] def __init__( self, lower=[-5.0, -5.0], upper=[10.0, 10.0], initial=[0.0, 0.0], ana_deriv=False, name="rosenbrock", ): super().__init__( name, float_vars={"x": initial[0], "y": initial[1]}, min_values_float={"x": lower[0], "y": lower[1]}, max_values_float={"x": upper[0], "y": upper[1]}, ) self.add_objective(RosenbrockObjective(self, ana_deriv=ana_deriv))