1

我已经在 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 个。

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

4

1 回答 1

0

为了使用 CPLEX 获得大量可行解,您应该使用 CPLEX.populate() 而不是 CPLEX.solve()

于 2020-08-18T06:58:10.940 回答