35 lines
		
	
	
		
			605 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			605 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
/* Learn distribution for a sprinkler database. */
 | 
						|
 | 
						|
:- ['../sprinkler.pfl'].
 | 
						|
 | 
						|
:- use_module(library(clpbn/learning/em)).
 | 
						|
 | 
						|
%:- set_em_solver(ve).
 | 
						|
%:- set_em_solver(hve).
 | 
						|
%:- set_em_solver(bdd).
 | 
						|
%:- set_em_solver(bp).
 | 
						|
%:- set_em_solver(cbp).
 | 
						|
 | 
						|
data(t,t,t,t).
 | 
						|
data(_,t,_,t).
 | 
						|
data(t,t,f,f).
 | 
						|
data(t,t,f,t).
 | 
						|
data(t,_,_,t).
 | 
						|
data(t,f,t,t).
 | 
						|
data(t,t,f,t).
 | 
						|
data(t,_,f,f).
 | 
						|
data(t,t,f,f).
 | 
						|
data(f,f,t,t).
 | 
						|
data(t,t,_,f).
 | 
						|
data(t,f,f,t).
 | 
						|
data(t,f,t,t).
 | 
						|
 | 
						|
main :-
 | 
						|
	findall(X, scan_data(X), L),
 | 
						|
	em(L, 0.01, 10, CPTs, Lik),
 | 
						|
	writeln(Lik:CPTs).
 | 
						|
 | 
						|
scan_data([cloudy(C),sprinkler(S),rain(R),wet_grass(W)]) :-
 | 
						|
	data(C, S, R, W).
 | 
						|
 |