如何解决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 举报,一经查实,本站将立刻删除。