我正在为MIP解决非常大的实例,并希望结合两个终止标准。我知道如何分别和同时使用timeLimit和相对MIP差距,即
cplex.setParam(IloCplex.Param.MIP.Tolerances.MIPGap, 0.1);
cplex.setParam(IloCplex.Param.TimeLimit, 3600);
对于几种情况,我想将两个条件结合起来,两个有以下两个阶段:
阶段1:运行时间长达1小时(无间隙限制=>达到最佳状态)
如果在前1小时未找到最佳解决方案:
第2阶段:运行时间长达5小时(最多4小时),间隔限制= 0.1,即达到任何限制都会首先终止搜索
我可以想到两种实现方法:
在模型中设置某些参数以在建议的两阶段方法中运行它
使用默认值(即没有时间或间隔限制)开始优化,如果运行时间在1h之后仍在运行,请监控运行时间=>添加时间和间隔限制作为终止标准。
不幸的是,我不知道如何实现这些方法。
建议,其他想法?先感谢您。
最佳答案
默认情况下,advanced start switch参数设置为1。因此,对于阶段1,您可以简单地在初始时间限制内运行模型,并在完成后检查solution status。然后,如有必要,更改参数并在阶段2中再次调用solve()
(即CPLEX将继续使用部分浏览的MIP树)。