code: def weber(I,x,y,w):
      
  
      model = Model("weber")
  
      X,Y,z,xaux,yaux = {},{},{},{},{}
      X = model.addVar(lb=-model.infinity(), vtype="C", name="X")
      Y = model.addVar(lb=-model.infinity(), vtype="C", name="Y")
      for i in I:
          z[i] = model.addVar(vtype="C", name="z(%s)"%(i))
          xaux[i] = model.addVar(lb=-model.infinity(), vtype="C", name="xaux(%s)"%(i))
          yaux[i] = model.addVar(lb=-model.infinity(), vtype="C", name="yaux(%s)"%(i))
  
      for i in I:
          model.addCons(xaux[i]*xaux[i] + yaux[i]*yaux[i] <= z[i]*z[i], "MinDist(%s)"%(i))
          model.addCons(xaux[i] == (x[i]-X), "xAux(%s)"%(i))
          model.addCons(yaux[i] == (y[i]-Y), "yAux(%s)"%(i))
  
      model.setObjective(quicksum(w[i]*z[i] for i in I), "minimize")
  
      model.data = X,Y,z
      return model
docs: weber: model for solving the single source weber problem using soco.
      Parameters:
          - I: set of customers
          - x[i]: x position of customer i
          - y[i]: y position of customer i
          - w[i]: weight of customer i
      Returns a model, ready to be solved.