首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SLSQP优化不收敛于唯一解

SLSQP优化不收敛于唯一解
EN

Stack Overflow用户
提问于 2019-09-04 02:45:44
回答 1查看 351关注 0票数 0

我正在尝试简单的实验来学习scipy的SLSQP优化器。

我采用了下面的函数:

代码语言:javascript
运行
复制
def obj(x):
    return -1*((x[0]*x[0])+(x[1]*x[1]))

它是雅可比矩阵:

代码语言:javascript
运行
复制
def jacj(x):
    return [-2*x[0],-2*x[1]]

它的界限是:

代码语言:javascript
运行
复制
bounds=[(0,1),(0,1)]

一个简单的约束-- x+2*x1<=1:

代码语言:javascript
运行
复制
cons2=({'type':'ineq',
         'fun':lambda x: np.array([-(x[0])-2*(x[1])+1]),
          'jac':lambda x: np.array([-1.0,-2.0])})

现在我尝试使用initial guess x0=.1,0.01

代码语言:javascript
运行
复制
res=minimize(obj,x0,method='slsqp',jac=jacj,bounds=bounds,
    constraints=cons2,options={'maxiter':100,'ftol':0.000001,'eps':1.0e-08})

当我运行它时,我得到的解决方案是: x=1,x1=0和obj=-1

但是,当我以x0=0.001,0.01作为初始猜测时,我得到的解决方案是: x=0、x1=0.5和obj=0.25

为什么它没有在后一次运行中给出最优解决方案?它怎麽工作?

EN

回答 1

Stack Overflow用户

发布于 2019-09-21 02:16:47

最大化平方和函数是非凸的。求解器通常会收敛到局部最优。对于有保证的最优解,您需要使用全局求解器。

请注意,最小化平方和目标更容易:这是凸的。在这种情况下,求解器总是(好吧,除了不可行和数值问题)收敛到全局最优。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57777210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档