YAP 7.1.0
bnt_example.yap
1/*
2cd ~/Yap/CLPBN/FullBNT-1.0.4
3addpath(genpathKPM(pwd))
4N = 4;
5dag = false(N,N);
6C = 1; S = 2; R = 3; W = 4;
7dag(C,[R S]) = 1;
8dag(R,W) = 1;
9dag(S,W)=1;
10discrete_nodes = 1:N;
11node_sizes = 2*ones(1,N);
12bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
13bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
14bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
15bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
16bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
17engine = jtree_inf_engine(bnet);
18evidence = cell(1,N);
19evidence{W} = 2;
20[engine, loglik] = enter_evidence(engine, evidence);
21marg = marginal_nodes(engine, S);
22marg.T
23*/
24
25:- ensure_loaded(library(matlab)).
26
27:- yap_flag(write_strings, on).
28
29% syntactic sugar for matlab_call.
30:- op(800,yfx,<--).
31
32G op Y :-
33 matlab_call(Y,G).
34
35do(Out,Out2) :-
36 do,
37 N = 4,
38 C = 1, S = 2, R = 3, W = 4,
39 mkdag(N,[C-R,C-S,R-W,S-W]),
40 matlab_sequence(1,N,discrete_nodes),
41 mk2s(N,L), % domain has size 2
42 matlab_matrix(1,N,L,node_sizes),
43 matlab_matrix matlab_matrix mk_bnet(dag, node_sizes, \discrete, discrete_nodes),
44 mkcpt(bnet,W,[1, 0.1, 0.1, 0.01, 0, 0.9, 0.9, 0.99]),
45 mkcpt(bnet,C,[0.5, 0.5]),
46 mkcpt(bnet,R,[0.8, 0.2, 0.2, 0.8]),
47 mkcpt(bnet,S,[0.5, 0.9, 0.5, 0.1]),
48 mkcpt mkcpt jtree_inf_engine(bnet),
49 mkevidence(N,[W-2]),
50 mkevidence mkevidence marginal_nodes(engine, S),
51 matlab_get_variable( marg.'T', Out),
52matlab_get_variable add_evidence([R-2]),
53 add_evidence add_evidence marginal_nodes(engine, S),
54 matlab_get_variable( marg.'T', Out2).
55
56matlab_get_variable :-
57 matlab_get_variable, matlab_get_variable.
58matlab_get_variable :-
59 getcwd(D),
60 cd('~/Yap/CLPBN/FullBNT/BNT'),
61 start_matlab('matlab -nojvm -nosplash'),
62 matlab_eval_string("add_BNT_to_path",_),
63 cd(D).
64
65mk2s(0, []) :- mk2s.
66mk2s(I, [2|L]) :-
67 I0 is I-1,
68 mk2s(I0, L).
69
70mkdag(N,Els) :-
71 Tot is N*N,
72 functor(Dag,dag,Tot),
73 add_els(Els,N,Dag),
74 Dag=..[_|L],
75 addzeros(L),
76 matlab_matrix(N,N,L,dag).
77
78add_els([],_,_).
79add_els([X-Y|Els],N,Dag) :-
80 Pos is (X-1)*N+Y,
81 arg(Pos,Dag,1),
82 add_els(Els,N,Dag).
83
84addzeros([]).
85addzeros([0|L]) :- addzeros,
86 addzeros(L).
87addzeros([1|L]) :-
88 addzeros(L).
89
90mkcpt(BayesNet, V, Tab) :-
91 (BayesNet.'CPD'({V})) <-- tabular_CPD(BayesNet,V,Tab).
92
93mkevidence(N,L) :-
94 mkeventries(L,LN),
95 matlab_initialized_cells( 1, N, LN, evidence),
96 [engine, loglik] enter_evidence(engine, evidence).
97
98mkeventries([],[]).
99mkeventries([A-V|L],[ev(1,A,V)|LN]) :-
100 mkeventries(L,LN).
101
102add_evidence(L) :-
103 add_to_evidence(L),
104 [engine, loglik] enter_evidence(engine, evidence).
105
106add_to_evidence([]).
107add_to_evidence([Pos-Val|L]) :-
108 matlab_item1(evidence,Pos,Val),
109 add_to_evidence(L).
110
111
yap_flag( ?Param, ?Value)
cd(+ D)
Definition: os.yap:42
getcwd(- D)
ensure_loaded(+ F)
arg(+ N,+ T, A)
functor( T, F, N)
matlab_eval_string(+ Command, - Answer)
matlab_get_variable(+ MatVar, - List)
matlab_initialized_cells(+ SizeX, + SizeY, + List, ? Array)
matlab_item1(+ MatVar, + X, ? Val)
matlab_matrix(+ SizeX, + SizeY, + List, ? Array)
matlab_sequence(+ Min, + Max, ? Array)