如何说变量是线性规划中的三个值之一
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}
之一。我将通过添加三个二进制变量 b1
、b2
和 b3
来解决这个问题,它们表示 selected 元素。由于我们只有 select 三个元素之一,我们将添加约束:
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
并基于 b3
和 t3
设置 z3
。 =39=]
最后,您需要根据 zi
值设置 z
:
z = z1 + z2 + z3
我正在使用 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
来解决这个问题,它们表示 selected 元素。由于我们只有 select 三个元素之一,我们将添加约束:
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
并基于 b3
和 t3
设置 z3
。 =39=]
最后,您需要根据 zi
值设置 z
:
z = z1 + z2 + z3