63 lines
1.7 KiB
Matlab
Executable File
63 lines
1.7 KiB
Matlab
Executable File
function vars = decide_branch_variables(p)
|
|
|
|
if size(p.bilinears,1)==0
|
|
if p.K.s(1)>0
|
|
if any(p.K.s>p.K.rank)
|
|
vars = p.linears;
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if p.options.bmibnb.lowrank==0
|
|
nonlinear = find(~(sum(p.monomtable~=0,2)==1 & sum(p.monomtable,2)==1));
|
|
vars = find(sum(abs(full(p.monomtable(nonlinear,:))),1));
|
|
if ~isempty(p.evalVariables)
|
|
temp = [];
|
|
for i = 1:length(p.evalMap)
|
|
temp = [temp p.evalMap{i}.variableIndex];
|
|
end
|
|
vars = union(vars,temp);
|
|
end
|
|
else
|
|
% Try to find a bi-partite structure
|
|
pool1 = p.bilinears(1,2);
|
|
pool2 = p.bilinears(1,3);
|
|
|
|
for i = 2:size(p.bilinears,1)
|
|
v1 = p.bilinears(i,2);
|
|
v2 = p.bilinears(i,3);
|
|
if v1==v2
|
|
% We are fucked
|
|
pool1 = [pool1 v1];
|
|
pool2 = [pool2 v2];
|
|
else
|
|
if ismember(v1,pool1)
|
|
pool2 = [pool2 v2];
|
|
elseif ismember(v1,pool2)
|
|
pool1 = [pool1 v2];
|
|
elseif ismember(v2,pool1)
|
|
pool2 = [pool2 v1];
|
|
elseif ismember(v2,pool2)
|
|
pool1 = [pool1 v1];
|
|
else
|
|
% No member yet
|
|
pool1 = [pool1 v1];
|
|
pool2 = [pool2 v2];
|
|
end
|
|
end
|
|
end
|
|
pool1 = unique(pool1);
|
|
pool2 = unique(pool2);
|
|
if isempty(intersect(pool1,pool2))
|
|
if length(pool1)<=length(pool2)
|
|
vars = pool1;
|
|
else
|
|
vars = pool2;
|
|
end
|
|
else
|
|
nonlinear = find(~(sum(p.monomtable~=0,2)==1 & sum(p.monomtable,2)==1));
|
|
vars = find(sum(abs(full(p.monomtable(nonlinear,:))),1));
|
|
end
|
|
end
|