69 lines
2.0 KiB
Matlab
Executable File
69 lines
2.0 KiB
Matlab
Executable File
%%*******************************************************
|
|
%% thetaproblem: Lovasz theta number.
|
|
%%
|
|
%% (primal) min Tr C*X
|
|
%% s.t. X(i,j) = 0 if (i,j) is an edge of G,
|
|
%% Tr(X) = 1.
|
|
%% b = e1,
|
|
%% C = -ones(n),
|
|
%% A1 = eye(n), Ak = ei*ej' + ej*ei', if (i,j) is an edge.
|
|
%%-------------------------------------------------------
|
|
%%
|
|
%% [blk,Avec,C,b,X0,y0,Z0,objval,X] = thetaproblem(G,feas,solve);
|
|
%%
|
|
%% G: adjacency matrix of a graph.
|
|
%% feas = 1 if want feasible starting point
|
|
%% = 0 if otherwise.
|
|
%% solve = 0 just to initialize
|
|
%% = 1 if want to solve the problem.
|
|
%%
|
|
%% See graph.m --- generate random adjacency matrix.
|
|
%%*****************************************************************
|
|
%% SDPT3: version 4.0
|
|
%% Copyright (c) 1997 by
|
|
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
|
|
%% Last Modified: 16 Sep 2004
|
|
%%*****************************************************************
|
|
|
|
function [blk,Avec,C,b,X0,y0,Z0,objval,X] = thetaproblem(G,feas,solve);
|
|
|
|
if (nargin < 2); feas = 0; end
|
|
if (nargin < 3); solve = 0; end
|
|
if isempty(feas); feas = 0; end
|
|
if ~isreal(G); error('only real G allowed'); end;
|
|
|
|
n = length(G);
|
|
m = sum(sum(triu(G,1))) + 1;
|
|
e1 = [1 zeros(1,m-1)]';
|
|
C{1} = -ones(n);
|
|
b = e1;
|
|
blk{1,1} = 's'; blk{1,2} = n;
|
|
|
|
A = cell(1,m); A{1} = speye(n);
|
|
cnt = 2;
|
|
for i = 1:n
|
|
idx = find(G(i,i+1:n));
|
|
idx = idx+i; %% adjust index.
|
|
for j = 1:length(idx)
|
|
A{1,cnt} = sparse([i idx(j)],[idx(j) i],[1 1],n,n);
|
|
cnt = cnt + 1;
|
|
end
|
|
end
|
|
|
|
Avec = svec(blk,A,ones(size(blk,1),1));
|
|
if (feas == 1)
|
|
y0 = -2*n*e1;
|
|
Z0 = 2*n*eye(n)+C{1};
|
|
X0 = eye(n)/n;
|
|
elseif (feas == 0);
|
|
[X0,y0,Z0] = infeaspt(blk,Avec,C,b);
|
|
end
|
|
if (solve)
|
|
[obj,X,y,Z] = sqlp(blk,Avec,C,b,[],X0,y0,Z0);
|
|
objval = obj(1);
|
|
else
|
|
objval = []; X = [];
|
|
end
|
|
%%=======================================================
|
|
|