在整数编程中使用min / max运算符

时间:2013-12-29 23:02:23

标签: mathematical-optimization linear-programming maximize

我正在尝试使用整数编程优化目标函数,我必须在我的函数中使用Max运算符,我想知道有没有办法处理它?

实际上我的问题与Using min/max within an Integer Linear Program类似,但在某些方面有所不同:

  • 所有变量都是二进制的。
  • 请注意,x4x5分为两个部分。
  • 一种可能的解决方案是使用辅助变量,例如similar question的答案,但在我的示例中使用此解决方案时我很困惑。

实施例

最小化 (c1 * x1) + (c2 * x2) + (c3 * x3) + Max(c4 * x4, c5 * x5) + (c6 * x4) + (c7 * x5)

的影响 一些平等和不平等约束

1 个答案:

答案 0 :(得分:2)

使用您链接的问题中的方法。表达式

Max(c4 * x4, c5 * x5)
如果添加以下附加约束,

可以替换为变量x6

x6 >= c4 * x4
x6 >= c5 * x5

所以你的总集合变为:

Minimize (c1 * x1) + (c2 * x2) + (c3 * x3) + x6 + (c6 * x4) + (c7 * x5)

受制于:

some equality and inequality constraints

和新要求:

x6 >= c4 * x4
x6 >= c5 * x5

这是有效的,因为Max(c4 * x4, c5 * x5)将采用值c4 * x4c5 * x5。引入的变量x6将始终大于或等于这两个表达式,因此将始终大于或等于总max-expression。正确最小化后,x6将以max-expression的值触底。所以当最小化时,这两种形式是等价的。