将 0-1 变量的乘积, 0-1 变量与连续变量的乘积转化成线性

偶尔在 Gurobi 的讲座中听到了这个技巧,假如两个 0-1 变量 x i x_i xi, x j x_j xj,它们的乘积

z i j = x i x j z_{ij}=x_ix_j zij=xixj

这是一个非线性表达式,但可以通过下面的约束条件线性化:
z i j ≤ x i z i j ≤ x j z i j ≥ x i + x j − 1 z i , j , x i , x j ∈ { 0 , 1 } \begin{aligned} &z_{ij}\leq x_i\\ &z_{ij}\leq x_j\\ &z_{ij}\geq x_i+x_j-1\\ &z_{i,j}, x_i, x_j\in\{0, 1\} \end{aligned} zijxizijxjzijxi+xj1zi,j,xi,xj{0,1}

若是一个 0-1 变量与连续变量的乘积,也可转化,例如

y = z x y=zx y=zx
其中, z z z 为 0-1 变量,而 x x x 为连续变量,则可以通过下面的约束条件线性化:
y ≥ x − ( 1 − z ) M y ≤ x y ≤ z M y ≥ − z M \begin{aligned} y&\geq x-(1-z)M\\ y&\leq x\\ y&\leq zM\\ y&\geq -zM \end{aligned} yyyyx(1z)MxzMzM

其中, M M M 为一个足够大的数(可以取值为 x x x 的上界)。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值