【optimtool.unconstrain】无约束优化工具箱
%matplotlib inline
import sympy as sp
import matplotlib.pyplot as plt
import optimtool as oo
def train(funcs, args, x_0):
f_list = []
title = ["gradient_descent_barzilar_borwein", "newton_CG", "newton_quasi_L_BFGS", "trust_region_steihaug_CG"]
colorlist = ["maroon", "teal", "slateblue", "orange"]
_, _, f = oo.unconstrain.gradient_descent.barzilar_borwein(funcs, args, x_0, False, True)
f_list.append(f)
_, _, f = oo.unconstrain.newton.CG(funcs, args, x_0, False, True)
f_list.append(f)
_, _, f = oo.unconstrain.newton_quasi.L_BFGS(funcs, args, x_0, False, True)
f_list.append(f)
_, _, f = oo.unconstrain.trust_region.steihaug_CG(funcs, args, x_0, False, True)
f_list.append(f)
return colorlist, f_list, title
def test(colorlist, f_list, title):
handle = []
for j, z in zip(colorlist, f_list):
ln, = plt.plot([i for i in range(len(z))], z, c=j, marker='o', linestyle='dashed')
handle.append(ln)
plt.xlabel("$Iteration \ times \ (k)$")
plt.ylabel("$Objective \ function \ value: \ f(x_k)$")
plt.legend(handle, title)
plt.title("Performance Comparison")
return None
Extended Freudenstein & Roth function
f
(
x
)
=
∑
i
=
1
n
/
2
(
?
13
+
x
2
i
?
1
+
(
(
5
?
x
2
i
)
x
2
i
?
2
)
x
2
i
)
2
+
(
?
29
+
x
2
i
?
1
+
(
(
x
2
i
+
1
)
x
2
i
?
14
)
x
2
i
)
2
,
x
0
=
[
0.5
,
?
2
,
0.5
,
?
2
,
.
.
.
,
0.5
,
?
2
]
.
f(x)=\sum_{i=1}^{n/2}(-13+x_{2i-1}+((5-x_{2i})x_{2i}-2)x_{2i})^2+(-29+x_{2i-1}+((x_{2i}+1)x_{2i}-14)x_{2i})^2, x_0=[0.5, -2, 0.5, -2, ..., 0.5, -2].
f(x)=i=1∑n/2?(?13+x2i?1?+((5?x2i?)x2i??2)x2i?)2+(?29+x2i?1?+((x2i?+1)x2i??14)x2i?)2,x0?=[0.5,?2,0.5,?2,...,0.5,?2].
x = sp.symbols("x1:5")
f = (-13 + x[0] + ((5 - x[1])*x[1] - 2)*x[1])**2 + \
(-29 + x[0] + ((x[1] + 1)*x[1] - 14)*x[1])**2 + \
(-13 + x[2] + ((5 - x[3])*x[3] - 2)*x[3])**2 + \
(-29 + x[2] + ((x[3] + 1)*x[3] - 14)*x[3])**2
x_0 = (1, -1, 1, -1)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended Trigonometric function:
f
(
x
)
=
∑
i
=
1
n
(
(
n
?
∑
j
=
1
n
cos
?
x
j
)
+
i
(
1
?
cos
?
x
i
)
?
sin
?
x
i
)
2
,
x
0
=
[
0.2
,
0.2
,
.
.
.
,
0.2
]
f(x)=\sum_{i=1}^{n}((n-\sum_{j=1}^{n}\cos x_j)+i(1-\cos x_i)-\sin x_i)^2, x_0=[0.2, 0.2, ...,0.2]
f(x)=i=1∑n?((n?j=1∑n?cosxj?)+i(1?cosxi?)?sinxi?)2,x0?=[0.2,0.2,...,0.2]
x = sp.symbols("x1:3")
f = (2 - (sp.cos(x[0]) + sp.cos(x[1])) + (1 - sp.cos(x[0])) - sp.sin(x[0]))**2 + \
(2 - (sp.cos(x[0]) + sp.cos(x[1])) + 2 * (1 - sp.cos(x[1])) - sp.sin(x[1]))**2
x_0 = (0.1, 0.1)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended Rosenbrock function
f
(
x
)
=
∑
i
=
1
n
/
2
c
(
x
2
i
?
x
2
i
?
1
2
)
2
+
(
1
?
x
2
i
?
1
)
2
,
x
0
=
[
?
1.2
,
1
,
.
.
.
,
?
1.2
,
1
]
.
c
=
100
f(x)=\sum_{i=1}^{n/2}c(x_{2i}-x_{2i-1}^2)^2+(1-x_{2i-1})^2, x_0=[-1.2, 1, ...,-1.2, 1]. c=100
f(x)=i=1∑n/2?c(x2i??x2i?12?)2+(1?x2i?1?)2,x0?=[?1.2,1,...,?1.2,1].c=100
x = sp.symbols("x1:5")
f = 100 * (x[1] - x[0]**2)**2 + \
(1 - x[0])**2 + \
100 * (x[3] - x[2]**2)**2 + \
(1 - x[2])**2
x_0 = (-2, 2, -2, 2)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Generalized Rosenbrock function
f
(
x
)
=
∑
i
=
1
n
?
1
c
(
x
i
+
1
?
x
i
2
)
2
+
(
1
?
x
i
)
2
,
x
0
=
[
?
1.2
,
1
,
.
.
.
,
?
1.2
,
1
]
,
c
=
100.
f(x)=\sum_{i=1}^{n-1}c(x_{i+1}-x_i^2)^2+(1-x_i)^2, x_0=[-1.2, 1, ...,-1.2, 1], c=100.
f(x)=i=1∑n?1?c(xi+1??xi2?)2+(1?xi?)2,x0?=[?1.2,1,...,?1.2,1],c=100.
x = sp.symbols("x1:3")
f = 100 * (x[1] - x[0]**2)**2 + (1 - x[0])**2
x_0 = (-1, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended White & Holst function
f
(
x
)
=
∑
i
=
1
n
/
2
c
(
x
2
i
?
x
2
i
?
1
3
)
2
+
(
1
?
x
2
i
?
1
)
2
,
x
0
=
[
?
1.2
,
1
,
.
.
.
,
?
1.2
,
1
]
.
c
=
100
f(x)=\sum_{i=1}^{n/2}c(x_{2i}-x_{2i-1}^3)^2+(1-x_{2i-1})^2, x_0=[-1.2, 1, ...,-1.2, 1]. c=100
f(x)=i=1∑n/2?c(x2i??x2i?13?)2+(1?x2i?1?)2,x0?=[?1.2,1,...,?1.2,1].c=100
x = sp.symbols("x1:5")
f = 100 * (x[1] - x[0]**3)**2 + \
(1 - x[0])**2 + \
100 * (x[3] - x[2]**3)**2 + \
(1 - x[2])**2
x_0 = (-1, 0.5, -1, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended Penalty function
f
(
x
)
=
∑
i
=
1
n
?
1
(
x
i
?
1
)
2
+
(
∑
j
=
1
n
x
j
2
?
0.25
)
2
,
x
0
=
[
1
,
2
,
.
.
.
,
n
]
.
f(x)=\sum_{i=1}^{n-1} (x_i-1)^2+(\sum_{j=1}^{n}x_j^2-0.25)^2, x_0=[1,2,...,n].
f(x)=i=1∑n?1?(xi??1)2+(j=1∑n?xj2??0.25)2,x0?=[1,2,...,n].
x = sp.symbols("x1:5")
f = (x[0] - 1)**2 + (x[1] - 1)**2 + (x[2] - 1)**2 + \
((x[0]**2 + x[1]**2 + x[2]**2 + x[3]**2) - 0.25)**2
x_0 = (5, 5, 5, 5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Perturbed Quadratic function
f
(
x
)
=
∑
i
=
1
n
i
x
i
2
+
1
100
(
∑
i
=
1
n
x
i
)
2
,
x
0
=
[
0.5
,
0.5
,
.
.
.
,
0.5
]
.
f(x)=\sum_{i=1}^{n}ix_i^2+\frac{1}{100}(\sum_{i=1}^{n}x_i)^2, x_0=[0.5,0.5,...,0.5].
f(x)=i=1∑n?ixi2?+1001?(i=1∑n?xi?)2,x0?=[0.5,0.5,...,0.5].
x = sp.symbols("x1:5")
f = x[0]**2 + 2*x[1]**2 + 3*x[2]**2 + 4*x[3]**2 + \
0.01 * (x[0] + x[1] + x[2] + x[3])**2
x_0 = (1, 1, 1, 1)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Raydan 1 function
f
(
x
)
=
∑
i
=
1
n
i
10
(
exp
?
x
i
?
x
i
)
,
x
0
=
[
1
,
1
,
.
.
.
,
1
]
.
f(x)=\sum_{i=1}^{n}\frac{i}{10}(\exp{x_i}-x_i), x_0=[1,1,...,1].
f(x)=i=1∑n?10i?(expxi??xi?),x0?=[1,1,...,1].
x = sp.symbols("x1:5")
f = 0.1 * (sp.exp(x[0]) - x[0]) + \
0.2 * (sp.exp(x[1]) - x[1]) + \
0.3 * (sp.exp(x[2]) - x[2]) + \
0.4 * (sp.exp(x[3]) - x[3])
x_0 = (0.5, 0.5, 0.5, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Raydan 2 function
f
(
x
)
=
∑
i
=
1
n
(
exp
?
x
i
?
x
i
)
,
x
0
=
[
1
,
1
,
.
.
.
,
1
]
.
f(x)=\sum_{i=1}^{n}(\exp{x_i}-x_i), x_0=[1,1,...,1].
f(x)=i=1∑n?(expxi??xi?),x0?=[1,1,...,1].
x = sp.symbols("x1:5")
f = (sp.exp(x[0]) - x[0]) + \
(sp.exp(x[1]) - x[1]) + \
(sp.exp(x[2]) - x[2]) + \
(sp.exp(x[3]) - x[3])
x_0 = (2, 2, 2, 2)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Diagonal 1 function
f
(
x
)
=
∑
i
=
1
n
(
exp
?
x
i
?
i
x
i
)
,
x
0
=
[
1
/
n
,
1
/
n
,
.
.
.
,
1
/
n
]
.
f(x)=\sum_{i=1}^{n}(\exp{x_i}-ix_i), x_0=[1/n,1/n,...,1/n].
f(x)=i=1∑n?(expxi??ixi?),x0?=[1/n,1/n,...,1/n].
x = sp.symbols("x1:5")
f = (sp.exp(x[0]) - x[0]) + \
(sp.exp(x[1]) - 2 * x[1]) + \
(sp.exp(x[2]) - 3 * x[2]) + \
(sp.exp(x[3]) - 4 * x[3])
x_0 = (0.5, 0.5, 0.5, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Diagonal 2 function
f
(
x
)
=
∑
i
=
1
n
(
exp
?
x
i
?
x
i
i
)
,
x
0
=
[
1
/
1
,
1
/
2
,
.
.
.
,
1
/
n
]
.
f(x)=\sum_{i=1}^{n}(\exp{x_i}-\frac{x_i}{i}), x_0=[1/1,1/2,...,1/n].
f(x)=i=1∑n?(expxi??ixi??),x0?=[1/1,1/2,...,1/n].
x = sp.symbols("x1:5")
f = (sp.exp(x[0]) - x[0]) + \
(sp.exp(x[1]) - x[1] / 2) + \
(sp.exp(x[2]) - x[2] / 3) + \
(sp.exp(x[3]) - x[3] / 4)
x_0 = (0.9, 0.6, 0.4, 0.3)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Diagonal 3 function
f
(
x
)
=
∑
i
=
1
n
(
exp
?
x
i
?
i
sin
?
(
x
i
)
)
,
x
0
=
[
1
,
1
,
.
.
.
,
1
]
.
f(x)=\sum_{i=1}^{n}(\exp{x_i}-i\sin(x_i)), x_0=[1,1,...,1].
f(x)=i=1∑n?(expxi??isin(xi?)),x0?=[1,1,...,1].
x = sp.symbols("x1:5")
f = (sp.exp(x[0]) - sp.sin(x[0])) + \
(sp.exp(x[1]) - 2 * sp.sin(x[1])) + \
(sp.exp(x[2]) - 3 * sp.sin(x[2])) + \
(sp.exp(x[3]) - 4 * sp.sin(x[3]))
x_0 = (0.5, 0.5, 0.5, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Hager function
f
(
x
)
=
∑
i
=
1
n
(
exp
?
x
i
?
i
x
i
)
,
x
0
=
[
1
,
1
,
.
.
.
,
1
]
.
f(x)=\sum_{i=1}^{n}(\exp{x_i}-\sqrt{i}x_i), x_0=[1,1,...,1].
f(x)=i=1∑n?(expxi??i
?xi?),x0?=[1,1,...,1].
x = sp.symbols("x1:5")
f = (sp.exp(x[0]) - x[0]) + \
(sp.exp(x[1]) - sp.sqrt(2) * x[1]) + \
(sp.exp(x[2]) - sp.sqrt(3) * x[2]) + \
(sp.exp(x[3]) - sp.sqrt(4) * x[3])
x_0 = (0.5, 0.5, 0.5, 0.5)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Generalized Tridiagonal 1 function
f
(
x
)
=
∑
i
=
1
n
?
1
(
x
i
+
x
i
+
1
?
3
)
2
+
(
x
i
?
x
i
+
1
+
1
)
4
,
x
0
=
[
2
,
2
,
.
.
.
,
2
]
.
f(x)=\sum_{i=1}^{n-1}(x_i+x_{i+1}-3)^2+(x_i-x_{i+1}+1)^4, x_0=[2,2,...,2].
f(x)=i=1∑n?1?(xi?+xi+1??3)2+(xi??xi+1?+1)4,x0?=[2,2,...,2].
x = sp.symbols("x1:4")
f = (x[0] + x[1] - 3)**2 + (x[0] - x[1] + 1)**4 + \
(x[1] + x[2] - 3)**2 + (x[1] - x[2] + 1)**4
x_0 = (1, 1, 1)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended Tridiagonal 1 function:
f
(
x
)
=
∑
i
=
1
n
/
2
(
x
2
i
?
1
+
x
2
i
?
3
)
2
+
(
x
2
i
?
1
?
x
2
i
+
1
)
4
,
x
0
=
[
2
,
2
,
.
.
.
,
2
]
.
f(x)=\sum_{i=1}^{n/2}(x_{2i-1}+x_{2i}-3)^2+(x_{2i-1}-x_{2i}+1)^4, x_0=[2,2,...,2].
f(x)=i=1∑n/2?(x2i?1?+x2i??3)2+(x2i?1??x2i?+1)4,x0?=[2,2,...,2].
x = sp.symbols("x1:3")
f = (x[0] + x[1] - 3)**2 + (x[0] - x[1] + 1)**4
x_0 = (1, 1)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
Extended TET function : (Three exponential terms)
f
(
x
)
=
∑
i
=
1
n
/
2
(
(
exp
?
x
2
i
?
1
+
3
x
2
i
?
0.1
)
+
exp
?
(
x
2
i
?
1
?
3
x
2
i
?
0.1
)
+
exp
?
(
?
x
2
i
?
1
?
0.1
)
)
,
x
0
=
[
0.1
,
0.1
,
.
.
.
,
0.1
]
.
f(x)=\sum_{i=1}^{n/2}((\exp x_{2i-1} + 3x_{2i} - 0.1) + \exp (x_{2i-1} - 3x_{2i} - 0.1) + \exp (-x_{2i-1}-0.1)), x_0=[0.1,0.1,...,0.1].
f(x)=i=1∑n/2?((expx2i?1?+3x2i??0.1)+exp(x2i?1??3x2i??0.1)+exp(?x2i?1??0.1)),x0?=[0.1,0.1,...,0.1].
x = sp.symbols("x1:5")
f = sp.exp(x[0] + 3*x[1] - 0.1) + sp.exp(x[0] - 3*x[1] - 0.1) + sp.exp(-x[0] - 0.1) + \
sp.exp(x[2] + 3*x[3] - 0.1) + sp.exp(x[2] - 3*x[3] - 0.1) + sp.exp(-x[2] - 0.1)
x_0 = (0.2, 0.2, 0.2, 0.2)
color, values, title = train(funcs=f, args=x, x_0=x_0)
test(color, values, title)
|