@Erling When log_det
is reformulated for CVXQUAD, CVX sends SOCP to the solver (Mosek), not SDP.
+++++++++++++++++++++++++
+++++++++++++++++++++++++
Replace
log_det(cvx_expression) >= t
where cvx_expression
is an n by n matrix
with
variable u
-rel_entr(1,u) >= t/n
det_rootn(cvx_expression) >= u
+++++
Replace
log_det(cvx_expression)
, where cvx_expression
is an n by n matrix
with
z
and add
variables u z % this line must be before u or z are used
-rel_entr(1,u) >= z/n
det_rootn(cvx_expression) >= u
+++++
Note: A simpler to write reformulation (NOT RECOMMENDED) can be used:
Replace
log_det(cvx_expression)
with
-quantum_rel_entr(eye(size(cvx_expression)),cvx_expression)
However, as discussed below, use of quantum_rel_entr
is computationally demanding. Formulation using quantum_rel_entr
consumes much more computational resources than that used by preceding formulations.
+++++++++++++++++++++++++
+++++++++++++++++++++++++
CVXQUAD actually formulates 2 by 2 LMIs for the above (scalar) cases, and these are sent to the solver (Mosek) by CVX as SOCPs. As described in my linked write up, CVXQUAD only sends LMIs (SDPs) to the solver when Quantum (Matrix) Entropy and Matrix Logarithm related functions, such as quantum_rel_entr,
are used.