如何计算决策变量的不同数量 - 线性规划

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 个变量的数量。这对求解器是否有利并不总是很清楚,可能需要进行一些实验。

*更新:添加了缺失的约束