0

我需要最小化字典的最大值。如何表达目标函数?

示例输入:A = {1: 1.0, 2: 2.0, 3: 2.0, 4: 1.0, 5: 7.0, 6: 1.0, 7: 4.0}

到目前为止,我已经尝试过:

  • 计数 == 最大值(A.values())
  • 计数 == max(A.items(), key=operator.itemgetter(1))[1])

模型.最小化(计数)

我得到的错误是:DOcplexException: Unsupported relationship operator: x282 > x281, only <=, ==, >= are allowed

感谢任何答案!

4

1 回答 1

0

您得到的错误意味着 Pythonmax无法处理 DOcplex 变量对象,这是正常的:变量仅在求解时取值,因此不可能进行 max 的静态计算。

这就是说,如果您关心的是最小化一组变量的最大值,比如 x_i,请使用以下技巧:

  • 添加一个额外的变量 z
  • 为每个变量 x_i 添加 (z >= x_i) 的约束
  • 最小化 z

Model.solve()z 的末尾将被最小化为所有 x_i.s 的最大值

请注意,DOcplex 还具有Model.max计算一组变量的确切最大值的方法,但是当您最小化时,开销(在额外的变量和约束中)优于上述技巧。

于 2021-06-25T13:44:50.123 回答