【问题标题】:How to use CPLEX Multi-Objective (ObjectiveSense) parameters如何使用 CPLEX Multi-Objective (ObjectiveSense) 参数
【发布时间】:2021-04-05 17:58:26
【问题描述】:

我正在研究纯 LP 问题并使用 Multi-Objective 来解决它。当我使用带权重的目标时:

solver1.minimize(  A* 1000
                                  + B* 10000
                                  + C* 100
                                  + D* 1
                          )

Solver 能够成功得到最优结果

但是当我使用 ObjectiveSense 包时:

solver1.set_multi_objective(ObjectiveSense.Minimize, [A, B, C,D]
                   , priorities=[1, 2, 0, 1], weights=[1000,1,1,1])

求解器在求解第一个层次结构后变得不可行,并给出:“非最佳状态:不可行CPLEX 错误 1300:无法求解多目标子问题。”

我正在尝试弄清楚如何使用参数 reltol 和 abstol 来获得可行的解决方案。有什么想法或例子吗?

还试图理解为什么尽管我们通过加权目标有解决方案,但多目标却变得不可行?任何关于相同的输入都会有所帮助。

谢谢!

【问题讨论】:

    标签: linear-programming cplex docplex


    【解决方案1】:

    这个页面 https://www.ibm.com/docs/en/icos/12.10.0?topic=optimization-solving-multiple-objective-problems 详细解释了如何使用公差来解决多目标问题。 总而言之,LP 和 MIP 使用了两种不同的算法。 LP 算法使用 LP 基数,绝对容差被解释为降低成本的限制,而不使用相对成本。 MIP 算法使用迭代求解方法,其公差被解释为每个中间子目标的公差。

    当模型具有困难的数值属性时,我们已经看到 LP 算法可能会失败的情况。要检查这种情况,请在您的模型上运行以下行: 系数范围不超过1e+6。

    print(mdl.cplex_matrix_stats)
    

    作为一种解决方法,您可以尝试 Docplex 中的 Model.solve_with_goals 方法,该方法针对任何类型的模型运行迭代多目标算法。

    【讨论】:

    • 感谢解释,将实施并检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2020-02-06
    相关资源
    最近更新 更多