CPLEX求解MIP时解池多最优解导出X矩阵重复问题求助
问题原因与解决方法
核心问题
你输出的所有X矩阵相同,是因为调用setPoolSolution()加载解池中的指定解后,没有执行变量更新操作,模型的决策变量一直保留的是首次求解得到的解的取值。
修复步骤
- 在main块的循环中,加载解池解之后添加
updateSolution()调用,将解的取值同步到模型变量中 - 可选:补充解池容量参数,避免解数量超过默认存储上限被丢弃
修改后的main块代码
main{ cplex.solnpoolintensity=4; cplex.solnpoolagap=0; cplex.solnpoolcapacity = 20; // 可按实际需要的最大解数量调整,示例设置为最多存储20个最优解 thisOplModel.generate(); // 无需单独调用solve(),populate()会自动完成求解和解池填充 if (cplex.populate()) { var nsolns = cplex.solnPoolNsolns; writeln("解的总数量:", nsolns); writeln("平均目标值:", cplex.getSolnPoolMeanObjValue()); writeln(); for (var s=0; s<nsolns; s++) { thisOplModel.setPoolSolution(s); thisOplModel.updateSolution(); // 新增该行,将解池中的解同步到模型变量 var cd = new IloOplOutputFile("resAB" +s+".txt"); cd.writeln(thisOplModel.X); cd.close(); thisOplModel.postProcess(); } } }
额外说明
你代码中单独的execute块是在每次求解完成后自动执行的,只会输出首次得到的解,如果你不需要这个输出可以直接删除该段代码,避免生成多余的文件。
内容的提问来源于stack exchange,提问作者SaraH
相关产品推荐
相关产品推荐

