二元变量与非负整数间IFF约束的线性化方法咨询
约束
p=0 ↔ s=0 的线性化方案 首先明确前提:你需要先确定s的最大可行上界,记为M(M为正整数,取s在你的问题中的实际最大可能值即可,避免取过大的M导致数值稳定性问题)。
仅需要添加两条线性约束即可实现要求:
s ≥ ps ≤ M * p
双向逻辑验证:
- 当
p=0时:第一条约束给出s≥0(和s本身的非负约束一致),第二条约束给出s≤0,因此只能s=0,满足「p=0推s=0」的要求- 当
s=0时:第二条约束给出0 ≤ M*p(恒成立),第一条约束给出0 ≥ p,而p是二元变量取值仅为0或1,因此只能p=0,满足「s=0推p=0」的要求
所有场景完全匹配p=0 当且仅当 s=0的约束要求,且全程没有将s作为二元变量处理。
如果你使用的求解器支持指示变量(indicator)约束,也可以直接写两条指示约束,无需引入大M:
- 指示约束1:
p=0成立时,强制s=0 - 指示约束2:
s=0成立时,强制p=0
内容的提问来源于stack exchange,提问作者Unziello
相关产品推荐
相关产品推荐

