# Is there a fast solver for log optimization function?

Suppose \mathbf{A} and \mathbf{B} are N\times N postive semidefinite matrices

The following optimization problem is convex:

\mathbf{X}=\underset{\mathbf{X}}{\arg\max}\; \mathrm{log}\left ( \mathrm{Tr}\left ( \mathbf{AX} \right ) \right )- \mathrm{Tr}\left ( \mathbf{BX} \right )

\mathrm{s.t.} \; \mathrm{Tr}\left(\mathbf{X}\right)=1,

\; \; \; \; \; \;\mathbf{X}\succeq0

The problem can be solved by the CVX tool, but I get this warning:

CVX Warning:
Models involving “log” or other functions in the log, exp, and entropy
family are solved using an experimental successive approximation method.
This method is slower and less reliable than the method CVX employs for
other models. Please see the section of the user’s guide entitled
The successive approximation method
for more details about the approach, and for instructions on how to
suppress this warning message in the future.

• I read the advanced section in the CVX manual, and I know that the successive approximation method is slow. However, the log function can not be eliminated from the problem.

My Question is: Can I use/add another solver to make the solution faster ?
because the dimensions in my problem are very large.

The beta version of CVX 3.0 has built-in support for SCS. You are responsible for installing SCS yourself and getting it into your MATLAB path; but once you do, you can run cvx_setup and SCS will be connected to CVX.

This solver has built-in support for the exponential cone, so it would enable you to solve problems like this. But note that as a first-order solver, it may take far more iterations to converge to an accurate solution. For some problems, it’s faster, but for other problems, it takes so many iterations to converge that it is slower.

Thanks mcg,
I have downloaded cvx 3.0b and scs, when I install cvx then I run cvx_install_scs.m, I get this error message

No supported SDK or compiler was found
on this computer.

For a list of supported compilers, see

http://www.mathworks.com/support/compilers/R2013a/win64.html
Error using mex (line 206)

Unable to complete successfully.

Error in compile_direct (line 11)

eval(cmd);

Error in make_scs (line 26)

compile_direct(flags, common_scs);

Error in cvx_install_scs (line 2)

make_scs

Can you help me?
I am running windows 8.1 64bit and MATLAB 2013a

No, I cannot, I’m sorry. But you should not run “cvx_install_scs.m”. Just install SCS as if you were using it without CVX. Once it is working there, run “cvx_setup”.

Hi Yramr
I have exactly the same problem as yours. Did you find a way to solve this problem?

You need to compile (make) SCS before you can use it. So you need a compiler compatible with your version of MATLAB. Without such a compiler, make will fail. Once you have successfully run make, thereby creating a MEX file (one each for direct and indirect), add it to your MATLAB path, then run cvx_setup.