CPLEX + Java中MAXIMIZATION中的完整性差距|错误?

时间:2018-02-14 13:49:06

标签: java cplex

我尝试解决其中的大型MIP。如果它没有得到最优解,它将返回完整性间隙(即最佳整数解与线性松弛的最佳解之间的差异)。 使用Java + CPLEX接口的getMIPRelativeGap,我有时会得到1.0E11-1.0E13范围内的值,这是没有意义的,因为完整性差距应该是介于0和1之间的百分比。我跟踪了这​​些情况并且发现我得到了那些结果,如果最佳整数解的值为0(我的内部问题是一个有利可图的旅游问题,因此,如果最佳路线没有访问任何顶点)。完整性差距应为(bestobjective-bestinteger)/bestobjectivehttps://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.0/ilog.odms.cplex.help/refdotnetcplex/html/M_ILOG_CPLEX_Cplex_MIPInfoCallback_GetMIPRelativeGap.htm),但似乎为(bestobjective-bestinteger)/bestinteger。 我还测试了几个其他值(如果整数目标为正),并且能够在示例中确认这一点。

其他人可以重现此行为吗?这种行为对你有意义吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

确实,可调用库(C API)中CPXgetmiprelgap的{​​{3}}表示如下:

  

对于最小化问题,此值由

计算      

(bestinteger - bestobjective)/(1e-10 + | bestinteger |)

     

其中bestinteger是CPXXgetobjval/CPXgetobjval返回的值   和bestobjective是返回的值   CPXXgetbestobjval/CPXgetbestobjval。对于最大化问题,   该值由以下公式计算:

     

(bestobjective - bestinteger)/(1e-10 + | bestinteger |)

因此,看起来Java API的文档是错误的。 Java API只是调用CPXgetmiprelgap,所以它应该是相同的。感谢您报告此事。我确保将这些内容传递给可以修复它的人。