首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线性规划中的if语句

线性规划中的if语句
EN

Stack Overflow用户
提问于 2015-11-04 16:31:29
回答 2查看 9K关注 0票数 1

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

代码语言:javascript
复制
if a=1 then b=1 else b=0

相当于:

代码语言:javascript
复制
if a<2 then b=1 else b=0

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

有人知道怎么用线性规划来写吗?

EN

回答 2

Stack Overflow用户

发布于 2015-11-05 23:37:40

OP,如果M大于正整数a的任何可能值,则您在注释中所建议的答案是正确的,即:

A <= b+My;a >= b+2y;b+y = 1,其中y是二进制的

为了确认,我们只需要检查这组语句就可以证明:(1)期望的结果是可行的,(2)所有其他结果都是不可行的。由于b在本例中是一个二进制变量,“所有其他结果”仅仅意味着另一个结果: b=0与b=1。

证明

(a = 1) => (b = 1)

首先,考虑以下条件:

如果a=1那么b=1

让a=1在你建议的答案中获得:

代码语言:javascript
复制
1 <= b+My; 1 >= b+2y; b+y = 1

显然,b=1是可行的,因为我们可以找到一个y值,该值允许所有语句都为真(即y=0):

代码语言:javascript
复制
1 <= 1+M*0; 1 >= 1+2*0; 1+0 = 1

另一方面,如果我们让让b=0

代码语言:javascript
复制
1 <= 0+My; 1 >= 0+2y; 0+y = 1

这意味着y=1在第二条声明中导致了的矛盾:

代码语言:javascript
复制
1 <= 0+M*1; 1 >= 0+2*1; 0+1 = 1

因此,如果 a=1,那么一定是b=1__。

(a > 1) => (b = 0)

接下来,考虑前面条件的对位 (以满足“of”子句):

如果a>1那么b=0

按照相同的过程,让a>1在您的建议答案中-我将放一个5,但请记住,这可能是任何大于1的整数

代码语言:javascript
复制
5 <= b+My; 5 >= b+2y; b+y = 1

我们看到b=0是可行的,因为我们可以找到使所有语句都为真的y值(即y=1):

代码语言:javascript
复制
5 <= 0+M*1; 5 >= 0+2*1; 0+1 = 1

(这一点很重要,即M大于a的任何可能值,否则第一条语句可能不正确。)

另一方面,如果我们让让b=1

代码语言:javascript
复制
5 <= 1+My; 5 >= 1+2y; 1+y = 1

这意味着y=0导致了第一个不平等中的矛盾

代码语言:javascript
复制
5 <= 1+M*0; 5 >= 1+2*0; 1+0 = 1

因此,如果 a>1,那么一定是b=0__。

结论

因此,这组语句

代码语言:javascript
复制
a <= b+My; a >= b+2y; b+y = 1, where y is binary

满足条件

如果a=1那么b=1 else b=0

票数 3
EN

Stack Overflow用户

发布于 2015-11-04 17:05:22

C++中的一个例子:

代码语言:javascript
复制
#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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33527088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档