python 用nelder-mead对函数进行优化时,初始值不同,得到优化值也不同。

livemorexie 2020-07-07 11:31:09
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]

而且奇怪的是,优化值有负号出现,函数我加了绝对值的。
...全文
8538 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn.Yu 2020-09-30
  • 打赏
  • 举报
回复
楼主能麻烦告诉下是怎么解决初始值不同导致优化结果不同的问题吗?我也遇到了同样的问题
livemorexie 2020-07-08
  • 打赏
  • 举报
回复
已解决,谢谢!

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