python - 下面的 LP 代码哪里出错了?

标签 python scipy linear-programming

我正在尝试解决具有两个变量和两个约束的 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')

但是,我收到一条错误消息

Invalid input for linprog with method = 'simplex'. Length of bounds is inconsistent with the length of 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/

相关文章:

python - 如何将 PySpark 中的表数据框导出到 csv?

python - 如何用 numpy/scipy 生成矩形脉冲

python - 从子矩阵列表创建稀疏矩阵 (Python)

python - 测试 PuLP 安装失败

python - Pulp Killer 数独 - 检查变量选择的选择是不同的

python - 如何从python中的列表中删除重复项

python - X11 Tkinter + PIL + py2app = IOError 无法识别图像文件

Python tkinter 弹跳球 - 能量趋于无穷大

python - 如何检查一个二维数组是否在另一个二维数组中

python - 线性规划 - 最大值优化