如何使用 CPLEX Multi-Objective (ObjectiveSense) 参数
How to use CPLEX Multi-Objective (ObjectiveSense) parameters
我正在处理纯 LP 问题并使用 Multi-Objective 来解决它。当我使用 objective 和权重时:
solver1.minimize( A* 1000
+ B* 10000
+ C* 100
+ D* 1
)
求解器能够成功得到最优结果
但是当我使用 ObjectiveSense 包时 objective:
solver1.set_multi_objective(ObjectiveSense.Minimize, [A, B, C,D]
, priorities=[1, 2, 0, 1], weights=[1000,1,1,1])
求解器在第一层次求解后变得不可行并给出:“非最佳状态:不可行的 CPLEX 错误 1300:无法求解多 objective 子问题。”
我想弄清楚如何使用参数 reltol 和 abstol 来获得可行的解决方案。有什么想法或例子吗?
虽然我们有加权 objective 的解决方案,但也试图理解为什么 Multi-Objective 变得不可行?任何关于相同的输入都会有所帮助。
谢谢!
本页
https://www.ibm.com/docs/en/icos/12.10.0?topic=optimization-solving-multiple-objective-problems
详细解释了如何使用公差来解决多 objective 问题。
总而言之,LP 和 MIP 使用了两种不同的算法。
LP 算法使用 LP 基础,绝对公差被解释为降低成本的限制,并且不使用相对成本。
MIP 算法使用迭代求解方法,其中公差被解释为每个中间子 objective.
的公差
当模型具有困难的数值属性时,我们已经看到 LP 算法可能失败的情况。要检查这种情况,运行 在您的模型上添加以下行:
系数的范围不要超过1e+6.
print(mdl.cplex_matrix_stats)
作为解决方法,您可以尝试 Docplex 中的 Model.solve_with_goals
方法,该方法 运行 是适用于任何类型模型的迭代多 objective 算法。
我正在处理纯 LP 问题并使用 Multi-Objective 来解决它。当我使用 objective 和权重时:
solver1.minimize( A* 1000
+ B* 10000
+ C* 100
+ D* 1
)
求解器能够成功得到最优结果
但是当我使用 ObjectiveSense 包时 objective:
solver1.set_multi_objective(ObjectiveSense.Minimize, [A, B, C,D]
, priorities=[1, 2, 0, 1], weights=[1000,1,1,1])
求解器在第一层次求解后变得不可行并给出:“非最佳状态:不可行的 CPLEX 错误 1300:无法求解多 objective 子问题。”
我想弄清楚如何使用参数 reltol 和 abstol 来获得可行的解决方案。有什么想法或例子吗?
虽然我们有加权 objective 的解决方案,但也试图理解为什么 Multi-Objective 变得不可行?任何关于相同的输入都会有所帮助。
谢谢!
本页 https://www.ibm.com/docs/en/icos/12.10.0?topic=optimization-solving-multiple-objective-problems 详细解释了如何使用公差来解决多 objective 问题。 总而言之,LP 和 MIP 使用了两种不同的算法。 LP 算法使用 LP 基础,绝对公差被解释为降低成本的限制,并且不使用相对成本。 MIP 算法使用迭代求解方法,其中公差被解释为每个中间子 objective.
的公差当模型具有困难的数值属性时,我们已经看到 LP 算法可能失败的情况。要检查这种情况,运行 在您的模型上添加以下行: 系数的范围不要超过1e+6.
print(mdl.cplex_matrix_stats)
作为解决方法,您可以尝试 Docplex 中的 Model.solve_with_goals
方法,该方法 运行 是适用于任何类型模型的迭代多 objective 算法。