问题描述
我想计算MIP的相对最佳间隙问题,我也想在某个运行时间中止运行。此方法:
F(1)
abs(mymodel.objest - mymodel.objval)/max(abs(mymodel.objest),abs(mymodel.objval))
与GAMS在日志中计算的差距不一致。 GAMS使用“最佳整数”查找差距而不是当前目标值。哪一个是正确的? 以及如何将当前的“最佳整数”保存到参数(如.objval)中。
最后在一个弯管算法中计算相对最优间隙是这样吗?
rgap = (upperBound - lowerBound)/(1 + abs(upperBound));
GAMS使用“ MIP解决方案”计算的结果
MIP Solution: 3334501534.000555 (1625 iterations,0 nodes)
Final Solve: 56330158.829040 (2561 iterations)
Best possible: 48915652.476336
Absolute gap: 3285585881.524219
Relative gap: 0.985330
F(1)使用mymodel.objval计算间隙(mymodel.objval返回“最终求解”),因此计算间隙为%13,mymodel.objval值为5.633016E + 7(GAMS计算间隙为%98)。所以我需要将“ MIP解决方案”保存为参数,以将其导出到Excel文件。
解决方法
有不同的公式来计算相对最佳差距。这取决于您使用的求解器,是应用哪一个。有关此信息,请参见GAMS选项optCR的说明。您使用的求解器的求解器手册可能会提供有关实际应用的公式的更多详细信息。
问题更新后的编辑:
在您编写mymodel.objval
时返回Final Solve
值。如果您想查看MIP Solution
值(如Cplex链接在内部执行),则可以停用最终求解。但是,如果Final Solve
和MIP Solution
与您的示例有很大不同,则通常表明存在某些问题(通常,它们(几乎)相同)。通常,这表明模型的伸缩性很差。也许可以通过收紧Cplex公差(请参见Cplex选项epopt
,eprhs
,epint
)并激活主动缩放(Cplex选项scaind 2
)来改善情况。激活mipkappastats
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXmipkappastats)和quality
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXquality)可以为您提供更多信息。 DataCheck=2
(https://www.gams.com/latest/docs/S_CPLEX.html#CPLEXdatacheck)可能会出现一些问题。