3

我正在使用 docplex 构建一个混合整数程序,然后通过 cplex 解决该程序。但是,在尝试解决 MIP 时,我收到以下错误:

CPLEX> read plan.lp
CPLEX Error  1434: Line 184224: Couldn't convert '1<->' to a number.
No file read.

查看 lp 文件,可以看出以下行是问题所在:

1 <->
M13790
+ M13791
>= 1

创建约束的行是:

ilp.add_if_then(
    ilp.sum([x.select_var for x in self.allX]) >= 1,
    self.select_var == 1,
)

其中 ilp 是 docplex.mp.model 对象,每个 select_var 是一个二元决策变量。我真的不确定为什么会发生这种情况,如果有任何帮助,我将不胜感激!

4

1 回答 1

1

逻辑约束(例如 add_if_then)需要 CPLEX 12.8 运行时才能求解。如果在 PYTHONPATH 中使用旧版本的 CPLEX 运行 DOcplex,则应该引发错误。

如果在 PYTHONPATH 中找不到 CPLEX,则 DOcplex 无法猜测您将使用哪个版本(您可能希望向 DOcplexcloud 提交 Python 作业,在这种情况下,您的模型将使用 CPLEX 12.8 运行时求解)

生成的 LP 文件包含旧版本的 CPLEX 可能无法读取的逻辑等价语法 (<->)。同样,解决此类 LP 的最佳方法是通过升级本地库或转到云来使用 CPLEX 12.8。

于 2018-03-01T10:14:19.027 回答