MILP中如何将变量设为另一变量的绝对值?
在混合整数线性规划(MILP)中实现y=|x|的可行性与建模方案
可行。绝对值函数本身是非线性的,但可以通过线性约束转化(或结合少量整数变量)适配MILP的框架,下面是两种常用的落地方式:
方法一:无额外整数变量的直接约束
利用绝对值的核心性质:对任意x,|x| = y等价于-y ≤ x ≤ y,同时配合非负约束和变量范围限制,约束组如下:
-y ≤ x ≤ yy ≥ 0x ∈ [-M, M], x ∈ ℤy ∈ ℕ(若要求y为整数,也可设为非负连续变量,视需求而定)
注意:这种方法需要你的模型目标函数会驱动y取最小值(比如目标中包含最小化y的项),否则y可能取大于|x|的冗余值。
方法二:引入0-1变量强制严格等价
如果需要不依赖目标函数,直接强制y严格等于|x|,可以引入0-1整数变量z,将x拆分为非负分量x⁺和非正分量x⁻:
x = x⁺ - x⁻y = x⁺ + x⁻x⁺ ≤ M * zx⁻ ≤ M * (1 - z)x⁺ ≥ 0, x⁻ ≥ 0, x⁺, x⁻ ∈ ℕz ∈ {0, 1}x ∈ [-M, M], x ∈ ℤ
逻辑说明:
- 当
z=1时,x⁻被约束为0,此时x=x⁺≥0,y=x⁺=|x| - 当
z=0时,x⁺被约束为0,此时x=-x⁻≤0,y=x⁻=|x|
选型建议
- 若目标函数天然包含最小化
y的逻辑,优先选方法一,模型更简洁,求解效率更高 - 若需要独立保证
y=|x|(不受目标函数影响),选方法二,约束更严谨
内容的提问来源于stack exchange,提问作者BladesV
相关产品推荐
相关产品推荐

