如何在DoCplex中获取相对及绝对最优性间隙(Optimality Gap)
DoCplex 获取最优性间隙方法
DoCplex 内置了直接读取相对、绝对最优性间隙的属性,无需手动计算,所有求解相关的统计值都存储在求解详情对象中,具体用法如下:
核心属性说明
你可以从求解完成后的模型对象,或者调用solve()返回的解对象中读取SolveDetails类下的两个属性:
- 相对最优性间隙:
mip_relative_gap,返回值为小数格式,例如返回0.005对应相对间隙为0.5% - 绝对最优性间隙:
mip_absolute_gap,返回值为当前最优解上下界的差值,即绝对间隙值
代码示例
from docplex.mp.model import Model # 构建示例MIP模型 mdl = Model(name="mip_demo") x = mdl.integer_var(lb=0, ub=15, name="x") y = mdl.integer_var(lb=0, ub=10, name="y") mdl.maximize(2*x + 7*y) mdl.add_constraint(3*x + 5*y <= 45) # 执行求解 sol = mdl.solve() # 方式1:从模型对象读取间隙 relative_gap = mdl.solve_details.mip_relative_gap absolute_gap = mdl.solve_details.mip_absolute_gap # 方式2:从返回的解对象读取间隙,结果和方式1完全一致 relative_gap2 = sol.solve_details.mip_relative_gap absolute_gap2 = sol.solve_details.mip_absolute_gap print(f"相对最优性间隙:{relative_gap:.2%}") print(f"绝对最优性间隙:{absolute_gap}")
注意事项
- 上述两个属性仅对MIP(混合整数规划、纯整数规划)类模型有效,纯连续线性规划不存在最优性间隙的概念,调用后会返回0或无意义数值
- 若求解器已经证明得到全局最优解,两个属性的返回值均为0
- 若你求解前设置了
mipgap停止阈值,求解完成后得到的间隙值一定小于等于你设置的阈值
内容的提问来源于stack exchange,提问作者Nari90
相关产品推荐
相关产品推荐

