我正在使用 LPSolve 来解决线性问题,但是我在表达自己对约束的看法时遇到了问题。 我想在我的约束中写下变量 t3 是三个值之一。所以我做了这样的事情:
min t3;
t3 >= 2+t1;
t3 >= 2+t4;
t3 >= 2+t8;
(这只是一个示例,当然不是实际情况,否则 t4、t1 和 t8 什么都不做)。 但是 t3 的最终值是最高的而不是最低的......我做错了什么,我认为这是有道理的。当然,如果我尝试最大化 t3 是行不通的,因为没有上限,但我认为这不是真正的问题。
最佳答案
听起来您正在尝试将某些变量 z
建模为恰好等于值 {t1, t2, t3}
之一。我会通过添加三个二进制变量来解决这个问题,b1
、b2
和 b3
,它们指示所选元素。由于我们只选择三个元素之一,我们将添加约束:
b1 + b2 + b3 = 1
现在我们需要加强z
和b
变量之间的关系。为此,我将定义三个新变量 z1
、z2
和 z3
。如果 bi=0
,变量 zi
将取值 0,否则取值 ti
。为此,我们包括以下约束,其中 M
是一个大的正常数:
z1 >= 0 - M*b1
z1 <= M*b1
z1 >= t1 - M*(1-b1)
z1 <= t1 + M*(1-b1)
如果 b1=0
,则前两个约束固定 z1=0
,接下来的两个约束什么都不做。如果 b1=1
,则前两个约束什么都不做,接下来的两个约束固定 z1=t1
。您将添加相同的四个约束以根据 b2
和 t2
设置 z2
并根据 z3
设置 b3
和 t3
。
最后,您需要根据 zi
值设置 z
:
z = z1 + z2 + z3
关于constraints - 如何说变量是线性规划中的三个值之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072032/