我对方法中的等式约束如何工作感到非常困惑。我在这做错了什么?我希望点(A_eq,x)等于b_eq。我认为这是平等约束的定义。但是,np.dot(A_eq,res.x)给出[0,-6],而b_eq明确给出[0,0]。我疯了,还是这个错误?
(编辑:约束实际上是来自模型的错误指定。一旦我更正模型,它实际上工作正常。但是,鉴于这个错误指定的模型,我仍然期望等式约束保持,或者在最坏的情况下,linprog程序应该失败而不是成功,但给出的答案不符合约束条件。
import numpy as np
from scipy.optimize import linprog
c=[-0.098782540360068297, -0.072316526358138802, 0.004, 0.004, 0.004, 0.004]
A_ub=[[1.0, 0, 0, 0, 0, 0], [-1.0, 0, 0, 0, 0, 0], [0, -1.0, 0, 0, 0, 0], [0, 1.0, 0, 0, 0, 0], [1.0, 1.0, 0, 0, 0, 0]]
b_ub=[3.0, 3.0, 3.0, 3.0, 20.0]
A_eq=[[1.0, 0, -1, 1, -1, 1], [0, -1.0, -1, 1, -1, 1]]
b_eq=[0,0]
res=linprog(c, A_ub, b_ub, A_eq, b_eq)
np.dot(A_eq, res.x)