-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbb.m
55 lines (46 loc) · 1.18 KB
/
bb.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
% Main function, calculates the minimum solution made of integers
function [ret1, ret2, ret3] = bb(f, A, B, Aeq, Beq, lb, ub)
global num_variables;
flag_int = 1;
[X, v] = linprog(f, A, B, Aeq, Beq, lb, ub);
for i = 1:num_variables
% If not integer
if ((!isnan(v)) && (!~mod(X(i),1)))
flag_int = 0;
var_val = floor(X(i));
var_index = i;
endif;
endfor;
% If all elements integer
if (flag_int == 1)
if (isnan(v))
ret1 = NA;
ret2 = 1;
ret3 = inf;
else
ret1 = X;
ret2 = 1;
ret3 = v;
update_graph(X, A, B, v);
endif
else
lb1 = lb;
lb2 = lb;
ub1 = ub;
ub2 = ub;
lb1(var_index) = var_val+1;
ub2(var_index) = var_val;
[X1, i1, v1] = bb(f, A, B, Aeq, Beq, lb1, ub1);
[X2, i2, v2] = bb(f, A, B, Aeq, Beq, lb2, ub2);
if (v1 < v2)
ret1 = X1;
ret2 = i1+i2;
ret3 = v1;
else
ret1 = X2;
ret2 = i1+i2;
ret3 = v2;
endif;
endif;
return;
endfunction;