I have quite experience with Yalmip, cvxpy, casadi, GAMS, etc and I am now thinking about moving towards Julia and JuMP. I have an important question for me, that I could not find in the documentation where I just dived in a bit.
After initializing a model of a nonlinear program, e.g. with ipopt as solver, is it possible to define PSDcone() constraints for that model? As far as I know, only in Yalmip it is possible to do something similar (but with the big disadvantage of interfacing through Matlab…).
I was aware of the type of the constraints in JuMP, but I wanted to make sure if I can define those constraints also in a nonlinear program model, and not only in a model of a conic optimization problem. As far as I understand, it is possible, right?
I think it is possible, but if it is not a conic problem then you will need a generic nonlinear solver, and I’m not sure how well such constraints can be exploited then.
Do you know some other way to do that? With SCS, the code is running. I want to use Ipopt for including nonlinear constraints later, along with PSDCone constraints
Ipopt does not support PSD constraints, and there is no simple work-around.
What nonlinear constraints do you intend to add? If they are convex, then rather than trying to model PSD with Ipopt, it might be simpler to convert the problem you are trying to solve to a conic optimization problem so you can solve it with a conic solver.
A workaround in the absence of native handling by the solver is to reformulate your problem to implicitly satisfy the PSD constraint, e.g. by replacing every instance of X which needs to be PSD with L \cdot L^T where L is now your lower triangular decision variable. It is also common to constrain the diagonal of L to be positive to avoid symmetries which can also be achieved with a re-parameterisation using the exp function. This variable transformation is very popular in MCMC sampling and statistical software.
Thanks for the answer! Sadly, the other constraints are nonconvex (polynomial equality constraints). Maybe, a possibility is to rephrase the PSD constraint manually to some (convex) constraint to parse it to ipopt? It seems to me that it has to be possible, but I cannot figure out how.
Thank you, that is very helpful! Didn’t know about Nonconvex.jl. The reformulation you mentioned does work only for pure PSD constraint, right? For example X is PSD. But what about a Lyapunov equation, e.g. A’*P + PA is PSD?