scipy.optimize.linprog 的拉格朗日乘数

Lagrange multipliers with scipy.optimize.linprog

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

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

slack: 1D array

The (nominally positive) values of the slack variables, b_ub - A_ub @ x.

感谢您的帮助!

尚未实施。参见 How to get Lagrange / lambda multipliers out of 'linprog' optimize subroutine in scipy module ? #11848

虽然Arraval已经回答了我的问题。我找到了一个我想分享的解决方法,同样使用 scipyLinprog 尚未实现,但 minimize 函数可以 return 使用 method='trust-constr':

时的拉格朗日乘数

希望对您有所帮助。

从 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']