Convex.jl icon indicating copy to clipboard operation
Convex.jl copied to clipboard

Support for det(P)^(1/n)

Open dalekj opened this issue 8 years ago • 3 comments

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?

dalekj avatar Oct 27 '17 18:10 dalekj

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.

blegat avatar Oct 27 '17 21:10 blegat

There was an old issue which may be of interest: https://github.com/JuliaOpt/Convex.jl/issues/132

chriscoey avatar Oct 27 '17 21:10 chriscoey

@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.

dalekj avatar Oct 30 '17 22:10 dalekj

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.

odow avatar Apr 23 '24 07:04 odow