我已经在 C 中的 Callable Library 中的 CPLEX(v 12.6.2)中实现了一个 UBQP(这是一个没有约束和二进制变量的二次问题),我有兴趣获得多个解决方案(不仅是最佳解决方案,还有其他解决方案)可行的)。
我采用 CPLEX 原始 populate.cpp 代码并获取其例程以获得解决方案池,例如 CPXpopulate(env,lp)。
问题是我的解决方案池的大小始终为 1,它只包含最佳值。相反,如果我给 populate.cpp 一个 LP 问题(即最小化线性问题),它可以正常工作。
我尝试了常用的命令:
status = CPXsetdblparam (env, CPXPARAM_MIP_Pool_RelGap, 0.5);
status = CPXsetintparam (env, CPXPARAM_MIP_Pool_Capacity, 25);
status = CPXsetintparam (env, CPXPARAM_MIP_Pool_Replace, 1);
status = CPXsetdblparam (env,CPXPARAM_Simplex_Tolerances_Feasibility,0.01);
status = CPXsetdblparam (env, CPXPARAM_MIP_Tolerances_Integrality, 0.01);
status = CPXsetintparam (env, CPXPARAM_MIP_Pool_Intensity, N);
这应该会强制 CPLEX 生成更多解决方案,但事实并非如此。
如果我在 CPXPARAM_MIP_Pool_Intensity 中设置 N = 4(即最大值),则无法优化,但如果设置 N = 0,...,3 我得到的解决方案不会超过 1 个。
有没有办法在这类问题中获得多种解决方案?