如何说变量是线性规划中的三个值之一

How to say a variable is one of three values in linear programming

我正在使用 LPSolve 来解决线性问题,但是我在表达自己对约束的看法时遇到了问题。 我想在我的约束中写下变量 t3 是三个值之一。所以我做了这样的事情:

min t3;

t3 >= 2+t1;
t3 >= 2+t4;
t3 >= 2+t8;

(这只是一个示例,当然不是实际情况,否则 t4、t1 和 t8 什么都不做)。 但是 t3 的最终值是最高的而不是最低的......我做错了什么,我认为这是有道理的。当然,如果我尝试最大化 t3 是行不通的,因为没有上限,但我认为这不是真正的问题。

听起来您正在尝试将某个变量 z 建模为恰好等于值 {t1, t2, t3} 之一。我将通过添加三个二进制变量 b1b2b3 来解决这个问题,它们表示 selected 元素。由于我们只有 select 三个元素之一,我们将添加约束:

b1 + b2 + b3 = 1

现在我们需要加强 zb 变量之间的关系。为此,我将定义三个新变量 z1z2z3。如果 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。您将添加相同的四个约束以基于 b2t2 设置 z2 并基于 b3t3 设置 z3。 =39=]

最后,您需要根据 zi 值设置 z

z = z1 + z2 + z3