Excel Solver线性规划:If(x>30,1,0)替代方案与三周库存约束实现
解决Excel Solver中连续三周库存超标的约束问题
一、替换IF语句的线性化约束
先修正你之前的单周库存判断逻辑,要实现「当库存x>30时y=1,否则y=0」的逻辑,需用以下两个线性约束(y为0-1二进制变量):
x - 30 ≤ M * y:当x>30时,左边为正,y必须取1才能满足约束;当x≤30时,y取0即可满足。30 - x ≤ M * (1 - y):当x≤30时,左边为正,1-y必须取1(即y=0);当x>30时,左边为负,自动满足约束。
这里的M是一个足够大的常数,比如取你模型中库存可能达到的最大值(如100),确保约束逻辑生效。
二、连续三周不超标的约束设置
要避免连续三周库存超标(即连续三周y=1),只需对每一周i(从第3周到计划的最后一周)添加如下约束:
y_i + y_{i-1} + y_{i-2} ≤ 2
这个约束的逻辑是:任意连续三周的y值之和最多为2,意味着不可能出现三个1(即连续三周超标),最多只能有两周超标,完全匹配你的需求。
三、整体模型整合
把上述约束加入你的运输模型:
- 为每周定义一个0-1变量y,用来标记当周库存是否超过30。
- 为每个y变量添加对应的两个线性约束,关联当周库存x。
- 为第3周及之后的每周添加连续三周y值之和≤2的约束。
- 保留原有的库存范围约束和最小化发货次数的目标函数。
内容的提问来源于stack exchange,提问作者QLN
相关产品推荐
相关产品推荐

