Help us understand the problem. What is going on with this article?

# python: ベンチマーク関数お試しコード

コード利用のためだけのページなので説明は省略．上の参考ページをみていただければと思います．

なお，全てのクラスにおいて，

import numpy as np


をしている．

## Ackley function

• 数式
f(x_{1} \cdots x_{n})=20-20\exp \biggl( -0.2\sqrt{\frac{1}{n}\sum_{i=1}^{n}x_{i}^2} \biggr) +e-\exp \biggl(\frac{1}{n}\sum_{i=1}^{n}\cos(2\pi x_{i}) \biggr)

• 探索範囲と最適解
-32.768 \leqq x_{i} \leqq 32.768 \\
f_{min}(0, \cdots , 0)=0

• コード
class ackley():
def __init__(self):
print("this is Ackley function.")
self.boundaries = np.array([-32.768, 32.768])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
t1 = 20
t2 = - 20 * np.exp(- 0.2 * np.sqrt(1.0 / len(x) * np.sum(x ** 2)))
t3 = np.e
t4 = - np.exp(1.0 / len(x) * np.sum(np.cos(2 * np.pi * x)))
return t1 + t2 + t3 + t4


## Sphere function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n}x_{i}^2

• 探索範囲と最適解
\infty < x_{i} < \infty \\
f_{min}(0, \cdots , 0)=0

• コード
class sphere():
def __init__(self):
print("this is Sphere function.")
self.boundaries = np.array([-100, 100])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
return np.sum(x ** 2)


## Rosenbrock function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n-1}(100(x_{i+1}-x_{i}^2)^2+(x_{i}-1)^2)

• 探索範囲と最適解
-5 \leqq x_{i} \leqq 5 \\
f_{min}(1, \cdots , 1)=0

• コード
class rosenbrock():
def __init__(self):
print("this is Rosenbrock function.")
self.boundaries = np.array([-5, 5])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
val = 0
for i in range(0, len(x) - 1):
t1 = 100 * (x[i + 1] - x[i] ** 2) ** 2
t2 = (x[i] - 1) ** 2
val += t1 + t2
return val


## Styblinski-Tang function

• 数式
f(x_{1} \cdots x_{n})=\frac{\sum_{i=1}^{n} (x_{i}^4-16x_{i}^2+5x_{i})}{2}

• 探索範囲と最適解
-5 \leqq x_{i} \leqq 5 \\
-39.16617n \leq f(-2.903534, \cdots , -2.903534) \leq -39.16616n \\
f_{min}(-2.903534, \cdots , -2.903534) \approx -39.166165n

• コード
class styblinski():
def __init__(self):
print("this is Styblinski-Tang function.")
self.boundaries = np.array([-5, 4])
print("boundary is {}".format(self.boundaries))
print("minimum is {} times n_dim".format(-39.166165))

def f(self, x):
t1 = np.sum(x ** 4)
t2 = - 16 * np.sum(x ** 2)
t3 = 5 * np.sum(x)
return 0.5 * (t1 + t2 + t3)


## k-tablet function

• 数式
f(x_{1} \cdots x_{n}) = \sum_{i=1}^{k}x_{i}^2 + \sum_{i=k+1}^{n}(100x_{i})^2 \\
k=n/4

• 探索範囲と最適解
-5.12 \leqq x_{i} \leqq 5.12 \\
f_{min}(0, \cdots , 0)=0

• コード
class k_tablet():
def __init__(self):
print("this is k-tablet function.")
self.boundaries = np.array([-5.12, 5.12])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
k = int(np.ceil(len(x) / 4.0))
t1 = np.sum(x[:k] ** 2)
t2 = 100 ** 2 * np.sum(x[k:] ** 2)
return t1 + t2


## Weighted Sphere function or hyper ellipsodic function

• 数式
f_{min}(x_{1} \cdots x_{n})=\sum_{i=1}^{n}ix_{i}^2

• 探索範囲と最適解
-5.12 \leqq x_{i} \leqq 5.12 \\
f_{min}(0, \cdots , 0)=0

• コード
class weighted_sphere():
def __init__(self):
print("this is Weighted Sphere function or hyper ellipsodic function.")
self.boundaries = np.array([-5.12, 5.12])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
val = np.array([ (i + 1) * xi ** 2 for i, xi in enumerate(x)])
return np.sum(val)


## Sum of different power function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n}|x_{i}|^{i+1}

• 探索範囲と最適解
-1 \leqq x_{i} \leqq 1 \\
f_{min}(0, \cdots , 0)=0

