如何对决策变量应用取整函数并线性化含取整函数的约束
线性规划中Floor/Ceiling函数的线性化方法
一、Floor函数的线性化(y = floor(x))
假设x是连续决策变量,y是整数决策变量,要实现y等于x的向下取整值(即y是不大于x的最大整数,比如x=4.2时y=4),需要添加以下3组约束:
y ≤ x:确保y不会超过x的取值x ≤ y + 1 - ε:这里的ε是一个极小的正数(例如1e-6),用来替代严格不等式x < y+1——因为线性规划求解器不支持严格约束,用这个近似可以避免整数边界的精度问题y ∈ ℤ:明确声明y必须是整数类型的决策变量
示例验证:当x=4.2时,代入约束:
y ≤4.24.2 ≤ y +1 -0.000001→ 计算得y ≥3.200001
结合y是整数的要求,y只能取4,完全符合需求。
二、Ceiling函数的线性化(y = ceiling(x))
如果要实现y等于x的向上取整值(即y是不小于x的最小整数,比如x=4.2时y=5),同样用连续变量x和整数变量y,添加以下约束:
y ≥ x:确保y不会小于x的取值x ≥ y -1 + ε:用该式替代严格不等式x > y-1,ε取极小正数(如1e-6)y ∈ ℤ:声明y为整数决策变量
示例验证:当x=4.2时,代入约束:
y ≥4.24.2 ≥ y -1 +0.000001→ 计算得y ≤5.199999
结合整数要求,y只能取5,符合预期。
三、含Floor/Ceiling的约束线性化
如果原约束中直接包含Floor或Ceiling函数(例如floor(x) ≤ z或z ≤ ceiling(x)),可以按以下步骤处理:
- 引入整数变量
y,让y等于对应的Floor/Ceiling值(按上述两种情况添加约束) - 将原约束中的Floor/Ceiling函数替换为
y,得到线性约束(比如y ≤ z或z ≤ y)
注意事项
ε的取值要合理:太小可能触发求解器的精度误差,太大可能导致逻辑偏差,通常取1e-6到1e-9之间,可根据求解器的精度调整- 必须确保
y被声明为整数变量,否则无法实现取整效果
内容的提问来源于stack exchange,提问作者bimal
相关产品推荐
相关产品推荐

