3

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

min t3;

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

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

4

1 回答 1

3

听起来您正在尝试将某个变量建模z为恰好等于其中一个 values {t1, t2, t3}。我将通过添加三个二进制变量 、 和 来解决此问题b1b2它们b3表示所选元素。由于我们只选择三个元素之一,我们将添加约束:

b1 + b2 + b3 = 1

现在我们需要强制执行变量之间z的关系。b为此,我将定义三个新变量z1z2z3。如果变量zi取值为 0 bi=0,否则取值为 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。您将添加相同的四个约束来设置z2基于b2andt2和设置z3基于b3and t3

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

z = z1 + z2 + z3
于 2015-10-12T02:09:09.517 回答