code: def markowitz(I,sigma,r,alpha):
      
      model = Model("markowitz")
  
      x = {}
      for i in I:
          x[i] = model.addVar(vtype="C", name="x(%s)"%i)  # quantity of i to buy
  
      model.addCons(quicksum(r[i]*x[i] for i in I) >= alpha)
      model.addCons(quicksum(x[i] for i in I) == 1)
  
      # set nonlinear objective: SCIP only allow for linear objectives hence the following
      obj = model.addVar(vtype="C", name="objective", lb = None, ub = None)  # auxiliary variable to represent objective
      model.addCons(quicksum(sigma[i]**2 * x[i] * x[i] for i in I) <= obj)
      model.setObjective(obj, "minimize")
  
      model.data = x
      return model
docs: markowitz -- simple markowitz model for portfolio optimization.
      Parameters:
          - I: set of items
          - sigma[i]: standard deviation of item i
          - r[i]: revenue of item i
          - alpha: acceptance threshold
      Returns a model, ready to be solved.