【问题标题】:Is there a way to define sets, variables and constraints intelligently in PYOMO without cross product?有没有一种方法可以在 PYOMO 中智能地定义集合、变量和约束而无需叉积?
【发布时间】:2022-11-17 01:45:00
【问题描述】:

我有三个不同的集合

  1. 商店数量 - 100
  2. 产品数量 - 10
  3. 每个产品的尺码数量 - 10

    我想在 pyomo 中创建参数,它是以上三组的组合。基本上我想跳过下面有代码 sn-p 的叉积。

    跳过以下方法的原因是每个产品可以有 10 个不同的尺寸,并且不需要创建 A 产品和来自产品 B 的尺寸的组合,这没有意义。

    带叉积的代码 sn-p:

    allocation_model            = pyo.AbstractModel()
    allocation_model.stores     = pyo.Set()
    allocation_model.sizes      = pyo.Set()
    allocation_model.packs      = pyo.Set()
    allocation_model.products   = pyo.Set()
    allocation_model.demand     = pyo.Param(allocation_model.clusters,
                                              allocation_model.products,
                                              allocation_model.sizes, default = 0)
    

【问题讨论】:

    标签: python pyomo


    【解决方案1】:

    所以,如果我理解你的困境,不同产品的尺寸是不同的,因此通用的产品和尺寸交叉集是行不通的。

    我想你有两个选择。要么工作。

    最简单的事情就是制作产品尺寸对的元组并将其用作集合......基本上将产品与其尺寸合并。

    products = {(shoes, 12), (shoes, 13), (shoes, 5), (pants, XL), (pants, L),...}

    使用这样的平面集并用它来初始化你的pyomo.Set 是完全合法的。如果您需要对单个产品求和,可能会有点棘手,因为该信息已与尺寸合并。不确定是否需要。

    选项 2 是使用索引集,因此您将拥有按产品索引的大小集。 Here is an example 使用 EV 和时间。您可以针对产品和尺寸进行类似设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 2021-03-06
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2020-11-19
      相关资源
      最近更新 更多