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.
感谢您的帮助!
虽然Arraval已经回答了我的问题。我找到了一个我想分享的解决方法,同样使用 scipy
。 Linprog
尚未实现,但 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']
是否可以像在 Matlab linprog 中那样从 scipy linprog 中检索拉格朗日乘数?如果有怎么办?
我阅读了文档,但没有找到。有一个 return
参数调用 slack
但我认为这是不同的,因为它只与不等式约束有关:
slack: 1D array
The (nominally positive) values of the slack variables, b_ub - A_ub @ x.
感谢您的帮助!
虽然Arraval已经回答了我的问题。我找到了一个我想分享的解决方法,同样使用 scipy
。 Linprog
尚未实现,但 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']