Here’s how you might write this problem in CVX:
cvx_begin
variable z(m)
maximize(log_det(A*diag(z)*A'+Siginv))
subject to
0<=z<=1
sum(z)==k
cvx_end
I tried this with m=4000
, k=3
, n=10
, Siginv=eye(n)
, and A=randn(n,m)
. It took less than 15 seconds to run. Your problem can be solved more efficiently by replacing the log_det
with det_rootn
:
cvx_begin
variable z(m)
maximize(det_rootn(A*diag(z)*A'+Siginv))
subject to
0<=z<=1
sum(z)==k
cvx_end
This takes under 5 seconds on my computer. See mcg’s post on this trick here).