729 lines
16 KiB
Python
729 lines
16 KiB
Python
# -*- coding: utf-8 -*-
|
|
from numpy import cos, exp, log, pi, sin, sqrt
|
|
|
|
from .go_benchmark import Benchmark, safe_import
|
|
|
|
with safe_import():
|
|
try:
|
|
from scipy.special import factorial # new
|
|
except ImportError:
|
|
from scipy.misc import factorial # old
|
|
|
|
|
|
#-----------------------------------------------------------------------
|
|
# UNIVARIATE SINGLE-OBJECTIVE PROBLEMS
|
|
#-----------------------------------------------------------------------
|
|
class Problem02(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem02 objective function.
|
|
|
|
This class defines the Univariate Problem02 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem02}}(x) = \\sin(x) + \\sin \\left(\\frac{10}{3}x \\right)
|
|
|
|
Bound constraints: :math:`x \\in [2.7, 7.5]`
|
|
|
|
.. figure:: figures/Problem02.png
|
|
:alt: Univariate Problem02 function
|
|
:align: center
|
|
|
|
**Univariate Problem02 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.899599` for :math:`x = 5.145735`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(2.7, 7.5)]
|
|
|
|
self.global_optimum = 5.145735
|
|
self.fglob = -1.899599
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return sin(x) + sin(10.0 / 3.0 * x)
|
|
|
|
|
|
class Problem03(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem03 objective function.
|
|
|
|
This class defines the Univariate Problem03 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem03}}(x) = - \\sum_{k=1}^6 k \\sin[(k+1)x+k]
|
|
|
|
Bound constraints: :math:`x \\in [-10, 10]`
|
|
|
|
.. figure:: figures/Problem03.png
|
|
:alt: Univariate Problem03 function
|
|
:align: center
|
|
|
|
**Univariate Problem03 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-12.03124` for :math:`x = -6.7745761`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-10, 10)]
|
|
|
|
self.global_optimum = -6.7745761
|
|
self.fglob = -12.03124
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
y = 0.0
|
|
for k in range(1, 6):
|
|
y += k * sin((k + 1) * x + k)
|
|
|
|
return -y
|
|
|
|
|
|
class Problem04(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem04 objective function.
|
|
|
|
This class defines the Univariate Problem04 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem04}}(x) = - \\left(16x^2 - 24x + 5 \\right) e^{-x}
|
|
|
|
Bound constraints: :math:`x \\in [1.9, 3.9]`
|
|
|
|
.. figure:: figures/Problem04.png
|
|
:alt: Univariate Problem04 function
|
|
:align: center
|
|
|
|
**Univariate Problem04 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-3.85045` for :math:`x = 2.868034`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(1.9, 3.9)]
|
|
|
|
self.global_optimum = 2.868034
|
|
self.fglob = -3.85045
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -(16 * x ** 2 - 24 * x + 5) * exp(-x)
|
|
|
|
|
|
class Problem05(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem05 objective function.
|
|
|
|
This class defines the Univariate Problem05 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem05}}(x) = - \\left(1.4 - 3x \\right) \\sin(18x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 1.2]`
|
|
|
|
.. figure:: figures/Problem05.png
|
|
:alt: Univariate Problem05 function
|
|
:align: center
|
|
|
|
**Univariate Problem05 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.48907` for :math:`x = 0.96609`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0.0, 1.2)]
|
|
|
|
self.global_optimum = 0.96609
|
|
self.fglob = -1.48907
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -(1.4 - 3 * x) * sin(18.0 * x)
|
|
|
|
|
|
class Problem06(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem06 objective function.
|
|
|
|
This class defines the Univariate Problem06 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem06}}(x) = - \\left[x + \\sin(x) \\right] e^{-x^2}
|
|
|
|
Bound constraints: :math:`x \\in [-10, 10]`
|
|
|
|
.. figure:: figures/Problem06.png
|
|
:alt: Univariate Problem06 function
|
|
:align: center
|
|
|
|
**Univariate Problem06 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-0.824239` for :math:`x = 0.67956`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-10.0, 10.0)]
|
|
|
|
self.global_optimum = 0.67956
|
|
self.fglob = -0.824239
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -(x + sin(x)) * exp(-x ** 2.0)
|
|
|
|
|
|
class Problem07(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem07 objective function.
|
|
|
|
This class defines the Univariate Problem07 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem07}}(x) = \\sin(x) + \\sin \\left(\\frac{10}{3}x \\right) + \\log(x) - 0.84x + 3
|
|
|
|
Bound constraints: :math:`x \\in [2.7, 7.5]`
|
|
|
|
.. figure:: figures/Problem07.png
|
|
:alt: Univariate Problem07 function
|
|
:align: center
|
|
|
|
**Univariate Problem07 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.6013` for :math:`x = 5.19978`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(2.7, 7.5)]
|
|
|
|
self.global_optimum = 5.19978
|
|
self.fglob = -1.6013
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return sin(x) + sin(10.0 / 3.0 * x) + log(x) - 0.84 * x + 3
|
|
|
|
|
|
class Problem08(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem08 objective function.
|
|
|
|
This class defines the Univariate Problem08 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem08}}(x) = - \\sum_{k=1}^6 k \\cos[(k+1)x+k]
|
|
|
|
Bound constraints: :math:`x \\in [-10, 10]`
|
|
|
|
.. figure:: figures/Problem08.png
|
|
:alt: Univariate Problem08 function
|
|
:align: center
|
|
|
|
**Univariate Problem08 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-14.508` for :math:`x = -7.083506`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-10, 10)]
|
|
|
|
self.global_optimum = -7.083506
|
|
self.fglob = -14.508
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
|
|
y = 0.0
|
|
for k in range(1, 6):
|
|
y += k * cos((k + 1) * x + k)
|
|
|
|
return -y
|
|
|
|
|
|
class Problem09(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem09 objective function.
|
|
|
|
This class defines the Univariate Problem09 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem09}}(x) = \\sin(x) + \\sin \\left(\\frac{2}{3} x \\right)
|
|
|
|
Bound constraints: :math:`x \\in [3.1, 20.4]`
|
|
|
|
.. figure:: figures/Problem09.png
|
|
:alt: Univariate Problem09 function
|
|
:align: center
|
|
|
|
**Univariate Problem09 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.90596` for :math:`x = 17.039`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(3.1, 20.4)]
|
|
|
|
self.global_optimum = 17.039
|
|
self.fglob = -1.90596
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return sin(x) + sin(2.0 / 3.0 * x)
|
|
|
|
|
|
class Problem10(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem10 objective function.
|
|
|
|
This class defines the Univariate Problem10 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem10}}(x) = -x\\sin(x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 10]`
|
|
|
|
.. figure:: figures/Problem10.png
|
|
:alt: Univariate Problem10 function
|
|
:align: center
|
|
|
|
**Univariate Problem10 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-7.916727` for :math:`x = 7.9787`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0, 10)]
|
|
|
|
self.global_optimum = 7.9787
|
|
self.fglob = -7.916727
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -x * sin(x)
|
|
|
|
|
|
class Problem11(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem11 objective function.
|
|
|
|
This class defines the Univariate Problem11 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem11}}(x) = 2\\cos(x) + \\cos(2x)
|
|
|
|
Bound constraints: :math:`x \\in [-\\pi/2, 2\\pi]`
|
|
|
|
.. figure:: figures/Problem11.png
|
|
:alt: Univariate Problem11 function
|
|
:align: center
|
|
|
|
**Univariate Problem11 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.5` for :math:`x = 2.09439`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-pi / 2, 2 * pi)]
|
|
|
|
self.global_optimum = 2.09439
|
|
self.fglob = -1.5
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return 2 * cos(x) + cos(2 * x)
|
|
|
|
|
|
class Problem12(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem12 objective function.
|
|
|
|
This class defines the Univariate Problem12 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem12}}(x) = \\sin^3(x) + \\cos^3(x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 2\\pi]`
|
|
|
|
.. figure:: figures/Problem12.png
|
|
:alt: Univariate Problem12 function
|
|
:align: center
|
|
|
|
**Univariate Problem12 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1` for :math:`x = \\pi`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0, 2 * pi)]
|
|
|
|
self.global_optimum = pi
|
|
self.fglob = -1
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return (sin(x)) ** 3.0 + (cos(x)) ** 3.0
|
|
|
|
|
|
class Problem13(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem13 objective function.
|
|
|
|
This class defines the Univariate Problem13 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem13}}(x) = -x^{2/3} - (1 - x^2)^{1/3}
|
|
|
|
Bound constraints: :math:`x \\in [0.001, 0.99]`
|
|
|
|
.. figure:: figures/Problem13.png
|
|
:alt: Univariate Problem13 function
|
|
:align: center
|
|
|
|
**Univariate Problem13 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-1.5874` for :math:`x = 1/\\sqrt(2)`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0.001, 0.99)]
|
|
|
|
self.global_optimum = 1.0 / sqrt(2)
|
|
self.fglob = -1.5874
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -x ** (2.0 / 3.0) - (1.0 - x ** 2) ** (1.0 / 3.0)
|
|
|
|
|
|
class Problem14(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem14 objective function.
|
|
|
|
This class defines the Univariate Problem14 global optimization problem. This
|
|
is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem14}}(x) = -e^{-x} \\sin(2\\pi x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 4]`
|
|
|
|
.. figure:: figures/Problem14.png
|
|
:alt: Univariate Problem14 function
|
|
:align: center
|
|
|
|
**Univariate Problem14 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-0.788685` for :math:`x = 0.224885`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0.0, 4.0)]
|
|
|
|
self.global_optimum = 0.224885
|
|
self.fglob = -0.788685
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -exp(-x) * sin(2.0 * pi * x)
|
|
|
|
|
|
class Problem15(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem15 objective function.
|
|
|
|
This class defines the Univariate Problem15 global optimization problem.
|
|
This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem15}}(x) = \\frac{x^{2} - 5 x + 6}{x^{2} + 1}
|
|
|
|
Bound constraints: :math:`x \\in [-5, 5]`
|
|
|
|
.. figure:: figures/Problem15.png
|
|
:alt: Univariate Problem15 function
|
|
:align: center
|
|
|
|
**Univariate Problem15 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-0.03553` for :math:`x = 2.41422`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-5.0, 5.0)]
|
|
|
|
self.global_optimum = 2.41422
|
|
self.fglob = -0.03553
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -(-x ** 2.0 + 5 * x - 6) / (x ** 2 + 1)
|
|
|
|
|
|
class Problem18(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem18 objective function.
|
|
|
|
This class defines the Univariate Problem18 global optimization problem.
|
|
This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem18}}(x) = \\begin{cases}(x-2)^2 & \\textrm{if} \\hspace{5pt} x \\leq 3 \\\\
|
|
2\\log(x-2)+1&\\textrm{otherwise}\\end{cases}
|
|
|
|
Bound constraints: :math:`x \\in [0, 6]`
|
|
|
|
.. figure:: figures/Problem18.png
|
|
:alt: Univariate Problem18 function
|
|
:align: center
|
|
|
|
**Univariate Problem18 function**
|
|
|
|
*Global optimum*: :math:`f(x)=0` for :math:`x = 2`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0.0, 6.0)]
|
|
|
|
self.global_optimum = 2
|
|
self.fglob = 0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
|
|
if x <= 3:
|
|
return (x - 2.0) ** 2.0
|
|
|
|
return 2 * log(x - 2.0) + 1
|
|
|
|
|
|
class Problem20(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem20 objective function.
|
|
|
|
This class defines the Univariate Problem20 global optimization problem.
|
|
This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem20}}(x) = -[x-\\sin(x)]e^{-x^2}
|
|
|
|
Bound constraints: :math:`x \\in [-10, 10]`
|
|
|
|
.. figure:: figures/Problem20.png
|
|
:alt: Univariate Problem20 function
|
|
:align: center
|
|
|
|
**Univariate Problem20 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-0.0634905` for :math:`x = 1.195137`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(-10, 10)]
|
|
|
|
self.global_optimum = 1.195137
|
|
self.fglob = -0.0634905
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return -(x - sin(x)) * exp(-x ** 2.0)
|
|
|
|
|
|
class Problem21(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem21 objective function.
|
|
|
|
This class defines the Univariate Problem21 global optimization problem.
|
|
This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem21}}(x) = x \\sin(x) + x \\cos(2x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 10]`
|
|
|
|
.. figure:: figures/Problem21.png
|
|
:alt: Univariate Problem21 function
|
|
:align: center
|
|
|
|
**Univariate Problem21 function**
|
|
|
|
*Global optimum*: :math:`f(x)=-9.50835` for :math:`x = 4.79507`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0, 10)]
|
|
|
|
self.global_optimum = 4.79507
|
|
self.fglob = -9.50835
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return x * sin(x) + x * cos(2.0 * x)
|
|
|
|
|
|
class Problem22(Benchmark):
|
|
|
|
"""
|
|
Univariate Problem22 objective function.
|
|
|
|
This class defines the Univariate Problem22 global optimization problem.
|
|
This is a multimodal minimization problem defined as follows:
|
|
|
|
.. math::
|
|
|
|
f_{\\text{Problem22}}(x) = e^{-3x} - \\sin^3(x)
|
|
|
|
Bound constraints: :math:`x \\in [0, 20]`
|
|
|
|
.. figure:: figures/Problem22.png
|
|
:alt: Univariate Problem22 function
|
|
:align: center
|
|
|
|
**Univariate Problem22 function**
|
|
|
|
*Global optimum*: :math:`f(x)=e^{-27\\pi/2} - 1` for :math:`x = 9\\pi/2`
|
|
|
|
"""
|
|
|
|
def __init__(self, dimensions=1):
|
|
Benchmark.__init__(self, dimensions)
|
|
|
|
self._bounds = [(0, 20)]
|
|
|
|
self.global_optimum = 9.0 * pi / 2.0
|
|
self.fglob = exp(-27.0 * pi / 2.0) - 1.0
|
|
|
|
def fun(self, x, *args):
|
|
self.nfev += 1
|
|
|
|
x = x[0]
|
|
return exp(-3.0 * x) - (sin(x)) ** 3.0
|