【问题标题】:Docplex objective funtion: Minimize a maximum valueDocplex 目标函数:最小化最大值
【发布时间】:2021-09-08 18:27:13
【问题描述】:

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

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

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

  • Count == max(A.values())
  • Count == max(A.items(), key=operator.itemgetter(1))[1])

model.minimize(计数)

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

感谢您的任何回答!

【问题讨论】:

  • 我需要最小化字典的最大值你能详细说明一下吗?
  • A 定义为for i in I: model.add_constraint(model.sum((a[i,k]*k) for k in K) == A[i])i 是分配给某个组k 的部分。 a[i,k] 包含是否将 i 分配给 k。目标是尽量减少组的数量。
  • 对于任何优化问题,您能否定义什么是预期输入、要采取什么决策(即变量)、约束是什么以及如何衡量解决方案的质量(换句话说,你最大化/最小化什么)Thks。

标签: python mathematical-optimization docplex objective-function


【解决方案1】:

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

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

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

Model.solve()结束时z会被最小化为所有x_i.s的最大值

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多