Source code for opfunu.name_based.m_func

#!/usr/bin/env python
# Created by "Thieu" at 17:31, 30/07/2022 ----------%                                                                               
#       Email: nguyenthieu2102@gmail.com            %                                                    
#       Github: https://github.com/thieu1995        %                         
# --------------------------------------------------%

import numpy as np
from opfunu.benchmark import Benchmark


[docs]class Matyas(Benchmark): """ .. [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. .. math:: f_{\text{Matyas}}(x) = 0.26(x_1^2 + x_2^2) - 0.48 x_1 x_2 Here :math:`x_i \in [-10, 10]` for :math:`i = 1, 2`. *Global optimum*: :math:`f(x) = 0.0`for :math:`x = [0, 0]` """ name = "Matyas Function" latex_formula = r'f_{\text{Matyas}}(x) = 0.26(x_1^2 + x_2^2) - 0.48 x_1 x_2' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10]' latex_formula_global_optimum = r'f(0, 0) = 0' continuous = True linear = False convex = True unimodal = True separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.array([0., 0.])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return 0.26 * (x[0] ** 2 + x[1] ** 2) - 0.48 * x[0] * x[1]
[docs]class McCormick(Benchmark): """ .. [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. .. math:: f(x) = - x_{1} + 2 x_{2} + \left(x_{1} - x_{2}\right)^{2} + \sin\left(x_{1} + x_{2}\right) + 1 Here :math:`x_1 \in [-1.5, 4], x_2 \in [-3, 4]` . *Global optimum*: :math:`f(x) = -1.913222954981037`for :math:`x = [-0.5471975602214493, -1.547197559268372]` """ name = "McCormick Function" latex_formula = r'f(x) = - x_{1} + 2 x_{2} + \left(x_{1} - x_{2}\right)^{2} + \sin\left(x_{1} + x_{2}\right) + 1' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_1 \in [-1.5, 4], x_2 \in [-3, 4]' latex_formula_global_optimum = r'f(-0.5471975602214493, -1.547197559268372) = -1.913222954981037' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-1.5, 4.], [-3., 4.]])) self.f_global = -1.913222954981037 self.x_global = np.array([-0.5471975602214493, -1.547197559268372])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return (np.sin(x[0] + x[1]) + (x[0] - x[1]) ** 2 - 1.5 * x[0] + 2.5 * x[1] + 1)
[docs]class Meyer(Benchmark): """ .. [1] https://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml """ name = "Meyer Function" latex_formula = r'f(x)' latex_formula_dimension = r'd = 3' latex_formula_bounds = r'x_1 \in [0, 1], x_2 \in [100, 1000], x_3 \in [100, 500]' latex_formula_global_optimum = r'f(5.6096364710e-3, 6.1813463463e2, 3.4522363462e2) = 8.7945855171e1' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 3 self.check_ndim_and_bounds(ndim, bounds, np.array([[0., 1.], [100., 1000.], [100., 500.]])) self.f_global = 8.7945855171e1 self.x_global = np.array([5.6096364710e-3, 6.1813463463e2, 3.4522363462e2]) self.a = np.asarray([3.478E+04, 2.861E+04, 2.365E+04, 1.963E+04, 1.637E+04, 1.372E+04, 1.154E+04, 9.744E+03, 8.261E+03, 7.030E+03, 6.005E+03, 5.147E+03, 4.427E+03, 3.820E+03, 3.307E+03, 2.872E+03]) self.b = np.asarray([5.000E+01, 5.500E+01, 6.000E+01, 6.500E+01, 7.000E+01, 7.500E+01, 8.000E+01, 8.500E+01, 9.000E+01, 9.500E+01, 1.000E+02, 1.050E+02, 1.100E+02, 1.150E+02, 1.200E+02, 1.250E+02])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 vec = x[0] * np.exp(x[1] / (self.b + x[2])) return np.sum((self.a - vec) ** 2)
[docs]class Michalewicz(Benchmark): """ .. [1] Adorio, E. MVF - "Multivariate Test Functions Library in C for Unconstrained Global Optimization", 2005 .. math:: f(x) = - \sum_{i=1}^{2} \sin\left(x_i\right) \sin^{2 m}\left(\frac{i x_i^{2}}{\pi}\right) Here :math:`x_i \in [0, \pi]`. *Global optimum*: :math:`f(x) = -1.8013`for :math:`x = [0, 0]` """ name = "McCormick Function" latex_formula = r'f(x) = - x_{1} + 2 x_{2} + \left(x_{1} - x_{2}\right)^{2} + \sin\left(x_{1} + x_{2}\right) + 1' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [0, \pi]`' latex_formula_global_optimum = r'f(0, 0) = -1.8013' continuous = True linear = False convex = False unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[0., np.pi] for _ in range(self.dim_default)])) self.f_global = -1.8013 self.x_global = np.array([0, 0])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 m = 10.0 idx = np.arange(1, self.ndim + 1) return -np.sum(np.sin(x) * np.sin(idx * x ** 2 / np.pi) ** (2 * m))
[docs]class MieleCantrell(Benchmark): """ .. [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. .. math:: f(x) = (e^{-x_1} - x_2)^4 + 100(x_2 - x_3)^6 + \tan^4(x_3 - x_4) + x_1^8 Here :math:`x_i \in [-1, 1] for i \in [1, 4]`. *Global optimum*: :math:`f(x) = 0`for :math:`x = [0, 1, 1, 1]` """ name = "Miele Cantrell Function" latex_formula = r'f(x) = (e^{-x_1} - x_2)^4 + 100(x_2 - x_3)^6 + \tan^4(x_3 - x_4) + x_1^8' latex_formula_dimension = r'd = 4' latex_formula_bounds = r'x_i \in [-1, 1] for i \in [1, 4]' latex_formula_global_optimum = r'f(0, 1, 1, 1) = 0' continuous = True linear = False convex = False unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 4 self.check_ndim_and_bounds(ndim, bounds, np.array([[-1., 1.] for _ in range(self.dim_default)])) self.f_global = 0 self.x_global = np.array([0, 1, 1, 1])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return (np.exp(-x[0]) - x[1]) ** 4 + 100 * (x[1] - x[2]) ** 6 + np.tan(x[2] - x[3]) ** 4 + x[0] ** 8
[docs]class Mishra01(Benchmark): """ .. [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. .. math:: f(x) = (1 + x_n)^{x_n} x_n = n - \sum_{i=1}^{n-1} x_i Here :math:`x_i \in [0, 1] for i \in [1, n]`. *Global optimum*: :math:`f(x) = 2`for :math:`x_i = 1 for all i \in [1, n]` """ name = "Mishra 1 Function" latex_formula = r'f(x) = (1 + x_n)^{x_n}; x_n = n - \sum_{i=1}^{n-1} x_i' latex_formula_dimension = r'd = n' latex_formula_bounds = r'x_i \in [0, 1] for i \in [1, n]' latex_formula_global_optimum = r'f(1) = 2' continuous = True linear = False convex = False unimodal = False separable = False differentiable = True scalable = True randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = True self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[0., 1.] for _ in range(self.dim_default)])) self.f_global = 2.0 self.x_global = np.ones(self.ndim)
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 xn = self.ndim - np.sum(x[0:-1]) return (1 + xn) ** xn
[docs]class Mishra02(Benchmark): """ .. [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. .. math:: f(x) = (1 + x_n)^{x_n} x_n = n - \sum_{i=1}^{n-1} \frac{(x_i + x_{i+1})}{2} Here :math:`x_i \in [0, 1] for i \in [1, n]`. *Global optimum*: :math:`f(x) = 2`for :math:`x_i = 1 for all i \in [1, n]` """ name = "Mishra 2 Function" latex_formula = r'f(x) = (1 + x_n)^{x_n}; x_n = n - \sum_{i=1}^{n-1} \frac{(x_i + x_{i+1})}{2}' latex_formula_dimension = r'd = n' latex_formula_bounds = r'x_i \in [0, 1] for i \in [1, n]' latex_formula_global_optimum = r'f(1) = 2' continuous = True linear = False convex = False unimodal = False separable = False differentiable = True scalable = True randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = True self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[0., 1. + 1e-9] for _ in range(self.dim_default)])) self.f_global = 2.0 self.x_global = np.ones(self.ndim)
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 xn = self.ndim - np.sum((x[:-1] + x[1:]) / 2.0) return (1 + xn) ** xn
[docs]class Mishra03(Benchmark): """ .. [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. .. math:: f(x) = \sqrt{\lvert \cos{\sqrt{\lvert x_1^2 + x_2^2 \rvert}} \rvert} + 0.01(x_1 + x_2) Here :math:`x_i \in [0, 1] for i \in [1, n]`. *Global optimum*: :math:`f(-9.99378322, -9.99918927) = -0.19990562` """ name = "Mishra 3 Function" latex_formula = r'f(x) = \sqrt{\lvert \cos{\sqrt{\lvert x_1^2 + x_2^2 \rvert}} \rvert} + 0.01(x_1 + x_2)' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] for i \in [1, 2]' latex_formula_global_optimum = r'f(-9.99378322, -9.99918927) = -0.19990562' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = -0.19990562 self.x_global = np.array([-9.99378322, -9.99918927])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return 0.01 * (x[0] + x[1]) + np.sqrt(np.abs(np.cos(np.sqrt(np.abs(x[0] ** 2 + x[1] ** 2)))))
[docs]class Mishra04(Benchmark): """ .. [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. .. math:: f(x) = \sqrt{\lvert \sin{\sqrt{\lvert x_1^2 + x_2^2 \rvert}} \rvert} + 0.01(x_1 + x_2) Here :math:`x_i \in [-10, 10] for i \in [1, n]`. *Global optimum*: :math:`f(-8.71499636, -9.0533148) = -0.17767` """ name = "Mishra 4 Function" latex_formula = r'f(x) = \sqrt{\lvert \sin{\sqrt{\lvert x_1^2 + x_2^2 \rvert}} \rvert} + 0.01(x_1 + x_2)' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] for i \in [1, 2]' latex_formula_global_optimum = r'f(-8.71499636, -9.0533148) = -0.17767' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = -0.17767 self.x_global = np.array([-8.71499636, -9.0533148])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return 0.01 * (x[0] + x[1]) + np.sqrt(np.abs(np.sin(np.sqrt(abs(x[0] ** 2 + x[1] ** 2)))))
[docs]class Mishra05(Benchmark): """ .. [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. .. math:: f(x) = \left [ \sin^2 ((\cos(x_1) + \cos(x_2))^2) + \cos^2 ((\sin(x_1) + \sin(x_2))^2) + x_1 \right ]^2 + 0.01(x_1 + x_2) Here :math:`x_i \in [-10, 10] for i \in [1, 2]`. *Global optimum*: :math:`f(-1.98682, -10) = -1.019829519930646` """ name = "Mishra 5 Function" latex_formula = r'f(x) = \left [ \sin^2 ((\cos(x_1) + \cos(x_2))^2) + \cos^2 ((\sin(x_1) + \sin(x_2))^2) + x_1 \right ]^2 + 0.01(x_1 + x_2)' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] for i \in [1, 2]' latex_formula_global_optimum = r'f(-1.98682, -10) = -1.019829519930646' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = -1.019829519930646 self.x_global = np.array([-1.98682, -10])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return (0.01 * x[0] + 0.1 * x[1] + (np.sin((np.cos(x[0]) + np.cos(x[1])) ** 2) ** 2 + np.cos((np.sin(x[0]) + np.sin(x[1])) ** 2) ** 2 + x[0]) ** 2)
[docs]class Mishra06(Benchmark): """ .. [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. .. math:: f(x) = -\log{\left [ \sin^2 ((\cos(x_1) + \cos(x_2))^2) - \cos^2 ((\sin(x_1) + \sin(x_2))^2) + x_1 \right ]^2} + 0.01 \left[(x_1 -1)^2 + (x_2 - 1)^2 \right] Here :math:`x_i \in [-10, 10] for i \in [1, 2]`. *Global optimum*: :math:`f(2.88631, 1.82326) = -2.28395` """ name = "Mishra 6 Function" latex_formula = r'f(x) = -\log{\left [ \sin^2 ((\cos(x_1) + \cos(x_2))^2) - \cos^2 ((\sin(x_1) + \sin(x_2))^2) + x_1 \right ]^2} + 0.01 \left[(x_1 -1)^2 + (x_2 - 1)^2 \right]' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] for i \in [1, 2]' latex_formula_global_optimum = r'f(2.88631, 1.82326) = -2.28395' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = -2.28395 self.x_global = np.array([2.88631, 1.82326])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 a = 0.1 * ((x[0] - 1) ** 2 + (x[1] - 1) ** 2) u = (np.cos(x[0]) + np.cos(x[1])) ** 2 v = (np.sin(x[0]) + np.sin(x[1])) ** 2 return a - np.log((np.sin(u) ** 2 - np.cos(v) ** 2 + x[0]) ** 2)
[docs]class Mishra07(Benchmark): """ .. [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. .. math:: f(x) = \left [\prod_{i=1}^{n} x_i - n! \right]^2 Here :math:`x_i \in [-10, 10] for i \in [1, n]`. *Global optimum*: :math:`f(\sqrt{n}) = 0, ` """ name = "Mishra 7 Function" latex_formula = r'f(x) = \left [\prod_{i=1}^{n} x_i - n! \right]^2' latex_formula_dimension = r'd = n' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, n]' latex_formula_global_optimum = r'f(\sqrt{n}) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = True self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0 self.x_global = np.sqrt(self.ndim) * np.ones(self.ndim)
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return (np.prod(x) - np.math.factorial(self.ndim)) ** 2.0
[docs]class Mishra08(Benchmark): """ .. [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. .. math:: f(x) = 0.001 \left[\lvert x_1^{10} - 20x_1^9 + 180x_1^8 - 960 x_1^7 + 3360x_1^6 - 8064x_1^5 + 13340x_1^4 - 15360x_1^3 + 11520x_1^2 - 5120x_1 + 2624 \rvert \lvert x_2^4 + 12x_2^3 + 54x_2^2 + 108x_2 + 81 \rvert \right]^2 Here :math:`x_i \in [-10, 10] for i \in [1, 2]`. *Global optimum*: :math:`f(2, -3) = 0, ` """ name = "Mishra 8 Function" latex_formula = r'f(x) = 0.001 \left[\lvert x_1^{10} - 20x_1^9 + 180x_1^8 - 960 x_1^7 + 3360x_1^6 - 8064x_1^5 + 13340x_1^4 - 15360x_1^3 + 11520x_1^2 - 5120x_1 + 2624 \rvert \lvert x_2^4 + 12x_2^3 + 54x_2^2 + 108x_2 + 81 \rvert \right]^2' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, 2]' latex_formula_global_optimum = r'f(2, -3) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.array([2., -3.])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 val = np.abs(x[0] ** 10 - 20 * x[0] ** 9 + 180 * x[0] ** 8 - 960 * x[0] ** 7 + 3360 * x[0] ** 6 - 8064 * x[0] ** 5 + 13340 * x[0] ** 4 - 15360 * x[0] ** 3 + 11520 * x[0] ** 2 - 5120 * x[0] + 2624) val += np.abs(x[1] ** 4 + 12 * x[1] ** 3 + 54 * x[1] ** 2 + 108 * x[1] + 81) return 0.001 * val ** 2
[docs]class Mishra09(Benchmark): """ .. [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. .. math:: f(x) = \left[ ab^2c + abc^2 + b^2 + (x_1 + x_2 - x_3)^2 \right]^2 Where, in this exercise: .. math:: \begin{cases} a = 2x_1^3 + 5x_1x_2 + 4x_3 - 2x_1^2x_3 - 18 \\ b = x_1 + x_2^3 + x_1x_2^2 + x_1x_3^2 - 22 \\ c = 8x_1^2 + 2x_2x_3 + 2x_2^2 + 3x_2^3 - 52 \end{cases} Here :math:`x_i \in [-10, 10] for i \in [1, 2, 3]`. *Global optimum*: :math:`f(1, 2, 3) = 0, ` """ name = "Mishra 9 Function" latex_formula = r'\left[ ab^2c + abc^2 + b^2 + (x_1 + x_2 - x_3)^2 \right]^2' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, 2, 3]' latex_formula_global_optimum = r'f(1, 2, 3) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 3 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.array([1., 2., 3.])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 a = (2 * x[0] ** 3 + 5 * x[0] * x[1] + 4 * x[2] - 2 * x[0] ** 2 * x[2] - 18) b = x[0] + x[1] ** 3 + x[0] * x[1] ** 2 + x[0] * x[2] ** 2 - 22.0 c = (8 * x[0] ** 2 + 2 * x[1] * x[2] + 2 * x[1] ** 2 + 3 * x[1] ** 3 - 52) return (a * c * b ** 2 + a * b * c ** 2 + b ** 2 + (x[0] + x[1] - x[2]) ** 2) ** 2
[docs]class Mishra10(Benchmark): """ .. [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. .. math:: f(x) = \left[ \lfloor x_1 \perp x_2 \rfloor - \lfloor x_1 \rfloor - \lfloor x_2 \rfloor \right]^2 Here :math:`x_i \in [-10, 10] for i \in [1, 2]`. *Global optimum*: :math:`f(2, 2) = 0, ` """ name = "Mishra 10 Function" latex_formula = r'\left[ \lfloor x_1 \perp x_2 \rfloor - \lfloor x_1 \rfloor - \lfloor x_2 \rfloor \right]^2' latex_formula_dimension = r'd = 2' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, 2]' latex_formula_global_optimum = r'f(2, 2) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = False self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.array([2., 2.])
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 x_int = x.astype(int) return ((x_int[0] + x_int[1]) - (x_int[0] * x_int[1])) ** 2.0
[docs]class Mishra11(Benchmark): """ .. [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. .. math:: f(x) = \left [ \frac{1}{n} \sum_{i=1}^{n} \lvert x_i \rvert - \left(\prod_{i=1}^{n} \lvert x_i \rvert \right )^{\frac{1}{n}} \right]^2 Here :math:`x_i \in [-10, 10] for i \in [1, 2]`. *Global optimum*: :math:`f(0) = 0, ` """ name = "Mishra 11 Function" latex_formula = r'\left [ \frac{1}{n} \sum_{i=1}^{n} \lvert x_i \rvert - \left(\prod_{i=1}^{n} \lvert x_i \rvert \right )^{\frac{1}{n}} \right]^2' latex_formula_dimension = r'd = n' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, n]' latex_formula_global_optimum = r'f(0) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = True self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.zeros(self.ndim, dtype=float)
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return ((1.0 / self.ndim) * np.sum(np.abs(x)) - (np.prod(np.abs(x))) ** 1.0 / self.ndim) ** 2.0
[docs]class MultiModal(Benchmark): """ .. [1] Gavana, A. Global Optimization Benchmarks and AMPGO retrieved 2015 .. math:: f(x) = \left( \sum_{i=1}^n \lvert x_i \rvert \right) \left( \prod_{i=1}^n \lvert x_i \rvert \right) Here :math:`x_i \in [-10, 10] for i \in [1, n]`. *Global optimum*: :math:`f(0) = 0, ` """ name = "Mishra 11 Function" latex_formula = r'\left( \sum_{i=1}^n \lvert x_i \rvert \right) \left( \prod_{i=1}^n \lvert x_i \rvert \right)' latex_formula_dimension = r'd = n' latex_formula_bounds = r'x_i \in [-10, 10] \forall i \in [1, n]' latex_formula_global_optimum = r'f(0) = 0' continuous = True linear = False convex = True unimodal = False separable = False differentiable = True scalable = False randomized_term = False parametric = False modality = False # Number of ambiguous peaks, unknown # peaks def __init__(self, ndim=None, bounds=None): super().__init__() self.dim_changeable = True self.dim_default = 2 self.check_ndim_and_bounds(ndim, bounds, np.array([[-10., 10.] for _ in range(self.dim_default)])) self.f_global = 0.0 self.x_global = np.zeros(self.ndim, dtype=float)
[docs] def evaluate(self, x, *args): self.check_solution(x) self.n_fe += 1 return np.sum(np.abs(x)) * np.prod(np.abs(x))