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
|
% influence diagram with no loops
%
% rv dec
% \ /
% utility
N = 3;
dag = zeros(N);
X = 1; D = 2; U = 3;
dag([X D], U)=1;
ns = zeros(1,N);
ns(X) = 2; ns(D) = 2; ns(U) = 1;
limid = mk_limid(dag, ns, 'chance', X, 'decision', D, 'utility', U);
% use random params
limid.CPD{X} = tabular_CPD(limid, X);
limid.CPD{D} = tabular_decision_node(limid, D);
limid.CPD{U} = tabular_utility_node(limid, U);
%fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt';
global BNT_HOME
fname = sprintf('%s/loopybel.txt', BNT_HOME);
engines = {};
engines{end+1} = global_joint_inf_engine(limid);
engines{end+1} = jtree_limid_inf_engine(limid);
%engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N, 'filename', fname);
engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N);
exact = [1 2];
approx = 3;
E = length(engines);
strategy = cell(1, E);
MEU = zeros(1, E);
for e=1:E
[strategy{e}, MEU(e)] = solve_limid(engines{e});
MEU
end
MEU
for e=exact(:)'
assert(approxeq(strategy{exact(1)}{D}, strategy{e}{D}))
end
for e=approx(:)'
approxeq(strategy{exact(1)}{D}, strategy{e}{D})
end
|