【问题标题】:How to count distinct number of decision variables - Linear programming如何计算不同数量的决策变量 - 线性规划
【发布时间】:2020-09-14 03:59:54
【问题描述】:

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

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

任何人都可以帮助我了解如何制定上述约束条件,即不同决策变量值的计数

谢谢。

【问题讨论】:

    标签: mathematical-optimization linear-programming pyomo integer-programming


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢@Erwin Kalvelagen 的及时回复。确实很有帮助。我唯一要添加到您的答案的是,当您建议添加“x(i) = sum(k, k*y(i,k))” 作为约束时,我们还需要添加另一个约束: sum(y( i,k)) == 1 [对于给定的 i,对 k 求和,因此有 5 个约束]。这是因为假设 x1 = 15,那么我们希望 y(1,15) = 1,没有上述约束,很可能当 x1 = 15 时,y(1,7) = 1 & y( 1,8) = 1。如果我推断有误,请告诉我。再次感谢
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多