【问题标题】:Linear programming with minimum and maximum fixed cost具有最小和最大固定成本的线性规划
【发布时间】:2017-04-05 12:27:32
【问题描述】:

我需要您的帮助来解决以下优化问题。 我有一个最大化混合整数线性规划问题。 我想考虑最低和最高固定费用。

我是这样弄的。。

cost = max(minimum fixed cost , cost rate * x)
cost >= minimum fixed cost
cost >= cost rate * x
cost = min(maximum fixed cost , cost rate * x)
cost <= maximum fixed cost
cost <= cost rate * x

但是,这变成了不可行的解决方案。 请您帮我优化这样的问题。

【问题讨论】:

    标签: linear-programming constraint-programming minmax maximization mixed-integer-programming


    【解决方案1】:

    分段线性函数

    我认为你的意思是:

    A = minimum fixed cost / cost rate
    B = maximum fixed cost / cost rate
    

    那你要对分段线性函数建模:

    cost = minimum fixed cost   if x < A
           cost rate * x        if A <= x <= B 
           maximum fixed cost   if x > B
    

    在 MIP 模型中使用分段线性函数不是问题。您可以通过不同的方法做到这一点:

    • 使用额外的二进制变量(参见 (1))
    • 使用 SOS2 变量(参见 (1))
    • AMPL 和 Gurobi 等系统具有表达分段线性函数的特殊工具。

    示例配方

    具有 SOS2 变量的公式如下所示:

    引入数据点px和py

      px     py
      --------------------------
      0      minimum fixed cost
      A      minimum fixed cost
      B      maximum fixed cost
      C      maximum fixed cost
    

    我们假设0&lt;=x&lt;=C。 IE。 C 是x 的上限。

    然后做:

      set p = {1,2,3,4}
      sos2 variables lambda(p)
      sum(p, lambda(p)) = 1
      x = sum(p, lambda(p)*px(p))
      cost = sum(p, lambda(p)*py(p)) 
    

    参见例如(2)

    你的方法有什么问题

    请注意,您的方法(显示在问题中)不正确:

    cost >= minimum fixed cost
    cost >= cost rate * x
    cost <= maximum fixed cost
    cost <= cost rate * x
    

    真的

    minimum fixed cost <= cost <= maximum fixed cost
    cost = cost rate * x
    

    x 限制为A &lt;= x &lt;= B

    参考文献

    (1) H.Paul Williams,“数学编程中的模型构建”,Wiley

    (2)GAMS: Piecewise linear functions with SOS2 variables

    【讨论】:

    • 非常感谢您的回答。但是,我不想限制 x。 x 可以大于 B 或小于 A。如果 x 大于 B,则应应用最大固定成本。如果 x 小于 A,则应适用最低固定成本。我经历了本书第 9 章中提出的问题,但我仍然可以将它们与我的问题联系起来。请您提供一个如何解决此类问题的示例。我将不胜感激。
    • 您的公式对 x 施加了这些限制。令人失望的是你不理解威廉姆斯的书。它被认为是一个非常好的和相当容易获得的。我添加了一个 SOS2 示例。
    • 再次感谢@Erwin Kalvelagen。我已经掌握了 SOS2 的概念。但是,我的模型中仍然有一个不可行的解决方案:(实际上,我的变量 X 看起来像这样 x(a, b, c, d, e)。所以对于每个 x(a, b, c, d, e ) 我创建了变量 x1(a, b, c, d, e), x2(a, b, c, d, e), x3(a, b, c, d, e), x4(a, b , c, d, e). 同样,对于每个线段的二进制变量 y1(a, b, c, d, e), y2(a, b, c, d, e), y3(a, b, c, d, e) 来控制相邻的 x。
    【解决方案2】:

    分段线性函数:

    cost = 0.02 x  if 0   <= x <= 500
           0.03 x  if 500 <= x <= 1500 
           0.04 x  if 1500<= x <= 10000
    

    SOS2 解决方案:

    x[a, b, c, d, e] = (x1[a, b, c, d, e] * 0)    + 
                       (x2[a, b, c, d, e] * 500)  + 
                       (x3[a, b, c, d, e] * 1500) +
                       (x4[a, b, c, d, e] * 10000) 
    
    cost[a, b, c, d, e] = (x1[a, b, c, d, e] * 0       * 0   )+ 
                          (x2[a, b, c, d, e] * 500     * 0.02)+
                          (x3[a, b, c, d, e] * 1500    * 0.03)+
                          (x4[a, b, c, d, e] * 10000   * 0.04)
    
    x1[a, b, c, d, e] + x2[a, b, c, d, e] + x3[a, b, c, d, e] + x4[a, b, c, d, e]>= 0
    
    x1[a, b, c, d, e] <= y1[a, b, c, d, e]
    x2[a, b, c, d, e] <= y1[a, b, c, d, e] + y2[a, b, c, d, e]
    x3[a, b, c, d, e] <= y2[a, b, c, d, e] + y3[a, b, c, d, e]
    x4[a, b, c, d, e] <= y3[a, b, c, d, e]    
    
    y1[a, b, c, d, e] + y2[a, b, c, d, e] + y3[a, b, c, d, e]  = 1
    

    我就是这样做的。但是,求解器仍然显示不可行的解决方案。你能看出这个公式有什么问题吗?!

    【讨论】:

    • 这不是 SOS2 方法,而是使用二进制变量。 SOS2 使用 SOS2 集..
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-04-14
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多