【发布时间】:2019-12-26 02:43:47
【问题描述】:
我正在尝试在基于 Jupyter 的 Python 中使用 CPLEX 解决以下简单的 LP 问题并得到以下错误。
任何人都可以帮助解释错误。 LP 问题有 6 个变量和 3 个约束。我检查了定义的列表的尺寸,它们与问题的大小一致。
Maximize {obj: - 28.44 x1 - 27.38 x2 - 26.44 x3 - 25.38 x4 - 26.44 x5
- 25.38 x6}
Subject To
c1: x1 + x2 = 0
c2: x3 + x4 = 0
c3: x5 + x6 = 0
Bounds
-2.1 <= x1 <= 2.1
-2.1 <= x2 <= 2.1
-2.1 <= x3 <= 2.1
-2.1 <= x4 <= 2.1
-2.1 <= x5 <= 2.1
-2.1 <= x6 <= 2.1
import cplex
from cplex.exceptions import CplexError
import sys
my_obj = [-28.44, -27.38, -26.44, -25.38, -26.44, -25.38]
my_ub = [2.1, 2.1, 2.1, 2.1, 2.1, 2.1]
my_lb = [-2.1, -2.1, -2.1, -2.1, -2.1, -2.1]
my_rhs = [0,0,0]
my_sense = "EE"
rows = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
cols = [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
vals = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0]
my_prob = cplex.Cplex()
my_prob.objective.set_sense(my_prob.objective.sense.maximize)
my_prob.linear_constraints.add(rhs = my_rhs, senses = my_sense, names = [])
my_prob.variables.add(obj = my_obj, ub = my_ub, lb = my_lb, names = [])
my_prob.linear_constraints.set_coefficients(zip(rows, cols, vals))
my_prob.solve()
【问题讨论】:
-
我的猜测:
my_sense比my_rhs短 -
是的,我在发帖后注意到了这一点。谢谢!!
-
太糟糕了 Cplex 没有给出更好的错误信息。我想看看哪些论点不一致以及为什么。那将完全阻止这个问题。程序员没有足够注意编写信息丰富的错误消息。
-
同意。看起来 CPLEX 只会在调用的任何向量的大小不一致时创建一个非常通用的“不一致参数”。用户必须自己检查向量的长度才能弄清楚...
标签: python jupyter-notebook constraints linear-programming cplex