首页 > 解决方案 > 如何计算不同数量的决策变量 - 线性规划

问题描述

我有 5 个决策变量(比如)x1 - x5,每个的下限 = 5,每个的上限 = 30,它们只允许采用整数值。这些决策变量被用来计算毛利率(通过一些函数),目标函数是最大化毛利率。

现在,在为 x1 - x5 选择最佳值时,我有一个约束,即我不应该有超过 2 个(比如)x1 - x5 的不同值。

任何人都可以帮助我如何制定上述约束,即不同决策变量值的计数<= 2。我正在尝试在pyomo中构建程序。

谢谢你。

标签: mathematical-optimizationlinear-programmingpyomointeger-programming

解决方案


有不同的方法可以对此进行建模。这是一个简单的方法。首先引入二进制变量:

  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

链接 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 时,请注意它的值可能有点难以解释。

一些变量可以放宽为连续的。这可能会节省一些整数/二进制变量的数量。这是否对求解器有利并不总是很清楚,可能需要一些实验。

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


推荐阅读