【问题标题】:if statement in linear programming线性规划中的 if 语句
【发布时间】:2015-11-04 16:31:29
【问题描述】:

我有两个变量a >= 1b = {0, 1},所以a是一个整数正变量/=0b 是二元变量。我想在a=1时制作b=1,当a>1时制作b=0,并且我需要把它写成一个线性程序。所以条件是:

if a=1 then b=1 else b=0

相当于:

if a<2 then b=1 else b=0

因为a由于其他约束不能为0。

有人知道如何用线性程序编写它吗?

【问题讨论】:

  • 这与“线性规划”无关。什么是编程语言?解决此任务的确切约束是什么?到目前为止你的进展如何?
  • 我认为 OP 只是滥用了“线性规划”这个术语
  • 我正在编写一个线性程序,而不是高级编程语言程序。我认为我的问题的正确答案是:a = b+2y; b+y = 1;其中 y 是二进制变量,M 是一个大数。有人可以确认吗?

标签: linear-programming


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    C++ 中的一个例子:

    #include <iostream>
    
    int main()
    {
        // declare variables at top...
        int a = 1;
        int b = 0;
    
        // then some code that changes the initial value of a...
    
        // code to check the value of a and change the value of b...
        if (a == 1) {
            b = 1;
        } else if (a > 1) {
            b = 0;
        }
    
        // output value of b
        std::cout << "Value of b: " << b << std::endl;
    
        return 0;
    }
    

    【讨论】:

    • 我正在编写一个线性程序,而不是高级编程语言程序。我认为我的问题的正确答案是:a = b+2y; b+y = 1;其中 y 是二进制变量,M 是一个大数。有人可以确认吗?
    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多