我正在使用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是二进制决策变量。我真的不确定为什么会发生这种情况,对此我将不胜感激!

最佳答案

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

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

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

07-26 00:45