首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解DoCPLEX多目标

理解DoCPLEX多目标
EN

Stack Overflow用户
提问于 2020-10-06 21:01:02
回答 2查看 465关注 0票数 0

我正在处理约300万个约束的纯LP问题,目前我使用的是不同权重的目标函数。但是为了提高运行时间,我希望探索DoCPLEX多目标导入"ObjectiveSense“。在实现之前,我想了解这个解决方案是如何工作的。

例如:

我的目标函数是使用多目标的最大化(-1000_B -100_C +10_A -D -0.1_E),它是: ObjectiveSense.Maximize、-B、A、-C、-D、-E、priorities=5、4、3、2、1)。

权重的问题之一是,如果10_A获得B_1000 (在少数情况下这是可能的),则A被优先于B

多目标能阻止这种情况吗?它会严格区分B的优先顺序吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-07 06:47:40

https://developer.ibm.com/docloud/blog/2019/03/12/multiobjective-optimization-for-lp-and-mip-in-cplex/

你可以读

优先级:整数,默认为0。定义处理KPI的顺序。如果几个子目标具有相同的优先级,它们就混合在一起。

有了优先级,您就可以得到分级的KPI,因此,即使具有巨大的价值,KPI也不会比不太重要的KPI更重要。

让我分享一下动物园示例中的一个小例子:

代码语言:javascript
运行
复制
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]
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)

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);

这给

代码语言:javascript
运行
复制
nbBus50  =  4.0
nbBus40  =  0
nbBus30  =  0
The minimum cost is  2500.0
CO2 emission is  4.0
票数 0
EN

Stack Overflow用户

发布于 2021-08-20 01:10:55

在亚历克斯的评论中,多目标有用的情况是,当目标函数中由于优先级而产生的系数是不同的数量级。如果系数至少是1e6不同,这可能导致一些答案是舍入误差的一部分,你可能有数值不稳定性。在你的情况下,你在1e4不同,所以除非在配方中有另一个问题,你不太可能看到业绩的提高。如果这是一个LP,我建议您首先将"lpmethod“参数更改为4,因为您有这么大的模型。

你能对事情的进展发表评论吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64233725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档