由docplex.mp.model.add_if_then添加的约束导致CPlex读取错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由docplex.mp.model.add_if_then添加的约束导致CPlex读取错误相关的知识,希望对你有一定的参考价值。

我正在使用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无法猜测您将使用哪个版本(您可能希望向DOcplexcloud提交Python作业,在这种情况下,您的模型将通过CPLEX 12.8运行时解决)

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

以上是关于由docplex.mp.model.add_if_then添加的约束导致CPlex读取错误的主要内容,如果未能解决你的问题,请参考以下文章

由 DOM 属性 _ngcontent-* 与 _nghost-* 引起的 Angular2 样式问题

为啥所有标签_都是-1?由 DBSCAN 在 Python 中生成

Git:由多个子项目组成的单个项目的最佳方法?

如何修复由 Pycharm 中的 Tensorflow 引起的 cudart64_110.dll 错误?

HTML文件必须由特定的程序进行编译和执行才能显示,这种编译器就是________。

由Python通过__new__实现单例模式,所想到的__new__和__init__方法的区别