【问题标题】:What is maximum number of equality constraints in Scipy's SLSQP algorithm?Scipy 的 SLSQP 算法中等式约束的最大数量是多少?
【发布时间】:2020-10-26 22:53:10
【问题描述】:

我正在使用以下代码使用 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 算法中等式约束的最大可能数量是多少?

【问题讨论】:

    标签: optimization scipy


    【解决方案1】:

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

    # 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 整数不应该溢出(它们是 bigint),但在 numpy 函数中我们很容易溢出。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2018-11-20
      • 2017-07-07
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多