1

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

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

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

问题是它并没有加快任何速度,而是让它变慢并给我这个消息:

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

所以也许我不应该给 MIP 启动所有变量,但我怎么知道要给它什么变量?

我也试图改变 MIP 启动努力,但它似乎没有任何区别......

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

4

1 回答 1

2

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

于 2013-03-19T00:17:18.573 回答