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 方法来计算一组变量的确切最大值,但是当您进行最小化时,开销(在额外变量和约束中)优于上述技巧。

>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...