1 | function vars = decide_branch_variables(p) |
---|
2 | |
---|
3 | if size(p.bilinears,1)==0 |
---|
4 | if p.K.s(1)>0 |
---|
5 | if any(p.K.s>p.K.rank) |
---|
6 | vars = p.linears; |
---|
7 | return |
---|
8 | end |
---|
9 | end |
---|
10 | end |
---|
11 | |
---|
12 | if p.options.bmibnb.lowrank==0 |
---|
13 | nonlinear = find(~(sum(p.monomtable~=0,2)==1 & sum(p.monomtable,2)==1)); |
---|
14 | vars = find(sum(abs(full(p.monomtable(nonlinear,:))),1)); |
---|
15 | if ~isempty(p.evalVariables) |
---|
16 | temp = []; |
---|
17 | for i = 1:length(p.evalMap) |
---|
18 | temp = [temp p.evalMap{i}.variableIndex]; |
---|
19 | end |
---|
20 | vars = union(vars,temp); |
---|
21 | end |
---|
22 | else |
---|
23 | % Try to find a bi-partite structure |
---|
24 | pool1 = p.bilinears(1,2); |
---|
25 | pool2 = p.bilinears(1,3); |
---|
26 | |
---|
27 | for i = 2:size(p.bilinears,1) |
---|
28 | v1 = p.bilinears(i,2); |
---|
29 | v2 = p.bilinears(i,3); |
---|
30 | if v1==v2 |
---|
31 | % We are fucked |
---|
32 | pool1 = [pool1 v1]; |
---|
33 | pool2 = [pool2 v2]; |
---|
34 | else |
---|
35 | if ismember(v1,pool1) |
---|
36 | pool2 = [pool2 v2]; |
---|
37 | elseif ismember(v1,pool2) |
---|
38 | pool1 = [pool1 v2]; |
---|
39 | elseif ismember(v2,pool1) |
---|
40 | pool2 = [pool2 v1]; |
---|
41 | elseif ismember(v2,pool2) |
---|
42 | pool1 = [pool1 v1]; |
---|
43 | else |
---|
44 | % No member yet |
---|
45 | pool1 = [pool1 v1]; |
---|
46 | pool2 = [pool2 v2]; |
---|
47 | end |
---|
48 | end |
---|
49 | end |
---|
50 | pool1 = unique(pool1); |
---|
51 | pool2 = unique(pool2); |
---|
52 | if isempty(intersect(pool1,pool2)) |
---|
53 | if length(pool1)<=length(pool2) |
---|
54 | vars = pool1; |
---|
55 | else |
---|
56 | vars = pool2; |
---|
57 | end |
---|
58 | else |
---|
59 | nonlinear = find(~(sum(p.monomtable~=0,2)==1 & sum(p.monomtable,2)==1)); |
---|
60 | vars = find(sum(abs(full(p.monomtable(nonlinear,:))),1)); |
---|
61 | end |
---|
62 | end |
---|