OP,只要 M 大于正整数 a 的任何可能值,您在评论中建议的答案是正确的,即:
a = b+2y; b+y = 1,其中y是二进制
为了确认,我们只需检查这组陈述以证明 (1) 预期结果是可行的, (2) 所有其他结果都是不可行的。由于在这种情况下 b 是一个二元变量,因此“所有其他结果”仅表示其他结果:b=0 与 b=1。
证明
(a = 1) => (b = 1)
首先,考虑条件:
如果 a=1 则 b=1
让 a=1 在您的建议答案中,获得:
1 <= b+My; 1 >= b+2y; b+y = 1
显然,b=1 是可行的,因为我们可以找到一个 y 值,它允许所有的陈述都为真(即 y=0):
1 <= 1+M*0; 1 >= 1+2*0; 1+0 = 1
另一方面,如果我们让 b=0:
1 <= 0+My; 1 >= 0+2y; 0+y = 1
这意味着 y=1,这在第二个陈述中导致矛盾:
1 <= 0+M*1; 1 >= 0+2*1; 0+1 = 1
因此,如果a=1,那么它一定是b=1。
(a > 1) => (b = 0)
接下来,考虑先验条件的contrapositive(以满足“else”子句):
如果 a>1 则 b=0
按照相同的程序,让 a>1 在您建议的答案中 - 我会输入 5,但请记住,这可以是大于 1 的任何整数:
5 <= b+My; 5 >= b+2y; b+y = 1
我们看到 b=0 是可行的,因为我们可以找到一个 y 的值,使所有的陈述都为真(即 y=1):
5 <= 0+M*1; 5 >= 0+2*1; 0+1 = 1
(这是重要的一点,即 M 大于 a 的任何可能值,否则第一条语句可能不正确。)
另一方面,如果我们让 b=1:
5 <= 1+My; 5 >= 1+2y; 1+y = 1
这意味着 y=0,这在第一个不等式中导致矛盾:
5 <= 1+M*0; 5 >= 1+2*0; 1+0 = 1
因此,如果a>1,那么它一定是b=0。
结论
因此,这组语句
a <= b+My; a >= b+2y; b+y = 1, where y is binary
满足条件:
如果 a=1 则 b=1 否则 b=0