docplex 模块中的相对 MIP 间隙容差

发布于 2025-01-17 21:22:17 字数 724 浏览 0 评论 0原文

我使用 Python 中的 docplex 模块求解多目标 MIP。由于问题相当大,我想设置一个相对的 MIP 间隙容差:parameters.mip.tolerances.mipgap (https://www.ibm.com/docs/en/icos/12.9.0?topic=parameters-relative-mip-gap-tolerance)。

在解决详细信息的文档中(https://ibmdecisionoptimization。 github.io/docplex-doc/mp/docplex.mp.sdetails.html)它说属性 mip_relative_gap “...返回1e+20 对于多目标 MIP 问题。”我可以确认这一点。

现在,我想知道如果我设置此参数(例如parameters.mip.tolerances.mipgap=0.2),CPLEX 会做什么。难道只是解决细节中没有显示正确的差距吗?我得到的解决方案是有间隙的解决方案吗(如果不是,我得到什么解决方案?)?有什么方法可以得到多目标问题中的 MIP 差距吗?

I solve a multiobjective MIP with the docplex module in Python. As the problem is rather large, I would like to set a relative MIP gap tolerance: parameters.mip.tolerances.mipgap (https://www.ibm.com/docs/en/icos/12.9.0?topic=parameters-relative-mip-gap-tolerance).

In the docs for the solve details (https://ibmdecisionoptimization.github.io/docplex-doc/mp/docplex.mp.sdetails.html) it says that the property mip_relative_gap "...returns 1e+20 for multi-objective MIP problems." I can confirm this.

Now, I'm wondering what CPLEX does if I set this parameter anyway, say parameters.mip.tolerances.mipgap=0.2. Is it just that the correct gap is not shown in the solve details? Is the solution I get the one with the gap (if not, what solution do I get?)? Is there any way to get the MIP gap in a multiobjetive problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南街女流氓 2025-01-24 21:22:17

您可以在多目标中设置每个目标的MIPGAP。

from docplex.mp.model import Model

mdl = Model(name='buses')

nbbus50 = mdl.integer_var(name='nbBus50')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')

cost = mdl.continuous_var(name='cost')
co2emission = mdl.continuous_var(name='co2emission')

mdl.add_constraint(nbbus50*50+nbbus40*40 + nbbus30*30 >= 200, 'kids')
mdl.add_constraint(co2emission==nbbus50+nbbus40*1.1+nbbus30*1.2)
mdl.add_constraint(cost==nbbus40*500 + nbbus30*400+nbbus50*625)
                
sense="min"
exprs=[cost,co2emission]
priorities=[1,2]
weights=[1,1]
timelimits=[5, 10]

mdl.set_multi_objective(sense, exprs, priorities, weights, abstols=None,
                        reltols=None, names=None)

mdl.solve(lex_mipgaps = [0.001, 0.05], log_output=True,lex_timelimits = timelimits)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

print("The minimum cost is ",cost.solution_value);
print("CO2 emission is ",co2emission.solution_value);

href =

lex_mipgaps = [0.001, 0.05]

you can set mipgap per objective in the multiobjective.

In Easy optimization with python in the multi objective example

from docplex.mp.model import Model

mdl = Model(name='buses')

nbbus50 = mdl.integer_var(name='nbBus50')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')

cost = mdl.continuous_var(name='cost')
co2emission = mdl.continuous_var(name='co2emission')

mdl.add_constraint(nbbus50*50+nbbus40*40 + nbbus30*30 >= 200, 'kids')
mdl.add_constraint(co2emission==nbbus50+nbbus40*1.1+nbbus30*1.2)
mdl.add_constraint(cost==nbbus40*500 + nbbus30*400+nbbus50*625)
                
sense="min"
exprs=[cost,co2emission]
priorities=[1,2]
weights=[1,1]
timelimits=[5, 10]

mdl.set_multi_objective(sense, exprs, priorities, weights, abstols=None,
                        reltols=None, names=None)

mdl.solve(lex_mipgaps = [0.001, 0.05], log_output=True,lex_timelimits = timelimits)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

print("The minimum cost is ",cost.solution_value);
print("CO2 emission is ",co2emission.solution_value);

you will notice

lex_mipgaps = [0.001, 0.05]

to set several mipgaps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文