如何计算决策变量的不同数量 - 线性规划
How to count distinct number of decision variables - Linear programming
我有 5 个决策变量(比如)x1 - x5,每个变量的下限 = 5,每个变量的上限 = 30,它们只能取整数值。这些决策变量被用来计算毛利率(通过一些函数),objective函数是为了最大化毛利率。
现在,在为 x1 - x5 选择最佳值时,我有一个限制,即我不应该为 x1 - x5 设置超过 2 个(比方说)不同的值。
任何人都可以帮助我如何制定上述约束,即不同决策变量值的计数 <= 2。我正在尝试在 pyomo 中构建程序。
谢谢。
有多种方法可以对此进行建模。这是一个简单的方法。先介绍二进制变量:
y(i,k) = 1 if x(i)=k i=1,..,5, k=5,...,30
0 otherwise
这意味着我们可以写:
x(i) = sum(k, k*y(i,k))
sum(k, y(i,k)) = 1 for all i
至 link x 和 y。现在引入二进制变量:
z(k) = 1 if some x(i)=k
0 otherwise (actually we will allow 0 or 1 when all x(i)<>k, see below)
我们希望其中最多 2 个为 1。这可以简洁地表述为:
z(k) >= y(i,k) for all i,k
sum(k, z(k)) <= 2
请注意,这只是一个界限。我们有
y(i,k) = 1 ==> z(k) = 1
但实际上我们不需要:
y(i,k) = 0 ==> z(k) = 0
但这对于这种特殊情况已经足够了。因此,当打印 z 时,建议其值可能有点难以解释。
一些变量可以放宽为连续的。这可能会节省 integer/binary 个变量的数量。这对求解器是否有利并不总是很清楚,可能需要进行一些实验。
*更新:添加了缺失的约束
我有 5 个决策变量(比如)x1 - x5,每个变量的下限 = 5,每个变量的上限 = 30,它们只能取整数值。这些决策变量被用来计算毛利率(通过一些函数),objective函数是为了最大化毛利率。
现在,在为 x1 - x5 选择最佳值时,我有一个限制,即我不应该为 x1 - x5 设置超过 2 个(比方说)不同的值。
任何人都可以帮助我如何制定上述约束,即不同决策变量值的计数 <= 2。我正在尝试在 pyomo 中构建程序。
谢谢。
有多种方法可以对此进行建模。这是一个简单的方法。先介绍二进制变量:
y(i,k) = 1 if x(i)=k i=1,..,5, k=5,...,30
0 otherwise
这意味着我们可以写:
x(i) = sum(k, k*y(i,k))
sum(k, y(i,k)) = 1 for all i
至 link x 和 y。现在引入二进制变量:
z(k) = 1 if some x(i)=k
0 otherwise (actually we will allow 0 or 1 when all x(i)<>k, see below)
我们希望其中最多 2 个为 1。这可以简洁地表述为:
z(k) >= y(i,k) for all i,k
sum(k, z(k)) <= 2
请注意,这只是一个界限。我们有
y(i,k) = 1 ==> z(k) = 1
但实际上我们不需要:
y(i,k) = 0 ==> z(k) = 0
但这对于这种特殊情况已经足够了。因此,当打印 z 时,建议其值可能有点难以解释。
一些变量可以放宽为连续的。这可能会节省 integer/binary 个变量的数量。这对求解器是否有利并不总是很清楚,可能需要进行一些实验。
*更新:添加了缺失的约束