| 
									
										
										
										
											2007-05-24 15:11:46 +00:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2007-11-07 09:35:53 +00:00
										 |  |  | cd ~/Yap/CLPBN/FullBNT-1.0.4 | 
					
						
							|  |  |  | addpath(genpathKPM(pwd)) | 
					
						
							| 
									
										
										
										
											2007-05-24 15:11:46 +00:00
										 |  |  | N = 4;  | 
					
						
							| 
									
										
										
										
											2007-11-07 09:35:53 +00:00
										 |  |  | dag = false(N,N); | 
					
						
							| 
									
										
										
										
											2007-05-24 15:11:46 +00:00
										 |  |  | C = 1; S = 2; R = 3; W = 4; | 
					
						
							|  |  |  | dag(C,[R S]) = 1; | 
					
						
							|  |  |  | dag(R,W) = 1; | 
					
						
							|  |  |  | dag(S,W)=1; | 
					
						
							|  |  |  | discrete_nodes = 1:N; | 
					
						
							|  |  |  | node_sizes = 2*ones(1,N);  | 
					
						
							|  |  |  | bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes); | 
					
						
							|  |  |  | bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]); | 
					
						
							|  |  |  | bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]); | 
					
						
							|  |  |  | bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]); | 
					
						
							|  |  |  | bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]); | 
					
						
							|  |  |  | engine = jtree_inf_engine(bnet); | 
					
						
							|  |  |  | evidence = cell(1,N); | 
					
						
							|  |  |  | evidence{W} = 2; | 
					
						
							|  |  |  | [engine, loglik] = enter_evidence(engine, evidence); | 
					
						
							|  |  |  | marg = marginal_nodes(engine, S); | 
					
						
							|  |  |  | marg.T | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- ensure_loaded(library(matlab)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- yap_flag(write_strings, on). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % syntactic sugar for matlab_call. | 
					
						
							|  |  |  | :- op(800,yfx,<--). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | G <-- Y :- | 
					
						
							|  |  |  | 	matlab_call(Y,G). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | do(Out,Out2) :- | 
					
						
							|  |  |  | 	init_bnt, | 
					
						
							|  |  |  | 	N = 4,  | 
					
						
							|  |  |  | 	C = 1, S = 2, R = 3, W = 4, | 
					
						
							|  |  |  | 	mkdag(N,[C-R,C-S,R-W,S-W]), | 
					
						
							|  |  |  | 	matlab_sequence(1,N,discrete_nodes), | 
					
						
							|  |  |  | 	mk2s(N,L), % domain has size 2 | 
					
						
							|  |  |  | 	matlab_matrix(1,N,L,node_sizes), | 
					
						
							|  |  |  | 	bnet <-- mk_bnet(dag, node_sizes, \discrete, discrete_nodes), | 
					
						
							|  |  |  | 	mkcpt(bnet,W,[1, 0.1, 0.1, 0.01, 0, 0.9, 0.9, 0.99]), | 
					
						
							|  |  |  | 	mkcpt(bnet,C,[0.5, 0.5]), | 
					
						
							|  |  |  | 	mkcpt(bnet,R,[0.8, 0.2, 0.2, 0.8]), | 
					
						
							|  |  |  | 	mkcpt(bnet,S,[0.5, 0.9, 0.5, 0.1]), | 
					
						
							|  |  |  | 	engine <-- jtree_inf_engine(bnet), | 
					
						
							|  |  |  | 	mkevidence(N,[W-2]), | 
					
						
							|  |  |  | 	marg <-- marginal_nodes(engine, S), | 
					
						
							|  |  |  | 	matlab_get_variable( marg.'T', Out), | 
					
						
							|  |  |  | 	add_evidence([R-2]), | 
					
						
							|  |  |  | 	marg <-- marginal_nodes(engine, S), | 
					
						
							|  |  |  | 	matlab_get_variable( marg.'T', Out2). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | init_bnt :- | 
					
						
							|  |  |  | 	matlab_on, !. | 
					
						
							|  |  |  | init_bnt :- | 
					
						
							|  |  |  | 	getcwd(D), | 
					
						
							| 
									
										
										
										
											2008-03-06 07:37:56 +00:00
										 |  |  | 	cd('~/Yap/CLPBN/FullBNT/BNT'), | 
					
						
							| 
									
										
										
										
											2007-05-24 15:11:46 +00:00
										 |  |  | 	start_matlab('matlab -nojvm -nosplash'), | 
					
						
							| 
									
										
										
										
											2008-03-06 07:37:56 +00:00
										 |  |  | 	matlab_eval_string("add_BNT_to_path",_), | 
					
						
							| 
									
										
										
										
											2007-05-24 15:11:46 +00:00
										 |  |  | 	cd(D). | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | mk2s(0, []) :- !. | 
					
						
							|  |  |  | mk2s(I, [2|L]) :- | 
					
						
							|  |  |  | 	I0 is I-1, | 
					
						
							|  |  |  | 	mk2s(I0, L). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkdag(N,Els) :- | 
					
						
							|  |  |  | 	Tot is N*N, | 
					
						
							|  |  |  | 	functor(Dag,dag,Tot), | 
					
						
							|  |  |  | 	add_els(Els,N,Dag), | 
					
						
							|  |  |  | 	Dag=..[_|L], | 
					
						
							|  |  |  | 	addzeros(L), | 
					
						
							|  |  |  | 	matlab_matrix(N,N,L,dag). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | add_els([],_,_). | 
					
						
							|  |  |  | add_els([X-Y|Els],N,Dag) :- | 
					
						
							|  |  |  | 	Pos is (X-1)*N+Y, | 
					
						
							|  |  |  | 	arg(Pos,Dag,1), | 
					
						
							|  |  |  | 	add_els(Els,N,Dag). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | addzeros([]). | 
					
						
							|  |  |  | addzeros([0|L]) :- !, | 
					
						
							|  |  |  | 	addzeros(L). | 
					
						
							|  |  |  | addzeros([1|L]) :- | 
					
						
							|  |  |  | 	addzeros(L). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkcpt(BayesNet, V, Tab) :- | 
					
						
							|  |  |  | 	(BayesNet.'CPD'({V})) <-- tabular_CPD(BayesNet,V,Tab). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkevidence(N,L) :- | 
					
						
							|  |  |  | 	mkeventries(L,LN), | 
					
						
							|  |  |  | 	matlab_initialized_cells( 1, N, LN, evidence), | 
					
						
							|  |  |  | 	[engine, loglik] <-- enter_evidence(engine, evidence). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkeventries([],[]). | 
					
						
							|  |  |  | mkeventries([A-V|L],[ev(1,A,V)|LN]) :- | 
					
						
							|  |  |  | 	mkeventries(L,LN). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | add_evidence(L) :- | 
					
						
							|  |  |  | 	add_to_evidence(L), | 
					
						
							|  |  |  | 	[engine, loglik] <-- enter_evidence(engine, evidence). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | add_to_evidence([]). | 
					
						
							|  |  |  | add_to_evidence([Pos-Val|L]) :- | 
					
						
							|  |  |  | 	matlab_item1(evidence,Pos,Val), | 
					
						
							|  |  |  | 	add_to_evidence(L). | 
					
						
							|  |  |  | 	 |