CPLEX通过API获取模型上下界以及gap值的方法

1、 问题由来

\qquad 最近在做模型时,使用C++调用CPLEX求解时,设置好最大求解时间之后发现最后模型没有求解完成时,没法输出模型的下界解信息,去查询CPLEX 12.9用户手册也没有找到相关获取模型下界的方法,所以只能自己摸索和尝试(那个用户手册做的是真垃圾,好多接口函数查不到… …)

2、 解决方法

\qquad 最终让我试出来一个获取模型上下界GAP值的函数getMIPRelativeGap,这个函数在用户手册里面搜不到你敢信???
\qquad 之后这个方法被封装在所求解模型对象IloCplex类里面,所以只需要通过IloCplex::getMIPRelativeGap()就可以调用它啦。
\qquad 而大家都熟知模型对象IloCplex类有获取上界解的方法IloCplex::getObjValue(),有了上界解和GAP值,便可以方便得到最优下界值:bestLB = bestUB-bestGAP*bestUB

3、问题

\qquad 这样获得到的最优GAP值是准确的,但是求出来的最优下界比求解过程中显示的最优下界要大一点,这个不大清楚是啥问题,有大神直到可以指教【手动抱拳】!

4、设置CPLEX模型求解的Gap容差

\qquad 若在求解CPLEX模型时,不需要将模型求解到最优,可以借助IloCplex::Param::MIP::Tolerances::MIPGap设置模型求解上下界之间的最小gap值([0,1]之间),具体设置的命令如下:

solver.setParam(IloCplex::Param::MIP::Tolerances::MIPGap, episilon);

\qquad 其中,solver表示当前的IloCplex模型,episilon ∈ [ 0 , 1 ] \in [0,1] [0,1]表示上下界gap的容差。当solver求解过程中上下界之间的gap值不超过episilon时,模型停止求解,输出当前找到的最优上界解方案。

THE END

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dragon Fly

多谢老板赏钱[抱拳抱拳抱拳]

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值