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))