thursday/go_benchmark_functions/go_funcs_Q.py

125 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
from numpy import abs, sum, arange, sqrt
from .go_benchmark import Benchmark
class Qing(Benchmark):
r"""
Qing objective function.
This class defines the Qing [1]_ global optimization problem. This is a
multimodal minimization problem defined as follows:
.. math::
f_{\text{Qing}}(x) = \sum_{i=1}^{n} (x_i^2 - i)^2
Here, :math:`n` represents the number of dimensions and
:math:`x_i \in [-500, 500]` for :math:`i = 1, ..., n`.
*Global optimum*: :math:`f(x) = 0` for :math:`x_i = \pm \sqrt(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.
"""
def __init__(self, dimensions=2):
Benchmark.__init__(self, dimensions)
self._bounds = list(zip([-500.0] * self.N,
[500.0] * self.N))
self.custom_bounds = [(-2, 2), (-2, 2)]
self.global_optimum = [[sqrt(_) for _ in range(1, self.N + 1)]]
self.fglob = 0
self.change_dimensionality = True
def fun(self, x, *args):
self.nfev += 1
i = arange(1, self.N + 1)
return sum((x ** 2.0 - i) ** 2.0)
class Quadratic(Benchmark):
r"""
Quadratic objective function.
This class defines the Quadratic [1]_ global optimization problem. This
is a multimodal minimization problem defined as follows:
.. math::
f_{\text{Quadratic}}(x) = -3803.84 - 138.08x_1 - 232.92x_2 + 128.08x_1^2
+ 203.64x_2^2 + 182.25x_1x_2
Here, :math:`n` represents the number of dimensions and
:math:`x_i \in [-10, 10]` for :math:`i = 1, 2`.
*Global optimum*: :math:`f(x) = -3873.72418` for
:math:`x = [0.19388, 0.48513]`
.. [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._bounds = list(zip([-10.0] * self.N, [10.0] * self.N))
self.custom_bounds = [(0, 1), (0, 1)]
self.global_optimum = [[0.19388, 0.48513]]
self.fglob = -3873.72418
self.change_dimensionality = True
def fun(self, x, *args):
self.nfev += 1
return (-3803.84 - 138.08 * x[0] - 232.92 * x[1] + 128.08 * x[0] ** 2.0
+ 203.64 * x[1] ** 2.0 + 182.25 * x[0] * x[1])
class Quintic(Benchmark):
r"""
Quintic objective function.
This class defines the Quintic [1]_ global optimization problem. This is a
multimodal minimization problem defined as follows:
.. math::
f_{\text{Quintic}}(x) = \sum_{i=1}^{n} \left|{x_{i}^{5} - 3 x_{i}^{4}
+ 4 x_{i}^{3} + 2 x_{i}^{2} - 10 x_{i} -4}\right|
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 = -1` 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, dimensions)
self._bounds = list(zip([-10.0] * self.N, [10.0] * self.N))
self.custom_bounds = [(-2, 2), (-2, 2)]
self.global_optimum = [[-1.0 for _ in range(self.N)]]
self.fglob = 0
self.change_dimensionality = True
def fun(self, x, *args):
self.nfev += 1
return sum(abs(x ** 5 - 3 * x ** 4 + 4 * x ** 3 + 2 * x ** 2
- 10 * x - 4))