我正在研究一个MIP模型。该模型通常求解速度非常快,但是如果我尝试向模型中添加IF-THEN约束,则求解时间将成倍增加,以至于其无法在2000 s内获得可行的解决方案。我也尝试过指标约束,但没有任何运气。是否有IF-THEN约束的替代方案可以更快地解决?还是应该缩小问题范围来解决?还是有任何CPLEX参数在IF-THEN约束下表现更好?任何想法都欢迎
答案 0 :(得分:0)
您可以看一下技术说明
使用指标约束与大M公式之间的区别
https://www.ibm.com/support/pages/node/397209
如果您的模型是关于调度的,那么您可以看看
https://www.slideshare.net/PhilippeLaborie/planningscheduling-with-cp-optimizer
答案 1 :(得分:0)
您是否通过DOcplex或OPL使用Cplex? 您在模型 building 或模型 solve 中遇到性能下降的问题吗?
要调查解决方案中的性能较慢,是否可以尝试尽可能减少问题并生成LP或SAV文件?谢谢。
答案 2 :(得分:0)
DOcplex的if-then构造分配两个内部约束:一个等效约束定义if_ct
状态变量,一个指示符约束将该状态变量链接到then_ct
。一天结束时,会生成两个指标约束。
如果条件包含一个针对0或1测试的布尔变量,则可以将其简化为一个指示符约束(实际上,此简化将在Docplex的下一版本中完成)。例如,这段代码分配了一个指标约束
m.add_indicator_constraint(b, y>=3)
但是这个分配了两个:
m.if_then(b==1, y>=3)
这不是必须的。但是,如果条件约束不是简单的二进制变量测试,则可以使用if-then
构造。
如果使用了大量的if-then构造,这是否可以解释解决性能问题?拥有Model.print_information
打印的数字以查看您的模型实际有多大。