如何在CPLEX中为UBQP获取多个解决方案

时间:2016-10-03 14:52:13

标签: c optimization cplex quadratic-programming

我已经在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个解决方案。

有没有办法在这种问题中获得多种解决方案?

1 个答案:

答案 0 :(得分:0)

为了使用CPLEX获得大量可行的解决方案,应使用CPLEX.populate()代替CPLEX.solve()