[37] | 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 |
---|