code: def sils(T,f,c,d,h):
      
      model = Model("single item lotsizing")
      Ts = range(1,T+1)
      M = sum(d[t] for t in Ts)
      y,x,I = {},{},{}
      for t in Ts:
          y[t] = model.addVar(vtype="I", ub=1, name="y(%s)"%t)
          x[t] = model.addVar(vtype="C", ub=M, name="x(%s)"%t)
          I[t] = model.addVar(vtype="C", name="I(%s)"%t)
      I[0] = 0
  
      for t in Ts:
          model.addCons(x[t] <= M*y[t], "ConstrUB(%s)"%t)
          model.addCons(I[t-1] + x[t] == I[t] + d[t], "FlowCons(%s)"%t)
  
      model.setObjective(\
          quicksum(f[t]*y[t] + c[t]*x[t] + h[t]*I[t] for t in Ts),\
          "minimize")
  
      model.data = y,x,I
      return model
docs: sils -- LP lotsizing for the single item lot sizing problem
      Parameters:
          - T: number of periods
          - P: set of products
          - f[t]: set-up costs (on period t)
          - c[t]: variable costs
          - d[t]: demand values
          - h[t]: holding costs
      Returns a model, ready to be solved.