混合整数线性规划(MILP)约束构建:排除真值表无效场景
解决学生贷款还款约束的问题
嘿,我明白你的需求了——你要排除真值表中那两个不合理的场景:当还款额小于350美元时,二进制变量fiftySL_i不能取1,以及当还款额≥350美元时,fiftySL_i不能取0。这其实可以通过两个线性约束来实现,不用复杂的逻辑,我给你拆解清楚:
约束1:禁止「SL_i < 350 且 fiftySL_i = 1」
这个约束要保证:只要fiftySL_i=1,SL_i就必须≥350。我们可以写成:
$$SL_i \ge 350 \times fiftySL_i$$
- 当$fiftySL_i = 1$时,约束变为$SL_i \ge 350$,直接排除了还款额不足350却标记为多还50的情况;
- 当$fiftySL_i = 0$时,约束变为$SL_i \ge 0$,这和还款额非负的常识一致,不会限制合理的低额还款。
约束2:禁止「SL_i ≥ 350 且 fiftySL_i = 0」
这个约束要保证:只要SL_i≥350,fiftySL_i就必须=1。这里我们需要用到大M法,先设定一个足够大的正数$M$(比如取你可能的最大月还款额,只要远大于350就行),然后约束写成:
$$SL_i \le 349 + M \times fiftySL_i$$
- 当$fiftySL_i = 0$时,约束变为$SL_i \le 349$,也就是$SL_i < 350$,直接排除了还款额≥350却没标记的情况;
- 当$fiftySL_i = 1$时,约束变为$SL_i \le 349 + M$,因为M足够大,这个约束不会对你的实际还款额产生任何限制。
把这两个约束加进去,就正好保留了你需要的第一种和第四种场景,完美排除掉无效的那两个情况啦!
内容的提问来源于stack exchange,提问作者BrianW
相关产品推荐
相关产品推荐

