python 用nelder-mead对函数进行优化时,初始值不同,得到优化值也不同。
python 用nelder-mead对函数进行优化时,初始值不同,得到优化值也不同。
超级小白一个,求助原因,万分感谢!
import numpy as np
import math
from scipy.optimize import minimize
p=0.1
T=1
def f(x):
P11ab = (1-p)*math.exp(-x[0]**2-T*x[1]**2)*math.exp(math.sqrt(p*T)*(2*x[0]*x[1]))
P1a = (1-p)*math.exp(-(1-p)*x[0]**2)
P1b = (1-p)*math.exp(-(1-p)*T*x[1]**2)
E00 = 4*P11ab -2*(P1a+P1b)+1
P11ad = (1-p)*math.exp(-x[0]**2-T*x[3]**2)*math.exp(math.sqrt(p*T)*(2*x[0]*x[3]))
P1a = (1-p)*math.exp(-(1-p)*x[0]**2)
P1d = (1-p)*math.exp(-(1-p)*T*x[3]**2)
E01 = 4*P11ad -2*(P1a+P1d)+1
P11cb = (1-p)*math.exp(-x[2]**2-T*x[1]**2)*math.exp(math.sqrt(p*T)*(2*x[2]*x[1]))
P1c = (1-p)*math.exp(-(1-p)*x[2]**2)
P1b = (1-p)*math.exp(-(1-p)*T*x[1]**2)
E10 = 4*P11cb -2*(P1c+P1b)+1
P11cd = (1-p)*math.exp(-x[2]**2-T*x[3]**2)*math.exp(math.sqrt(p*T)*(2*x[2]*x[3]))
P1c = (1-p)*math.exp(-(1-p)*x[2]**2)
P1d = (1-p)*math.exp(-(1-p)*T*x[3]**2)
E11 = 4*P11cd -2*(P1c+P1d)+1
S = abs(E00+E01+E10-E11)
return S
x0 = np.array([0.5,1.0,2.5,2.0,-0.5])
res = minimize(f, x0, method='nelder-mead',
options={'xatol': 1e-1, 'disp': True})
print(res.x)
运行结果
Optimization terminated successfully.
Current function value: 0.000111
Iterations: 62
Function evaluations: 121
[ 0.59736093 1.09629048 2.606457 1.34629423 -0.51642658]
而且奇怪的是,优化值有负号出现,函数我加了绝对值的。