• コード
class different_power():
def __init__(self):
print("this is Sum of different power function.")
self.boundaries = np.array([-1, 1])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
val = 0
for i, v in enumerate(x):
val += np.abs(v) ** (i + 2)
return val


## Griewank function

• 数式
f(x_{1} \cdots x_{n})=1+\frac{1}{4000}\sum_{i=1}^{n}x_{i}^2-\prod_{i=1}^{n}\cos\Bigl(\frac{x_{i}}{\sqrt{i}}\Bigr)

• 探索範囲と最適解
-600 \leqq x_{i} \leqq 600 \\
f_{min}(0, \cdots , 0)=0

• コード
class griewank():
def __init__(self):
print("this is Griewank function.")
self.boundaries = np.array([-600, 600])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
w = np.array([1.0 / np.sqrt(i + 1) for i in range(len(x))])
t1 = 1
t2 = 1.0 / 4000.0 * np.sum(x ** 2)
t3 = - np.prod(np.cos(x * w))
return t1 + t2 + t3


## Perm function

• 数式
f(x_{1} \cdots x_{n})=\sum_{j=1}^{n} \Biggl(\sum_{i=1}^{n}(i+\beta)\biggl(x_{i}^j- \Biggl( \frac{1}{i} \Biggr)^j \Biggr) \Biggr)^2 \\
\beta > 0

• 探索範囲と最適解
-1 \leqq x_{i} \leqq 1 \\
f_{min}\Bigl(1, \frac{1}{2} , \cdots , \frac{1}{n}\Bigl) = 0

• コード
class perm():
def __init__(self):
print("this is Perm function.")
self.boundaries = np.array([-1, 1])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
val = 0
for j in range(len(x)):
v = 0

for i in range(len(x)):
v += (i + 2) * (x[i] ** (j + 1) - ( ( 1 / (i + 1) ) ** (j + 1) ) )
val += v ** 2

return val


## Rastrigin function

• 数式
f(x_{1} \cdots x_{n})=10n+\sum_{i=1}^{n}(x_{i}^2-10\cos(2 \pi x_{i}))

• 探索範囲と最適解
-5.12 \leqq x_{i} \leqq 5.12 \\
f_{min}(0, \cdots , 0) = 0

• コード
class rastrigin():
def __init__(self):
print("this is Rastrigin function")
self.boundaries = np.array([-5.12, 5.12])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
t1 = 10 * len(x)
t2 = np.sum(x ** 2)
t3 = - 10 * np.sum(np.cos(2 * np.pi * x))
return t1 + t2 + t3


## Schwefel function

• 数式
f(x_{1} \cdots x_{n})=-\sum_{i=1}^{n}x_{i}\sin\bigl(\sqrt{|x_{i}|}\bigr)

• 探索範囲と最適解
-500 \leqq x_{i} \leqq 500 \\
f_{min}(420.9687, \cdots , 420.9687) \approx -418.9829n

• コード
class schwefel():
def __init__(self):
print("this is Schwefel function")
self.boundaries = np.array([-500, 500])
print("boundary is {}".format(self.boundaries))
print("minimum is {} times n_dim".format(-418.9829))

def f(self, x):
return - np.sum(x * np.sin( np.sqrt( np.abs(x) ) ) )


## Xin-She Yang function

• 数式
f(x_{1} \cdots x_{n})=\Bigl(\sum_{j=1}^{n}|x_{j}| \Bigr) \exp \Bigl(-\sum_{i=1}^{n}\sin(x_{i}^2) \Bigr)

• 探索範囲と最適解
-2 \pi \leqq x_{i} \leqq 2 \pi \\
f_{min}(0, \cdots , 0) = 0

• コード
class xin_she():
def __init__(self):
print("this is Xin-She Yang function.")
self.boundaries = np.array([-2 * np.pi, 2 * np.pi])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
t1 = np.sum( np.abs(x) )
e1 = - np.sum( np.sin(x ** 2) )
t2 = np.exp(e1)
return t1 * t2


## Zakharov function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n}x_{i}+\Biggl(\frac{1}{2}\sum_{i=1}^{n}ix_{i} \Biggr)^2+\Biggl(\frac{1}{2}\sum_{i=1}^{n}ix_{i} \Biggr)^4

• 探索範囲と最適解
探索範囲無し。 \\
f_{min}(0, \cdots , 0) = 0

