我找不到在CPLEX Java API中有效使用MIP启动的方法。

我有一个线性问题,我需要通过仅更改一个约束或更改目标来解决许多问题,因此我认为从解决方案开始(从MIP开始)可能是加快计算速度的好方法。

因此,为了做到这一点,在我第一次解决问题后,我将所有变量保存在IloNumVar数组中,并使用cplex.addMIPStart将其加倍传递给其他cplex对象。

问题是它并没有加快任何速度,使其变慢,并显示以下消息:

警告:从1个MIP开始找不到解决方案。

所以也许我不应该让MIP开始所有变量,但是我怎么知道要给它什么变量呢?

我还尝试更改了MIP的启动工作,但似乎没有任何区别...

为什么不使计算更快?有没有更好的方法来解决只有几个差异的许多问题?

最佳答案

该消息通常意味着您或者没有在模型中为足够的决策变量指定值,或者为cplex提供的值不可行。您可以通过对变量使用IloNumVar.setBounds来检查可行性,然后尝试求解模型。如果发现这不可行,则可以编写iis文件。
   CPLEX会尝试,但是无法利用您的mipstart,因此运行速度较慢。良好的MIP启动可以极大地缩短解决方案时间,尤其是在cplex很难找到第一个可行的解决方案并且您的MIP启动具有接近最佳值的目标函数值的情况下,但在很多情况下,它并没有任何作用。区别。热启动MIP比热启动LP难得多。

07-26 00:46