55 lines
1.7 KiB
Mathematica
55 lines
1.7 KiB
Mathematica
|
|
%%*******************************************************
|
||
|
|
%% max_kcut: MAX k-CUT problem.
|
||
|
|
%%
|
||
|
|
%% (primal problem) min <C,X>
|
||
|
|
%% s.t. diag(X) = b
|
||
|
|
%% Xij >= -1/(K-1) for all i ~= j
|
||
|
|
%% X positive semidefinite
|
||
|
|
%%
|
||
|
|
%% Here, b = e, C = -(1-1/K)/2* (diag(B*e)-B).
|
||
|
|
%%-------------------------------------------------------
|
||
|
|
%% [blk,Avec,C,b,objval,X] = max_kcut(B,K,solve);
|
||
|
|
%%
|
||
|
|
%% B: weighted adjacency matrix of a graph.
|
||
|
|
%% 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,objval,X] = max_kcut(B,K,solve);
|
||
|
|
|
||
|
|
if (nargin < 3); solve = 0; end;
|
||
|
|
if ~isreal(B); error('only real B allowed'); end;
|
||
|
|
|
||
|
|
n = length(B); e = ones(n,1);
|
||
|
|
n2 = n*(n-1)/2;
|
||
|
|
C{1} = -(1-1/K)/2*(spdiags(B*e,0,n,n)-B);
|
||
|
|
b = e;
|
||
|
|
blk{1,1} = 's'; blk{1,2} = n;
|
||
|
|
blk{2,1} = 'l'; blk{2,2} = n2;
|
||
|
|
|
||
|
|
A = cell(1,n);
|
||
|
|
for j = 1:n; A{j} = sparse(j,j,1,n,n); end;
|
||
|
|
Avec = svec(blk(1,:),A,1);
|
||
|
|
tmp = speye(n*(n+1)/2);
|
||
|
|
idx = cumsum([1:n]);
|
||
|
|
Atmp = tmp(:,setdiff([1:n*(n+1)/2],idx));
|
||
|
|
Avec{1,1} = [Avec{1,1}, Atmp/sqrt(2)];
|
||
|
|
Avec{2,1} = [sparse(n2,n), -speye(n2,n2)];
|
||
|
|
b = [b; -1/(K-1)*ones(n2,1)];
|
||
|
|
C{2,1} = zeros(n2,1);
|
||
|
|
%%
|
||
|
|
if (solve)
|
||
|
|
[obj,X,y,Z] = sqlp(blk,Avec,C,b);
|
||
|
|
objval = obj(1);
|
||
|
|
else
|
||
|
|
objval = []; X = [];
|
||
|
|
end
|
||
|
|
%%*******************************************************
|