1

我正在研究采购优化模型,以下是一些相关输入:

设置:

  • model.b = Set(initialize=Brands, doc='Brands')
  • model.s = Set(initialize=Suppliers, doc='Suppliers')
  • model.t = Set(initialize=Time, doc='Time in days')

参数:

  • model.lt = Param(model.s, initialize=LeadTime, doc='以天为单位从供应商处采购的提前期')

变量:

  • model.q = Var(model.b, model.t, model.s, domain=NonNegativeIntegers, bounds=(0.0,None), doc='每个品牌(b)的接收数量,时间(t),表格供应商(s)。')
  • model.pr = Var(model.b, model.t, model.s, domain=NonNegativeIntegers, bounds=(0.0,None), doc='Purshase 每个品牌的订单数量(b), 在时间(t), form供应商。')

我正在努力编写一个约束,使从时间 (t) 开始的 (LT) 天之前订购的数量 = 现在在时间 (t) 收到的数量,其中 LT 是每个供应商所需的交货时间。这就是我想象的约束,但我不知道如何写它:

在时间 (t - 提前期) 订购的数量 = 在时间 (t) 收到的数量,对于所有时间 (t)、品牌 (b) 和供应商 (s)

非常感谢您的时间和帮助!

4

1 回答 1

2

假设模型中的时间点都是整数,并且从一个点中减去提前期model.t将给出另一个有效索引model.t,那么以下应该有效:

def compute_received(m,b,t,s):
    if t - m.lt[s] < min(m.t):
        # Deliveries at this time would have to be placed before the beginning of the model
        return Constraint.Skip
    return m.q[b,t,s] == m.pr[b,t-m.lt[s],s]
model.compute_received = Constraint(model.b, model.t, model.s, rule=compute_received)
于 2017-03-01T16:21:10.090 回答