【问题标题】:Integer Programming - If then statement整数编程 - If then 语句
【发布时间】:2022-01-17 01:46:40
【问题描述】:

我是线性/整数编程的新手,我很难为固定电荷问题中的特定 if-then 语句制定约束。假设有 5 家 T 恤制造商,客户希望在最小化成本的同时购买 400 件 T 恤。

Producer Variable cost/t-shirt Delivery Availability
A 3 40 200
B 3.5 30 100
C 4.10 Free delivery 100
D 4.1 30 200
E 3.2 30 First 100 t-shirts
E 2.90 20 101st-150th t-shirt

生产者 E 有 150 件 T 恤。从生产商 E 处购买的前 100 件 T 恤的可变成本为 3.20 美元,运费为 30 美元。如果客户从生产商 E 那里订购了超过 100 件 T 恤,她可以以 2.90 美元的可变成本和 20 美元的额外费用购买它们。

如何从这个 if-then 语句创建约束:

  • Xe1 = 在生产商 E 处购买的昂贵 T 恤的数量
  • Xe2 = 在生产商 E 处购买的廉价 T 恤的数量

当 Xe1

提前致谢!

【问题讨论】:

    标签: constraints linear-programming minimization maximize mixed-integer-programming


    【解决方案1】:

    由于 Xe1 和 Xe2 都是非负整数变量,因此您的约束与 Xe1 <= 99 ⇒ Xe2 = 0 相同。这可以表述如下:

                    b1 <= b2
    99*b1 + 100*(1-b1) <= Xe1 <= 99*b1 + M*(1-b1)
                 1-b2  <= Xe2 <= M'*(1-b2)
    

    其中b1,b2 是二进制辅助变量,MM'Xe1Xe2 的上限,即M = 101M' = 400

    【讨论】:

      【解决方案2】:

      这是一种非常标准的“折扣定价模型”,即按一定数量授予折扣价格。您可以在模型中引入 1 个二进制变量来执行此操作。这听起来像是一个硬件任务.... :)

      让:

      Xe1 be the qty bought from E at price 1
      Xe2 be the qty bought from E at price 2
      Ye be the decision to buy at the second price point y ∈ {0, 1}
      Me2 be the qty available at the 2nd price (or a reasonable upper bound)
      

      然后:

      Xe2 <= Ye * Me2          # purchase at 2nd price point held to zero, unless Ye==1
      Xe1 >= 100 * Ye          # Ye can only be 1 if 100 are purchased at Xe1
      

      这里的运输存在一些细微差别。从问题描述中不清楚您是否从 E 购买了 101 件衬衫,如果运输成本为 30 + 20(这将是奇数)或整个运输成本降至 20。您可以使用相同的指示变量 @987654323 @ 也可以解决这个问题。

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 2011-05-10
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多