我试图用两个约束解决两个变量的LP问题,其中一个是不等式,另一个是Scipy中的等式约束。
为了转换约束中的不等式,我在其中添加了另一个名为A
的变量。
Min(z) = 80x + 60y
限制条件:
0.2x + 0.32y <= 0.25
x + y = 1
x, y <= 0
我通过添加额外的变量
A
通过以下方程式更改了不平等约束0.2x + 0.32y + A = 0.25
Min(z) = 80x + 60y + 0A
X+ Y + 0A = 1
from scipy.optimize import linprog
import numpy as np
z = np.array([80, 60, 0])
C = np.array([
[0.2, 0.32, 1],
[1, 1, 0]
])
b = np.array([0.25, 1])
x1 = (0, None)
x2 = (0, None)
sol = linprog(-z, A_eq = C, b_eq = b, bounds = (x1, x2), method='simplex')
但是,我收到一条错误消息
方法='simplex'的linprog输入无效。界线长度
与c的长度不一致
我怎样才能解决这个问题?
最佳答案
问题是您不提供A
的界限。如果您例如跑
linprog(-z, A_eq = C, b_eq = b, bounds = (x1, x2, (0, None)), method='simplex')
您将获得:
con: array([0., 0.])
fun: -80.0
message: 'Optimization terminated successfully.'
nit: 3
slack: array([], dtype=float64)
status: 0
success: True
x: array([1. , 0. , 0.05])
如您所见,满足了约束:
0.2 * 1 + 0.32 * 0.0 + 0.05 = 0.25 # (0.2x + 0.32y + A = 0.25)
并且
1 + 0 + 0 = 1 # (X + Y + 0A = 1)
关于python - 以下LP代码在哪里出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56113525/