【问题标题】:Lagrange multipliers with scipy.optimize.linprog带有 scipy.optimize.linprog 的拉格朗日乘数
【发布时间】:2020-07-31 06:10:28
【问题描述】:

是否可以像在 Matlab linprog 中一样从scipy linprog 检索拉格朗日乘数?如果有怎么办?

我阅读了文档,但没有找到。有一个return 参数调用slack 但我认为这是不同的,因为它只与不等式约束有关:

松弛:一维数组

松弛变量的(名义上正)值,b_ub - A_ub @ x。

感谢您的帮助!

【问题讨论】:

    标签: python scipy mathematical-optimization


    【解决方案1】:

    从 scipy 1.7.0 开始,还可以使用HiGHS dual simplex solver 接收拉格朗日乘数(也称为对偶值影子价格):

    import numpy as np
    from scipy.optimize import linprog
    
    c = -1*np.array([300, 500])
    A_ub = np.array([[1, 2], [1, 1], [0, 3]])
    b_ub = np.array([170, 150, 180])
    A_eq = np.array([[1, 1]])
    b_eq = np.array([80])
    
    # solve c'x  s.t.  A_ub*x <= b_ub, A_eq*x == b_eq, x >= 0
    result = linprog(c=c, A_ub=A_ub, b_ub=b_ub, method="highs-ds")
    
    # lagrangian multipliers
    λ_ineq = result['ineqlin']['marginals']
    λ_eq   = result['eqlin']['marginals']
    

    【讨论】:

      【解决方案2】:

      虽然 Arraval 已经回答了我的问题。我找到了一个我想分享的解决方法,也使用scipyLinprog 尚未实现,但 minimize 函数在使用 method='trust-constr' 时可以返回拉格朗日乘数:

      我希望这会有所帮助。

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        相关资源
        最近更新 更多