• コード
class zakharov():
def __init__(self):
print("this is Zakharov function.")
self.boundaries = np.array([-100, 100])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
t1 = np.sum(x)
w = np.array([ i + 1 for i in range(len(x))])
wx = np.dot(w, x)
t2 = 0.5 ** 2 * wx ** 2
t3 = 0.5 ** 4 * wx ** 4
return t1 + t2 + t3


# 他のベンチマーク関数

Virtual Library of Simulation Experiments

## Rotated Hyper-Ellipsoid function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n}\sum_{j=1}^{j}x_{i}^2

• 探索範囲と最適解
-65.536 < x_{i} < 65.536 \\
f_{min}(0, \cdots , 0)=0

• コード
class rotated_hyper_ellipsoid():
def __init__(self):
print("this is rotated hyper ellipsoid function.")
self.boundaries = np.array([-65.536, 65.536])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
val = 0
for i in range(len(x)):
val += np.sum(x[:i + 1] ** 2)
return val


## Trid function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{n}(x_i - 1)^2 - \sum_{i=2}^{n}x_{i}x_{i-1}

• 探索範囲と最適解
-n^2 < x_{i} < n^2 \\
f_{min}(n + 1 - 1, \cdots ,i (n + 1 - i), \cdots,  n (n + 1 - n))=0

• コード
class trid():
def __init__(self, n_dim = 10):
print("this is rotated trid function.")
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
n_dim = len(x)
self.boundaries = np.array([- n_dim ** 2, n_dim ** 2])

t1 = np.sum( (x - 1) ** 2 )
t2 = - np.sum( x[1:n_dim] * x[0:n_dim - 1] )

return t1 + t2


## Powell function

• 数式
f(x_{1} \cdots x_{n})=\sum_{i=1}^{\frac{n}{4}}\bigl[
(x_{4i-3} - 10x_{4i-2})^2 +
5(x_{4i-1} - x_{4i})^2 +
(x_{4i-2} - 2x_{4i-1})^4 +
10(x_{4i-3} - x_{4i})^4
\bigl]

• 探索範囲と最適解
-4 < x_{i} < 5 \\
f_{min}(0, \cdots ,0)=0

• コード
not available now


## Dixon-Price function

• 数式
f(x_{1} \cdots x_{n})=(x_1 - 1)^2 + \sum_{i=2}^{n}i(2x_i^2 - x_{i - 1})^2

• 探索範囲と最適解
-10 < x_{i} < 10 \\
f_{min}(2^{-\frac{2^1-2}{2^1}}, \cdots , 2^{-\frac{2^n-2}{2^n}})=0

• コード
class dixon_price():
def __init__(self):
print("this is rotated dixon price function.")
self.boundaries = np.array([- 10, 10])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
n_dim = len(x)
c = np.array([i + 2 for i in range(n_dim - 1)])
t1 = (x[0] - 1) ** 2
t2 = np.sum( c * (2 * x[1:n_dim] ** 2 - x[0:n_dim - 1] ) ** 2 )

return t1 + t2


## Levy function

• 数式
f(x_{1} \cdots x_{n})=
sin^2(\pi w_1) +

\sum_{i=1}^{n - 1}(w_i - 1)^2
\bigl[
1 + 10sin^2(\pi w_i + 1)
\bigl] +

(w_n - 1)^2 \bigl[
1 + sin^2(2\pi w_n)
\bigl]

ただし，w_i\ の値は \
w_i = 1 + \frac{x_i - 1}{4} \ によって，定義される．

• 探索範囲と最適解
-10 < x_{i} < 10 \\
f_{min}(1, \cdots , 1)=0

• コード
class levy():
def __init__(self):
print("this is levy price function.")
self.boundaries = np.array([- 10, 10])
print("boundary is {}".format(self.boundaries))
print("minimum is {}".format(0))

def f(self, x):
w = np.array(1. + (x - 1) / 4.)
t1 = np.sin(np.pi * w[0]) ** 2
t2 = (w[-1] - 1) ** 2 * (1 + np.sin(2 * np.pi * w[-1]) ** 2)
t3 = np.sum( (w[:-1] - 1) ** 2 * (1 + 10 * np.sin(np.pi * w[:-1] + 1) ** 2) )

return t1 + t2 + t3


https://nabenabe0928.github.io/
Why not register and get more from Qiita?
1. We will deliver articles that match you
By following users and tags, you can catch up information on technical fields that you are interested in as a whole
2. you can read useful information later efficiently
By "stocking" the articles you like, you can search right away