微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docplex 目标函数:最小化一个最大值

如何解决Docplex 目标函数:最小化一个最大值

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

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

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

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

model.minimize(Count)

我得到的错误是:DOcplexException:不支持的关系运算符:x282 > x281,只允许 =

感谢您的回答!!

解决方法

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

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

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

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

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

>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。