code: def p_portfolio(I,sigma,r,alpha,beta):
      
  
      model = Model("p_portfolio")
  
      x = {}
      for i in I:
          x[i] = model.addVar(vtype="C", name="x(%s)"%i)  # quantity of i to buy
      rho = model.addVar(vtype="C", name="rho")
      rhoaux = model.addVar(vtype="C", name="rhoaux")
  
      model.addCons(rho == quicksum(r[i]*x[i] for i in I))
      model.addCons(quicksum(x[i] for i in I) == 1)
  
      model.addCons(rhoaux == (alpha - rho)*(1/phi_inv(beta))) #todo
      model.addCons(quicksum(sigma[i]**2 * x[i] * x[i] for i in I) <=  rhoaux * rhoaux)
  
      model.setObjective(rho, "maximize")
  
      model.data = x
      return model
docs: p_portfolio -- modified 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
          - beta: desired confidence level
      Returns a model, ready to be solved.