max函数的线性化方法

线性化步骤

参考知乎回答

最大值约束式如下(假设 x , y x,y x,y 中的 x x x 为较大值):

z = max ⁡ { x , y } z = \max \{ x,y\} z=max{x,y}

该约束可等价为以下两个约束:
z ≥ max ⁡ { x , y } (1) z \ge \max \{ x,y\} \tag {1} zmax{x,y}(1)

z ≤ max ⁡ { x , y } (2) z \le \max \{ x,y\} \tag {2} zmax{x,y}(2)

其中约束 ( 1 ) (1) (1)显然可用如下约束式等价:

z ≥ x z \ge x zx z ≥ y z \ge y zy

约束 ( 2 ) (2) (2)可用如下约束式等价:

z ≤ x + M ( 1 − u 1 ) (3) z \le x + M(1 - {u_1}) \tag {3} zx+M(1u1)(3) z ≤ y + M ( 1 − u 2 ) (4) z \le y + M(1 - {u_2}) \tag {4} zy+M(1u2)(4) u 1 + u 2 ≥ 1 (5) {u_1} + {u_2} \ge 1\tag {5} u1+u21(5) u 1 , u 2 ∈ { 0 , 1 } (6) {u_1},{u_2} \in \{ 0,1\}\tag {6} u1,u2{0,1}(6)

其中 M M M为较大常数。

解释如下:

( 3 ) (3) (3)、式 ( 4 ) (4) (4) u = 1 u=1 u=1时分别等价为 z ≤ x z \le x zx z ≤ y z \le y zy,在 u = 0 u=0 u=0时被松弛。

因此针对 u u u的不同取值,式 ( 3 ) (3) (3)、式 ( 4 ) (4) (4)等价为4种可能的情形:

  1. z ≤ x z \le x zx z ≤ y z \le y zy 同时成立,即 z ≤ min ⁡ { x , y } z \le \min \{ x,y\} zmin{x,y} —— u 1 = 1 , u 2 = 1 {u_1}=1,{u_2}=1 u1=1,u2=1
  2. z ≤ x z \le x zx,即 z ≤ max ⁡ { x , y } z \le \max \{ x,y\} zmax{x,y} —— u 1 = 1 , u 2 = 0 {u_1}=1,{u_2}=0 u1=1,u2=0
  3. z ≤ y z \le y zy —— u 1 = 0 , u 2 = 1 {u_1}=0,{u_2}=1 u1=0,u2=1
  4. 无约束 —— u 1 = 0 , u 2 = 0 {u_1}=0,{u_2}=0 u1=0,u2=0

由于已有约束 ( 1 ) (1) (1)的限制,情形1、2、3中只有2可能成立(注意前面已经假设 x x x为较大值),1、3均与约束 ( 1 ) (1) (1)矛盾。

同时注意到情形4会导致我们得不到 z = max ⁡ { x , y } z = \max \{ x,y\} z=max{x,y}的整体约束效果,而且该种情形和约束 ( 1 ) (1) (1)不矛盾,也就意味着无法通过约束 ( 1 ) (1) (1)的限制作用来消除,因此我们需要进一步添加约束避免情形4的出现。

进一步添加约束 ( 5 ) (5) (5) ( 6 ) (6) (6),保证 u 1 , u 2 {u_1},{u_2} u1,u2必须至少有一个为 1 1 1,即不可能出现情形4。

综上,最大值约束可通过如下线性约束等价:
z ≥ x z \ge x zx z ≥ y z \ge y zy z ≤ x + M ( 1 − u 1 ) z \le x + M(1 - {u_1}) zx+M(1u1) z ≤ y + M ( 1 − u 2 ) z \le y + M(1 - {u_2}) zy+M(1u2) u 1 + u 2 ≥ 1 {u_1} + {u_2} \ge 1 u1+u21 u 1 , u 2 ∈ { 0 , 1 } {u_1},{u_2} \in \{ 0,1\} u1,u2{0,1}

其中 M M M为较大常数。

总结

m a x max max 函数体现的是一种选择性,如果a大于b,就选a;反之选b。这类选择性一般都可以通过大M法的思路(0-1变量配合大M)加以解决。没有特别的理论深度,可以称之为小技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值