50 lines
808 B
Prolog
50 lines
808 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).
|
|
|
|
:- dynamic id/1.
|
|
|
|
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).
|
|
|
|
timed_main :-
|
|
statistics(runtime, _),
|
|
main(Lik),
|
|
statistics(runtime, [T,_]),
|
|
format('Took ~d msec and Lik ~3f~n',[T,Lik]).
|
|
|
|
main(Lik) :-
|
|
findall(X,scan_data(X),L),
|
|
em(L,0.01,10,_,Lik).
|
|
|
|
scan_data(I:[wet_grass(W),sprinkler(S),rain(R),cloudy(C)]) :-
|
|
data(W, S, R, C),
|
|
new_id(I).
|
|
|
|
new_id(I) :-
|
|
retract(id(I)),
|
|
I1 is I+1,
|
|
assert(id(I1)).
|
|
|
|
id(0).
|
|
|