如何在CBC求解器中设置最优性间隙作为停止准则?
设置Cbc求解器的最优性间隙停止准则(JuMP)
嘿,刚好对这个问题很熟悉!你已经知道怎么设置最大运行时间了,那要加最优性间隙作为停止准则其实很简单,Cbc求解器本身就支持相关参数,在JuMP里直接传给CbcSolver就行。
核心参数说明
Cbc提供了两种常见的间隙控制参数:
ratioGap:相对最优性间隙,比如设为0.01就表示当(当前最优上界 - 下界)/|上界| ≤ 1%时,求解器就停止。这是最常用的设置,适合大多数场景。allowableGap:绝对最优性间隙,比如设为0.5,当上下界的差值小于等于0.5时停止,适合目标值规模较小的问题。
旧版JuMP语法(你的当前写法)
直接在CbcSolver里添加参数就行,和Sec参数放在一起:
# 示例:设置70分钟最大运行时间 + 1%相对间隙 m = Model(solver = CbcSolver(Sec=70*60, ratioGap=0.01))
如果需要绝对间隙:
# 示例:设置70分钟最大运行时间 + 0.5的绝对间隙 m = Model(solver = CbcSolver(Sec=70*60, allowableGap=0.5))
新版JuMP语法(如果后续升级版本)
如果你之后升级到JuMP v0.21及以上版本,语法改成了用optimizer_with_attributes,写法会是这样:
using JuMP, Cbc # 同样的参数,只是键名用字符串形式 m = Model(optimizer_with_attributes(Cbc.Optimizer, "seconds" => 70*60, "ratioGap" => 0.01))
这样设置后,求解器会在满足最大运行时间或者达到设定的最优性间隙其中一个条件时停止运行,完美符合你的需求!
内容的提问来源于stack exchange,提问作者bhawesh sah
相关产品推荐
相关产品推荐

