作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ILP 问题,我在其中表达了实现 A OR B 的一些约束,其中 A 和 B 是逻辑与的结果(假设 A = A1 AND A2,B = B1 AND B2 AND B3)。在我的问题的这一点上,A和B之间的一个被称为等于1。A和B都是二元变量。
我想用 If-Then-Else 表达这个断言:
if (A == true)
/* Choose one between C and D */
C_OR_D >= C;
C_OR_D >= D;
C_OR_D <= C + D;
C_OR_D = 1;
else /* or if (B == true), that's the same */
/* Choose one between E and F */
E_OR_F >= E;
E_OR_F >= F;
E_OR_F <= E + F;
E_OR_F = 1;
我知道如何编写简单的 If-Condition,例如
/* if (x == true) then y = true */
y >= x;
但我不知道如何写一组约束来表达一个“复杂”的if。
你们中有人知道如何在 LPSolve 中解决这个问题吗?
最佳答案
回答第一部分:
AND 可以建模为
A >= A1 + A2 -1
A <= A1
A <= A2
OR 可以建模为
B >= B1
B >= B2
B <= B1 + B2
要对 if-else 约束建模,您可以使用“大 M”技术。
设 M 是一个足够大的数。
您可以通过在不等式的一侧添加 M 来“禁用”不等式。那么无论变量值如何,不等式都成立。
例如
if (A == 1)
C_OR_D >= C;
else
E_OR_F >= E;
可以建模为
(1-A) * M + C_OR_D >= C
A * M + E_OR_F >= E
关于linear-programming - 整数线性规划 (ILP) 中具有多重赋值的 If-Then-Else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838371/
我是一名优秀的程序员,十分优秀!