code: def eoq_soco(I,F,h,d,w,W):
      
      model = Model("EOQ model using SOCO")
  
      T,c = {},{}
      for i in I:
          T[i] = model.addVar(vtype="C", name="T(%s)"%i)  # cycle time for item i
          c[i] = model.addVar(vtype="C", name="c(%s)"%i)  # total cost for item i
  
      for i in I:
          model.addCons(F[i] <= c[i]*T[i])
  
      model.addCons(quicksum(w[i]*d[i]*T[i] for i in I) <= W)
  
      model.setObjective(quicksum(c[i] + h[i]*d[i]*T[i]*0.5 for i in I), "minimize")
  
      model.data = T,c
      return model
docs: eoq_soco --  multi-item capacitated economic ordering quantity model using soco
      Parameters:
          - I: set of items
          - F[i]: ordering cost for item i
          - h[i]: holding cost for item i
          - d[i]: demand for item i
          - w[i]: unit weight for item i
          - W: capacity (limit on order quantity)
      Returns a model, ready to be solved.