Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 4 additions & 19 deletions advancedUse/experiment/POPrandom/solvePOParrow.m
Original file line number Diff line number Diff line change
Expand Up @@ -54,29 +54,14 @@ function solvePOParrow(printFileName,degree,a,b,c,l,isBin,addComplement,solver)
% end

if nargin == 4
solver = 'BP';
solver = 'BP';
end

% [objPoly, I01, Icomp]=genPOParrow2(d,a,b,c,l,isBin,addComplement)
[objPoly, I01, Icomp] = genPOParrow(degree,a,b,c,l,isBin,addComplement);

params.solver = solver;
params.newBPswitch = false;

%% to DNN
eqPolySys = [];
params.relaxOrder = ceil(degree / 2);
[Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] ...
= BBPOPtoCOP(objPoly, eqPolySys, I01, Icomp, params);
[objPoly, I01, Icomp] = genPOParrow(degree,a,b,c,l,isBin,addComplement);

[sol, info, params] = solvePOPpipeline(objPoly, I01, Icomp, degree, solver);

%% solve
params.UbdIX = UbdIX;
params.UbdObjVal = evalPoly(objPoly, zeros(n, 1));
params.delta1 = 1.0e-4;
params.delta2 = 0;
params.delta = 0;
[sol, info] = solveCOP(Q0vec, H0vec, H1vec, PSDcone, polyCone, params);

