我尝试解决其中的大型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
我还测试了其他两个值(如果整数目标为正),并在示例中得以证实。

别人可以重现这种行为吗?这种行为对您有意义吗?

谢谢 :)

最佳答案

实际上,可调用库(C API)中CPXgetmiprelgapdocumentation表示以下内容:


  对于最小化问题,此值由下式计算:
  
  (bestinteger-bestobjective)/(1e-10 + | bestinteger |)
  
  其中bestinteger是CPXXgetobjval/CPXgetobjval返回的值
  而bestobjective是返回值
  CPXXgetbestobjval/CPXgetbestobjval。对于最大化问题,
  该值通过以下方式计算:
  
  (bestobjective-bestinteger)/(1e-10 + | bestinteger |)


因此,看来Java API的文档有问题。 Java API只是在后台调用CPXgetmiprelgap,因此应该相同。感谢您举报。我将确保将其传递给可以解决此问题的人员。

10-06 02:12