SPECIAL NOTE. It is imperative that the environment variable LOQODIR be set according to the instructions you received at the time of downloading loqo. If it is not, then invoking loqo from within MATLAB will result in matlab exiting with the possible loss of many hours of unsaved work. You should test the loqo executable program using an MPS or AMPL input file to make sure it is installed correctly before attempting this MATLAB interface.
First, you need to download five files:
containing gateway interface code allowing one to solve SOCP's using LOQO from within MATLAB. After downloading them, typemex -O loqosoclp.c printf.c -I$LOQODIR $LOQODIR/libloqo.a
to create an executable that MATLAB can invoke when loqo is called from within MATLAB. Here, $LOQODIR refers to the directory where the LOQO subroutine library, libloqo.a, is located.
NOTE FOR PC USERS. On PCs, libloqo.a is called loqo.lib. The library loqo.lib was compiled using gcc under Mingw. Therefore, to make the Loqo/Matlab interface, you will need to install Mingw (go to http://www.mingw.org/ for instructions) on your machine. Then, you will need to install gnumex (go to http://gnumex.sourceforge.net/ for instructions). Once you have your matlab system set up and correctly compiling simple test programs, loqolpqp.c is compiled by putting loqo.lib into the same folder with loqolpqp.c and typing
mex loqosoclp.c printf.c loqo.lib
from within Matlab at the Matlab prompt.
After the compilation is successful, to solve a problem
Minimize c^T x + 1/2 x^T H x
Subject to:
Ax = b
Ax <= b
||A_ix+b_i|| <= c_i^Tx+d_i, i=1,...,nsocp
l <= x <= u,
use the following syntax:
[x,lambda_lin,lambda_cone] = loqosoclp(C,H,c,A,b,l,u,x0,neqcstr,hookfn,loqo_options);
Here, H and A must be sparse matrices, x0 is an initial guess for the primal solution, neqcstr denotes the number of constraints that are in fact equality constraints (these are assumed to come first), hookfn is an optional string containing the name of a function that can be invoked at each iteration with the current solution (primarily, for the purpose of algorithm animation), and loqo_options is an optional string containing the solver options for LOQO. C is a cell array, consisting of a matrix for each SOCP constraint (there are nsocp of them). Each C_i looks like
|b_i A_i |
|d_i c_i^T|
and must be a sparse matrix.
The output vector x denotes the solution vector, and lambda denotes the vector of dual variables (aka Lagrange multipliers).
Reasonable defaults are assumed for missing fields. In particular, C defaults to the cell-array consisting of one sparse zero matrix (of appropriate dimension), H defaults to the sparse zero matrix (of appropriate dimension), l defaults to the minus-infinity vector, u defaults to the infinity vector. and x0 defaults to a vector of ones.
Give it a try. Comments welcome.