微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scipy的SLSQP算法中最大的相等约束数量是多少?

如何解决Scipy的SLSQP算法中最大的相等约束数量是多少?

我正在使用以下代码通过Scipy的优化模块来优化一组参数:

slsqp_res = minimize(obj_func,params,method='SLSQP',constraints= eq_cons)

其中obj_func是我的目标函数,params是初始参数值的向量,eq_cons是一组相等约束。我尝试了不同的相等约束,但有时会收到此错误

File "C:\python36\lib\site-packages\scipy\optimize\_minimize.py",line 618,in minimize
  constraints,callback=callback,**options)
File "C:\python36\lib\site-packages\scipy\optimize\slsqp.py",line 329,in _minimize_slsqp
  w = zeros(len_w)
ValueError: negative dimensions are not allowed

我想这是因为在某些情况下,我的平等约束过多。我的问题是SLSQP算法中最大的相等约束数量是多少?

解决方法

此消息似乎来自工作区计算:

# Define the workspaces for SLSQP
n1 = n + 1
mineq = m - meq + n1 + n1
len_w = (3*n1+m)*(n1+1)+(n1-meq+1)*(mineq+2) + 2*mineq+(n1+mineq)*(n1-meq) \
        + 2*meq + n1 + ((n+1)*n)//2 + 2*m + 3*n + 3*n1 + 1
len_jw = mineq
w = zeros(len_w)   <-----
jw = zeros(len_jw)

Python整数不应溢出(它们是bigints),但是在numpy函数内部,我们可以轻松溢出。

请注意,SLSQP是用于中小型问题的密集代码。对于大问题,您可能需要查看像IPOPT这样的稀疏求解器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。