568 lines
17 KiB
Python
568 lines
17 KiB
Python
# -*- coding: utf-8 -*-
|
|
import numpy as np
|
|
from numpy import abs, cos, exp, arange, pi, sin, sqrt, sum, zeros, tanh
|
|
from numpy.testing import assert_almost_equal
|
|
from .go_benchmark import Benchmark
|
|
|
|
|
|
class Damavandi(Benchmark):
|
|
r"""
|
|
Damavandi objective function.
|
|
|
|
This class defines the Damavandi [1]_ global optimization problem. This is a
|
|
multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Damavandi}}(x) = \left[ 1 - \lvert{\frac{
|
|
\sin[\pi (x_1 - 2)]\sin[\pi (x2 - 2)]}{\pi^2 (x_1 - 2)(x_2 - 2)}}
|
|
\rvert^5 \right] \left[2 + (x_1 - 7)^2 + 2(x_2 - 7)^2 \right]
|
|
|
|
|
|
Here, :math:`n` represents the number of dimensions and :math:`x_i \in
|
|
[0, 14]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x) = 0.0` for :math:`x_i = 2` for
|
|
:math:`i = 1, ..., n`
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, 2)
|
|
|
|
self._bounds = list(zip([0.0] * self.N, [14.0] * self.N))
|
|
|
|
self.global_optimum = [[2 for _ in range(self.N)]]
|
|
self.fglob = np.nan
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
try:
|
|
num = sin(pi * (x[0] - 2.0)) * sin(pi * (x[1] - 2.0))
|
|
den = (pi ** 2) * (x[0] - 2.0) * (x[1] - 2.0)
|
|
factor1 = 1.0 - (abs(num / den)) ** 5.0
|
|
factor2 = 2 + (x[0] - 7.0) ** 2.0 + 2 * (x[1] - 7.0) ** 2.0
|
|
return factor1 * factor2
|
|
except ZeroDivisionError:
|
|
return np.nan
|
|
|
|
def success(self, x):
|
|
"""Is a candidate solution at the global minimum"""
|
|
val = self.fun(x)
|
|
if np.isnan(val):
|
|
return True
|
|
try:
|
|
assert_almost_equal(val, 0., 4)
|
|
return True
|
|
except AssertionError:
|
|
return False
|
|
|
|
return False
|
|
|
|
|
|
class Deb01(Benchmark):
|
|
r"""
|
|
Deb 1 objective function.
|
|
|
|
This class defines the Deb 1 [1]_ global optimization problem. This is a
|
|
multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Deb01}}(x) = - \frac{1}{N} \sum_{i=1}^n \sin^6(5 \pi x_i)
|
|
|
|
|
|
Here, :math:`n` represents the number of dimensions and
|
|
:math:`x_i \in [-1, 1]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x_i) = 0.0`. The number of global minima is
|
|
:math:`5^n` that are evenly spaced in the function landscape, where
|
|
:math:`n` represents the dimension of the problem.
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self.change_dimensionality = True
|
|
|
|
self._bounds = list(zip([-1.0] * self.N, [1.0] * self.N))
|
|
|
|
self.global_optimum = [[0.3, -0.3]]
|
|
self.fglob = -1.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
return -(1.0 / self.N) * sum(sin(5 * pi * x) ** 6.0)
|
|
|
|
|
|
class Deb03(Benchmark):
|
|
r"""
|
|
Deb 3 objective function.
|
|
|
|
This class defines the Deb 3 [1]_ global optimization problem. This is a
|
|
multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Deb02}}(x) = - \frac{1}{N} \sum_{i=1}^n \sin^6 \left[ 5 \pi
|
|
\left ( x_i^{3/4} - 0.05 \right) \right ]
|
|
|
|
|
|
Here, :math:`n` represents the number of dimensions and :math:`x_i \in
|
|
[0, 1]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x) = 0.0`. The number of global minima is
|
|
:math:`5^n` that are evenly spaced in the function landscape, where
|
|
:math:`n` represents the dimension of the problem.
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self.change_dimensionality = True
|
|
|
|
self._bounds = list(zip([-1.0] * self.N, [1.0] * self.N))
|
|
|
|
self.global_optimum = [[0.93388314, 0.68141781]]
|
|
self.fglob = -1.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
return -(1.0 / self.N) * sum(sin(5 * pi * (x ** 0.75 - 0.05)) ** 6.0)
|
|
|
|
|
|
class Decanomial(Benchmark):
|
|
r"""
|
|
Decanomial objective function.
|
|
|
|
This class defines the Decanomial function global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Decanomial}}(x) = 0.001 \left(\lvert{x_{2}^{4} + 12 x_{2}^{3}
|
|
+ 54 x_{2}^{2} + 108 x_{2} + 81.0}\rvert + \lvert{x_{1}^{10}
|
|
- 20 x_{1}^{9} + 180 x_{1}^{8} - 960 x_{1}^{7} + 3360 x_{1}^{6}
|
|
- 8064 x_{1}^{5} + 13340 x_{1}^{4} - 15360 x_{1}^{3} + 11520 x_{1}^{2}
|
|
- 5120 x_{1} + 2624.0}\rvert\right)^{2}
|
|
|
|
|
|
with :math:`x_i \in [-10, 10]` for :math:`i = 1, 2`.
|
|
|
|
*Global optimum*: :math:`f(x) = 0` for :math:`x = [2, -3]`
|
|
|
|
.. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([-10.0] * self.N, [10.0] * self.N))
|
|
self.custom_bounds = [(0, 2.5), (-2, -4)]
|
|
|
|
self.global_optimum = [[2.0, -3.0]]
|
|
self.fglob = 0.0
|
|
|
|
def fun(self, x, *args):
|
|
|
|
self.nfev += 1
|
|
|
|
val = x[1] ** 4 + 12 * x[1] ** 3 + 54 * x[1] ** 2 + 108 * x[1] + 81.0
|
|
val2 = x[0] ** 10. - 20 * x[0] ** 9 + 180 * x[0] ** 8 - 960 * x[0] ** 7
|
|
val2 += 3360 * x[0] ** 6 - 8064 * x[0] ** 5 + 13340 * x[0] ** 4
|
|
val2 += - 15360 * x[0] ** 3 + 11520 * x[0] ** 2 - 5120 * x[0] + 2624
|
|
return 0.001 * (abs(val) + abs(val2)) ** 2.
|
|
|
|
|
|
class Deceptive(Benchmark):
|
|
r"""
|
|
Deceptive objective function.
|
|
|
|
This class defines the Deceptive [1]_ global optimization problem. This is a
|
|
multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Deceptive}}(x) = - \left [\frac{1}{n}
|
|
\sum_{i=1}^{n} g_i(x_i) \right ]^{\beta}
|
|
|
|
|
|
Where :math:`\beta` is a fixed non-linearity factor; in this exercise,
|
|
:math:`\beta = 2`. The function :math:`g_i(x_i)` is given by:
|
|
|
|
.. math::
|
|
|
|
g_i(x_i) = \begin{cases}
|
|
- \frac{x}{\alpha_i} + \frac{4}{5} &
|
|
\textrm{if} \hspace{5pt} 0 \leq x_i \leq \frac{4}{5} \alpha_i \\
|
|
\frac{5x}{\alpha_i} -4 &
|
|
\textrm{if} \hspace{5pt} \frac{4}{5} \alpha_i \le x_i \leq \alpha_i \\
|
|
\frac{5(x - \alpha_i)}{\alpha_i-1} &
|
|
\textrm{if} \hspace{5pt} \alpha_i \le x_i \leq \frac{1 + 4\alpha_i}{5} \\
|
|
\frac{x - 1}{1 - \alpha_i} &
|
|
\textrm{if} \hspace{5pt} \frac{1 + 4\alpha_i}{5} \le x_i \leq 1
|
|
\end{cases}
|
|
|
|
|
|
Here, :math:`n` represents the number of dimensions and :math:`x_i \in
|
|
[0, 1]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x) = -1` for :math:`x_i = \alpha_i` for
|
|
:math:`i = 1, ..., n`
|
|
|
|
.. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015
|
|
|
|
TODO: this function was taken from the Gavana website. The following code
|
|
is based on his code. His code and the website don't match, the equations
|
|
are wrong.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([0.0] * self.N, [1.0] * self.N))
|
|
|
|
alpha = arange(1.0, self.N + 1.0) / (self.N + 1.0)
|
|
|
|
self.global_optimum = [alpha]
|
|
self.fglob = -1.0
|
|
self.change_dimensionality = True
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
alpha = arange(1.0, self.N + 1.0) / (self.N + 1.0)
|
|
beta = 2.0
|
|
|
|
g = zeros((self.N, ))
|
|
|
|
for i in range(self.N):
|
|
if x[i] <= 0.0:
|
|
g[i] = x[i]
|
|
elif x[i] < 0.8 * alpha[i]:
|
|
g[i] = -x[i] / alpha[i] + 0.8
|
|
elif x[i] < alpha[i]:
|
|
g[i] = 5.0 * x[i] / alpha[i] - 4.0
|
|
elif x[i] < (1.0 + 4 * alpha[i]) / 5.0:
|
|
g[i] = 5.0 * (x[i] - alpha[i]) / (alpha[i] - 1.0) + 1.0
|
|
elif x[i] <= 1.0:
|
|
g[i] = (x[i] - 1.0) / (1.0 - alpha[i]) + 4.0 / 5.0
|
|
else:
|
|
g[i] = x[i] - 1.0
|
|
|
|
return -((1.0 / self.N) * sum(g)) ** beta
|
|
|
|
|
|
class DeckkersAarts(Benchmark):
|
|
r"""
|
|
Deckkers-Aarts objective function.
|
|
|
|
This class defines the Deckkers-Aarts [1]_ global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DeckkersAarts}}(x) = 10^5x_1^2 + x_2^2 - (x_1^2 + x_2^2)^2
|
|
+ 10^{-5}(x_1^2 + x_2^2)^4
|
|
|
|
|
|
with :math:`x_i \in [-20, 20]` for :math:`i = 1, 2`.
|
|
|
|
*Global optimum*: :math:`f(x) = -24776.518242168` for
|
|
:math:`x = [0, \pm 14.9451209]`
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
|
|
TODO: jamil solution and global minimum are slightly wrong.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([-20.0] * self.N, [20.0] * self.N))
|
|
self.custom_bounds = ([-1, 1], [14, 16])
|
|
|
|
self.global_optimum = [[0.0, 14.9451209]]
|
|
self.fglob = -24776.518342168
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
return (1.e5 * x[0] ** 2 + x[1] ** 2 - (x[0] ** 2 + x[1] ** 2) ** 2
|
|
+ 1.e-5 * (x[0] ** 2 + x[1] ** 2) ** 4)
|
|
|
|
|
|
class DeflectedCorrugatedSpring(Benchmark):
|
|
r"""
|
|
DeflectedCorrugatedSpring objective function.
|
|
|
|
This class defines the Deflected Corrugated Spring [1]_ function global
|
|
optimization problem. This is a multimodal minimization problem defined as
|
|
follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DeflectedCorrugatedSpring}}(x) = 0.1\sum_{i=1}^n \left[ (x_i -
|
|
\alpha)^2 - \cos \left( K \sqrt {\sum_{i=1}^n (x_i - \alpha)^2}
|
|
\right ) \right ]
|
|
|
|
|
|
Where, in this exercise, :math:`K = 5` and :math:`\alpha = 5`.
|
|
|
|
Here, :math:`n` represents the number of dimensions and :math:`x_i \in
|
|
[0, 2\alpha]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x) = -1` for :math:`x_i = \alpha` for
|
|
:math:`i = 1, ..., n`
|
|
|
|
.. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015
|
|
|
|
TODO: website has a different equation to the gavana codebase. The function
|
|
below is different to the equation above. Also, the global minimum is
|
|
wrong.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
alpha = 5.0
|
|
self._bounds = list(zip([0] * self.N, [2 * alpha] * self.N))
|
|
|
|
self.global_optimum = [[alpha for _ in range(self.N)]]
|
|
self.fglob = -1.0
|
|
self.change_dimensionality = True
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
K, alpha = 5.0, 5.0
|
|
|
|
return (-cos(K * sqrt(sum((x - alpha) ** 2)))
|
|
+ 0.1 * sum((x - alpha) ** 2))
|
|
|
|
|
|
class DeVilliersGlasser01(Benchmark):
|
|
r"""
|
|
DeVilliers-Glasser 1 objective function.
|
|
|
|
This class defines the DeVilliers-Glasser 1 [1]_ function global optimization
|
|
problem. This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DeVilliersGlasser01}}(x) = \sum_{i=1}^{24} \left[ x_1x_2^{t_i}
|
|
\sin(x_3t_i + x_4) - y_i \right ]^2
|
|
|
|
|
|
Where, in this exercise, :math:`t_i = 0.1(i - 1)` and
|
|
:math:`y_i = 60.137(1.371^{t_i}) \sin(3.112t_i + 1.761)`.
|
|
|
|
Here, :math:`n` represents the number of dimensions and :math:`x_i \in
|
|
[1, 100]` for :math:`i = 1, ..., 4`.
|
|
|
|
*Global optimum*: :math:`f(x) = 0` for :math:`x_i = 0` for
|
|
:math:`x = [60.137, 1.371, 3.112, 1.761]`.
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=4):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([1.0] * self.N, [100.0] * self.N))
|
|
|
|
self.global_optimum = [[60.137, 1.371, 3.112, 1.761]]
|
|
self.fglob = 0.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
t = 0.1 * arange(24)
|
|
y = 60.137 * (1.371 ** t) * sin(3.112 * t + 1.761)
|
|
|
|
return sum((x[0] * (x[1] ** t) * sin(x[2] * t + x[3]) - y) ** 2.0)
|
|
|
|
|
|
class DeVilliersGlasser02(Benchmark):
|
|
r"""
|
|
DeVilliers-Glasser 2 objective function.
|
|
|
|
This class defines the DeVilliers-Glasser 2 [1]_ function global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DeVilliersGlasser01}}(x) = \sum_{i=1}^{24} \left[ x_1x_2^{t_i}
|
|
\tanh \left [x_3t_i + \sin(x_4t_i) \right] \cos(t_ie^{x_5}) -
|
|
y_i \right ]^2
|
|
|
|
|
|
Where, in this exercise, :math:`t_i = 0.1(i - 1)` and
|
|
:math:`y_i = 53.81(1.27^{t_i}) \tanh (3.012t_i + \sin(2.13t_i))
|
|
\cos(e^{0.507}t_i)`.
|
|
|
|
with :math:`x_i \in [1, 60]` for :math:`i = 1, ..., 5`.
|
|
|
|
*Global optimum*: :math:`f(x) = 0` for
|
|
:math:`x = [53.81, 1.27, 3.012, 2.13, 0.507]`.
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
"""
|
|
|
|
def __init__(self, dimensions=5):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([1.0] * self.N, [60.0] * self.N))
|
|
|
|
self.global_optimum = [[53.81, 1.27, 3.012, 2.13, 0.507]]
|
|
self.fglob = 0.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
t = 0.1 * arange(16)
|
|
y = (53.81 * 1.27 ** t * tanh(3.012 * t + sin(2.13 * t))
|
|
* cos(exp(0.507) * t))
|
|
|
|
return sum((x[0] * (x[1] ** t) * tanh(x[2] * t + sin(x[3] * t))
|
|
* cos(t * exp(x[4])) - y) ** 2.0)
|
|
|
|
|
|
class DixonPrice(Benchmark):
|
|
r"""
|
|
Dixon and Price objective function.
|
|
|
|
This class defines the Dixon and Price global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DixonPrice}}(x) = (x_i - 1)^2
|
|
+ \sum_{i=2}^n i(2x_i^2 - x_{i-1})^2
|
|
|
|
|
|
Here, :math:`n` represents the number of dimensions and
|
|
:math:`x_i \in [-10, 10]` for :math:`i = 1, ..., n`.
|
|
|
|
*Global optimum*: :math:`f(x_i) = 0` for
|
|
:math:`x_i = 2^{- \frac{(2^i - 2)}{2^i}}` for :math:`i = 1, ..., n`
|
|
|
|
.. [1] Jamil, M. & Yang, X.-S. A Literature Survey of Benchmark Functions
|
|
For Global Optimization Problems Int. Journal of Mathematical Modelling
|
|
and Numerical Optimisation, 2013, 4, 150-194.
|
|
|
|
TODO: Gavana code not correct. i array should start from 2.
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([-10.0] * self.N, [10.0] * self.N))
|
|
self.custom_bounds = [(-2, 3), (-2, 3)]
|
|
|
|
self.global_optimum = [[2.0 ** (-(2.0 ** i - 2.0) / 2.0 ** i)
|
|
for i in range(1, self.N + 1)]]
|
|
self.fglob = 0.0
|
|
self.change_dimensionality = True
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
i = arange(2, self.N + 1)
|
|
s = i * (2.0 * x[1:] ** 2.0 - x[:-1]) ** 2.0
|
|
return sum(s) + (x[0] - 1.0) ** 2.0
|
|
|
|
|
|
class Dolan(Benchmark):
|
|
r"""
|
|
Dolan objective function.
|
|
|
|
This class defines the Dolan [1]_ global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{Dolan}}(x) = \lvert (x_1 + 1.7 x_2)\sin(x_1) - 1.5 x_3
|
|
- 0.1 x_4\cos(x_5 + x_5 - x_1) + 0.2 x_5^2 - x_2 - 1 \rvert
|
|
|
|
|
|
with :math:`x_i \in [-100, 100]` for :math:`i = 1, ..., 5`.
|
|
|
|
*Global optimum*: :math:`f(x_i) = 10^{-5}` for
|
|
:math:`x = [8.39045925, 4.81424707, 7.34574133, 68.88246895, 3.85470806]`
|
|
|
|
.. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015
|
|
|
|
TODO Jamil equation is missing the absolute brackets around the entire
|
|
expression.
|
|
"""
|
|
|
|
def __init__(self, dimensions=5):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([-100.0] * self.N,
|
|
[100.0] * self.N))
|
|
|
|
self.global_optimum = [[-74.10522498, 44.33511286, 6.21069214,
|
|
18.42772233, -16.5839403]]
|
|
self.fglob = 0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
return (abs((x[0] + 1.7 * x[1]) * sin(x[0]) - 1.5 * x[2]
|
|
- 0.1 * x[3] * cos(x[3] + x[4] - x[0]) + 0.2 * x[4] ** 2
|
|
- x[1] - 1))
|
|
|
|
|
|
class DropWave(Benchmark):
|
|
r"""
|
|
DropWave objective function.
|
|
|
|
This class defines the DropWave [1]_ global optimization problem. This is a
|
|
multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\text{DropWave}}(x) = - \frac{1 + \cos\left(12 \sqrt{\sum_{i=1}^{n}
|
|
x_i^{2}}\right)}{2 + 0.5 \sum_{i=1}^{n} x_i^{2}}
|
|
|
|
|
|
with :math:`x_i \in [-5.12, 5.12]` for :math:`i = 1, 2`.
|
|
|
|
*Global optimum*: :math:`f(x) = -1` for :math:`x = [0, 0]`
|
|
|
|
.. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015
|
|
"""
|
|
|
|
def __init__(self, dimensions=2):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = list(zip([-5.12] * self.N, [5.12] * self.N))
|
|
|
|
self.global_optimum = [[0 for _ in range(self.N)]]
|
|
self.fglob = -1.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
norm_x = sum(x ** 2)
|
|
return -(1 + cos(12 * sqrt(norm_x))) / (0.5 * norm_x + 2)
|