5.2.9. MILP的解池¶
MindOpt 在求解混合整数规划问题的过程中,可能会找到多个可行解。MindOpt 为用户提供解池(Solution Pool)功能,帮助用户了解求解过程中实际找到的解的个数,以及帮助用户获取这些解。
5.2.9.1. 解个数的设置与获取¶
用户可以通过设置参数 MIP/SolutionPoolSize
的值,例如设为n,促使 MindOpt 在求解过程中尽力寻找n个可行解。
在问题求解完成后,用户可以通过属性 SolCount
了解 MindOpt 实际找到的可行解的个数。
5.2.9.2. 获取第k个解¶
解池中的解是从好到坏排列的。在问题求解完成后,用户可以这样获得第k个次优解:首先,设置参数 SolutionNumber
的值为k,然后,通过属性 Xn
获得第k个解。
此外,用户在设置 SolutionNumber
时应注意不要超过 SolCount
的值。以Python为例:
from mindoptpy import * model = read('problem.mps') model.setParam(MDO.Param.MIP_SolutionPoolSize, 10) model.optimize() firstVar = model.getVars()[0] if (model.status == MDO.Status.OPTIMAL): print("Best solution for first variable: {}".format(firstVar.X)) if (model.status in (MDO.Status.OPTIMAL, MDO.Status.SUB_OPTIMAL)): print("Found {} suboptimal solution(s)".format(model.SolCount)) for i in range(model.SolCount): model.setParam(MDO.Param.SolutionNumber, i) print(" The kth (k = {}) suboptimal solution for first variable is {}".format(i, firstVar.Xn))