Convex.jl
Convex.jl copied to clipboard
Support for det(P)^(1/n)
In trying to solve a problem with objective function
maximize det(P)
there are two common transformations that turn the objective into a convex objective.
The first is to convert the problem to
maximize logdet(P)
which is currently implemented and can be solved using e.g. SCS.
Another option is to instead solve
maximize det(P)^(1/n)
This is equivalent to the geometric mean of the eigenvalues of P. From what I've read, this can be modeled with semidefinite and second order cones (I don't know the details of this). This allows a lot more solvers to be used to solve this optimization problem (instead of relying on a first order method like SCS)
Would it be possible to get support for the nth root of the determinant added?
An example of implementation can be found in mosek source code in tools/examples/fusion/python/lownerjohn_ellipsoid.py with functions geometric_mean and det_rootn.
There was an old issue which may be of interest: https://github.com/JuliaOpt/Convex.jl/issues/132
@blegat , thank you for pointing me toward the mosek implementation. Using the references mentioned in the source code, I was able to put together my own implementation. If I have time, I can try to clean up my code and make it available.
Now that https://github.com/jump-dev/Convex.jl/pull/590 is merged, this issue can be resolved by adding a logdet and rootdet atom that map to GenericConstraints with MOI.LogDetConeSquare and MOI.RootDetConeSquare.