我已经在C语言中的可调用库中的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个解决方案。
有没有办法在这种问题中获得多种解决方案?
答案 0 :(得分:0)
为了使用CPLEX获得大量可行的解决方案,应使用CPLEX.populate()代替CPLEX.solve()