%% print
filename = printFileName;
fid = fopen(filename, 'a');
Expand Down
36 changes: 5 additions & 31 deletions advancedUse/experiment/POPrandom/solvePOPchordal.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,40 +13,14 @@ function solvePOPchordal(printFileName,degree,nDim,radiorange,isBin,addComplemen
% addComplement : 1 for adding random complementarity constraints
% solver : 'BP, 'sdpnalplus', 'sedumi'

[objPoly, I01, Icomp] = genPOPchordal(degree,nDim,radiorange,isBin,addComplement);

% Icomp = [];
% if addComplement
% Icomp = complementarityConstraint(2, 2, clique, randSeed);
% end

if nargin == 4
solver = 'BP';
solver = 'BP';
end

if strcmp(solver, 'newBP')
params.solver = 'BP';
params.newBPswitch = true;
else
params.solver = solver;
params.newBPswitch = false;
end

%% to DNN
eqPolySys = [];
params.relaxOrder = ceil(degree / 2);
[Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] ...
= BBPOPtoCOP(objPoly, eqPolySys, I01, Icomp, params);

%% solve
params.UbdIX = UbdIX;
params.UbdObjVal = evalPoly(objPoly, zeros(nDim, 1));
params.delta1 = 1.0e-4;
params.delta2 = 0;
params.delta = 0;
[sol, info] = solveCOP(Q0vec, H0vec, H1vec, PSDcone, polyCone, params);


[objPoly, I01, Icomp] = genPOPchordal(degree,nDim,radiorange,isBin,addComplement);

[sol, info, params] = solvePOPpipeline(objPoly, I01, Icomp, degree, solver);

%% print
fid = fopen(printFileName, 'a');
% fprintf(fid,'degree,n,rRange,isBin,addComp,rOder,solver,LBv,sec,iter(APGR),termcode,iterBP\n');
Expand Down
32 changes: 5 additions & 27 deletions advancedUse/experiment/POPrandom/solvePOPdense.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,13 @@ function solvePOPdense(printFileName,degree,nDim,isBin,addComplement,solver)
% solver : 'BP, 'sdpnalplus', 'sedumi'

if nargin == 4
solver = 'BP';
solver = 'BP';
end

[objPoly,I01,Icomp] = genPOPdense(degree,nDim,isBin,addComplement);
if strcmp(solver, 'newBP')
params.solver = 'BP';
params.newBPswitch = true;
else
params.solver = solver;
params.newBPswitch = false;
end
%% to DNN
eqPolySys = [];
params.relaxOrder = ceil(degree / 2);
[Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] ...
= BBPOPtoCOP(objPoly, eqPolySys, I01, Icomp, params);

%% solve
params.delta1 = 1.0e-4;
params.delta2 = 0;
params.delta = 0;
params.UbdIX = UbdIX;
params.UbdObjVal = evalPoly(objPoly, zeros(nDim, 1));
% params.deltaRelBP = 1.0e-4;
% params.deltaAbsBP = 0;
% params.deltaDifRelBP = 0;
[sol, info] = solveCOP(Q0vec, H0vec, H1vec, PSDcone, polyCone, params);


[objPoly, I01, Icomp] = genPOPdense(degree,nDim,isBin,addComplement);

[sol, info, params] = solvePOPpipeline(objPoly, I01, Icomp, degree, solver);

%% print
fid = fopen(printFileName, 'a');
% fprintf(fid,'degree,n,isBin,addComp,rOrder,solver,LBv,sec,iter,termcode\n');
Expand Down
21 changes: 21 additions & 0 deletions advancedUse/experiment/POPrandom/solvePOPpipeline.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
function [sol, info, params] = solvePOPpipeline(objPoly, I01, Icomp, degree, solver)
%SOLVEPOPPIPELINE Shared solver pipeline: BBPOPtoCOP -> solveCOP.
% Common logic extracted from solvePOParrow, solvePOPchordal, solvePOPdense.
if strcmp(solver, 'newBP')
params.solver = 'BP';
params.newBPswitch = true;
else
params.solver = solver;
params.newBPswitch = false;
end
eqPolySys = [];
params.relaxOrder = ceil(degree / 2);
[Q0vec, H0vec, H1vec, PSDcone, polyCone, UbdIX] ...
= BBPOPtoCOP(objPoly, eqPolySys, I01, Icomp, params);
params.UbdIX = UbdIX;
params.UbdObjVal = evalPoly(objPoly, zeros(objPoly.dimVar, 1));
params.delta1 = 1.0e-4;
params.delta2 = 0;
params.delta = 0;
[sol, info] = solveCOP(Q0vec, H0vec, H1vec, PSDcone, polyCone, params);
end
9 changes: 1 addition & 8 deletions instances/BIQ/biqread.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,7 @@

function [Q] = biqread(instance)

fid = fopen(instance,'r');
if (fid == -1); error('file cannot be opened'); end

[datavec,count] = fscanf(fid,'%c');
fclose(fid);
linefeeds = findstr(datavec,char(10));
datavec(linefeeds) = blanks(length(linefeeds));
datavec = sscanf(datavec,'%f');
datavec = readInstanceFile(instance);

n = datavec(1); nz = datavec(2);
tmp = datavec(3:end);
Expand Down
40 changes: 40 additions & 0 deletions instances/POPrandom/findChordalCliques.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
function [clique, R] = findChordalCliques(adjMat)
% FINDCHORDALCLIQUES Find maximal cliques via chordal extension (Cholesky).
% Input:
% adjMat : symmetric adjacency matrix of a sparse graph
% Output:
% clique.Set : logical matrix; each row is a maximal clique (0-1 encoding)
% clique.NoC : number of maximal cliques
% clique.maxC : maximum clique size
% clique.minC : minimum clique size
% R : upper triangular adjacency of the chordal extension

nDim = size(adjMat,1);
adjMat = spones(adjMat);
adjMat = adjMat + adjMat';
adjMat = adjMat + 10*nDim*speye(nDim);

I = symamd(adjMat);
[R, p] = chol(adjMat(I,I));
if (p > 0)
error('Correlative sparsity matrix is not positive definite.');
end

R = spones(R);
[~, orig_idx] = sort(I);
remainIdx = 1;
for i = 2:nDim
checkSet = R(i,i:nDim);
noOfone = length(find(checkSet));
cliqueResult = R(1:i-1,i:nDim)*checkSet';
yesno = find(cliqueResult == noOfone);
if ~any(yesno)
remainIdx = [remainIdx; i];
end
end
clique.Set = logical(R(remainIdx, orig_idx));
clique.NoC = size(clique.Set,1);
sumClique = sum(clique.Set,2);
clique.maxC = max(sumClique);
clique.minC = min(sumClique);
end
Loading