Does the cvxpy replace the max function, which is convex, by MIP formulation under the hood when shows up in the constraints (for example, $\max(x,y)\le z$) or in the objective function? In gurobipy, we need to introduce a new variable and new constraint: $L=\max(x,y)$ and $L\le z$
Then gurobipy converts it to MIP.
import gurobipy as gp m=gp.Model() x=m.addvar(vtype='C') y=m.addvar(vtype='C') z=m.addvar(vtype='C') L=m.addvar(vtype='C') # new variable m.addConstr(L=gp.max_(x,y)) # new constraint m.addaddConstr(L<=z)
L=gp.max_(x,y) is nonconvex, and gurobipy converts it to MIP convex under the hood.
$\max(x,y)\le z$ can b formulated in cvxpy as follows:
import cvxpy as cp Cons=[cp.max(x,y)<=z]
Does cvxpy do something similar to gurobipy?
Thanks, @xd y! My problem was the following: $$g+z\ge\max(x,y)+L$$ Does that mean it can be rewritten as $g+z\ge x+L$, $g+z\ge y+L$?