我正在使用IBM-Ilog-Cplex解决NP-Hard问题,我在运行一小时后中断了解决方案流程,以评估Cplex与最佳解决方案的接近程度(即评估解决方案差距) 。作为我的分析的一部分,我需要获取引擎日志中报告的“Gap”的最后一个值并将其保存到变量中,以便我可以使用这样的变量将间隙值导出为excel作为我的结果的一部分。 / p>
我搜索了手册和一些资源,除了手动剪切和粘贴间隙值之外,我还没有找到一种方法。如果我要求的是不可能的,有没有办法从引擎日志中提取“最佳整数”和“最佳界限”的最后值,以便我可以计算“差距”?
提前感谢您的帮助。
答案 0 :(得分:1)
答案取决于您如何调用CPLEX。 您可以查询最佳边界,最佳目标值和相对间隙,例如在可调用的库接口中,我这样做:
optstatus = CPXmipopt (env, lp);
mipstatus = CPXgetstat (env, lp);
if (!optstatus && !DDSIP_Error(optstatus) && !DDSIP_Infeasible (mipstatus))
{
if (CPXgetmiprelgap(env, lp, &mipgap))
{
fprintf (stderr, "ERROR: Query of CPLEX mip gap from 1st optimization failed (LowerBound) \n");
fprintf (stderr, " CPXgetstat returned: %d\n",mipstatus);
mipgap = 1.e+30;
}
if (param->cpxscr || param->outlev > 10)
{
j = CPXgetnodecnt (env,lp);
printf (" LB: after 1st optimization: mipgap %% %-12lg %5d nodes (%6.2fs)\n",mipgap*100.0,j,time_lap-time_start);
if (param->outlev)
fprintf (moreoutfile," LB: after 1st optimization: mipgap %% %-12lg %5d nodes (%6.2fs)\n",mipgap*100.0,j,time_lap-time_start);
}
在C ++接口中有类似的功能。
答案 1 :(得分:0)
看起来你正在解决IP或MIP问题。 CPLEX允许您设置几个参数:
这些将显示在生成的节点日志文件中。这个help page非常有用。希望能帮助你前进。