new CLP(BN) files
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1913 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
69046824cd
commit
71eea67bc8
62
CLPBN/clpbn/display.yap
Normal file
62
CLPBN/clpbn/display.yap
Normal file
@ -0,0 +1,62 @@
|
||||
:- module(clpbn_display, [
|
||||
clpbn_bind_vals/3]).
|
||||
|
||||
:- use_module(library(lists),
|
||||
[
|
||||
member/2
|
||||
]).
|
||||
|
||||
:- attribute posterior/4.
|
||||
|
||||
|
||||
%
|
||||
% what is actually output
|
||||
%
|
||||
attribute_goal(V, G) :-
|
||||
get_atts(V, [posterior(Vs,Vals,Ps,AllDiffs)]),
|
||||
massage_out(Vs, Vals, Ps, G, AllDiffs, V).
|
||||
|
||||
massage_out([], Ev, _, V=Ev, _, V) :- !.
|
||||
massage_out(Vs, [D], [P], p(CEqs)=P, AllDiffs, _) :- !,
|
||||
gen_eqs(Vs,D,Eqs),
|
||||
add_alldiffs(AllDiffs,Eqs,CEqs).
|
||||
massage_out(Vs, [D|Ds], [P|Ps], (p(CEqs)=P,G) , AllDiffs, V) :-
|
||||
gen_eqs(Vs,D,Eqs),
|
||||
add_alldiffs(AllDiffs,Eqs,CEqs),
|
||||
massage_out(Vs, Ds, Ps, G, AllDiffs, V).
|
||||
|
||||
gen_eqs([V], [D], (V=D)) :- !.
|
||||
gen_eqs([V], D, (V=D)) :- !.
|
||||
gen_eqs([V|Vs], [D|Ds], ((V=D),Eqs)) :-
|
||||
gen_eqs(Vs,Ds,Eqs).
|
||||
|
||||
add_alldiffs([],Eqs,Eqs).
|
||||
add_alldiffs(AllDiffs,Eqs,(Eqs/alldiff(AllDiffs))).
|
||||
|
||||
|
||||
clpbn_bind_vals([],_,_) :- !.
|
||||
% simple case, we want a distribution on a single variable.
|
||||
%bind_vals([V],Ps) :- !,
|
||||
% clpbn:get_atts(V, [dist(Vals,_,_)]),
|
||||
% put_atts(V, posterior([V], Vals, Ps)).
|
||||
% complex case, we want a joint distribution, do it on a leader.
|
||||
% should split on cliques ?
|
||||
clpbn_bind_vals(Vs,Ps,AllDiffs) :-
|
||||
get_all_combs(Vs, Vals),
|
||||
Vs = [V|_],
|
||||
put_atts(V, posterior(Vs, Vals, Ps, AllDiffs)).
|
||||
|
||||
get_all_combs(Vs, Vals) :-
|
||||
get_all_doms(Vs,Ds),
|
||||
findall(L,ms(Ds,L),Vals).
|
||||
|
||||
get_all_doms([], []).
|
||||
get_all_doms([V|Vs], [D|Ds]) :-
|
||||
clpbn:get_atts(V, [dist(D,_,_)]),
|
||||
get_all_doms(Vs, Ds).
|
||||
|
||||
ms([], []).
|
||||
ms([H|L], [El|Els]) :-
|
||||
member(El,H),
|
||||
ms(L, Els).
|
||||
|
31
CLPBN/clpbn/examples/sprinkler.yap
Normal file
31
CLPBN/clpbn/examples/sprinkler.yap
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
:- ensure_loaded(library(clpbn)).
|
||||
|
||||
wet_grass(W) :-
|
||||
sprinkler(S),
|
||||
rain(R),
|
||||
{ W = wet with p([f,t],
|
||||
([1.0,0.1,0.1,0.01,
|
||||
0.0,0.9,0.9,0.99]),
|
||||
[S,R])
|
||||
}.
|
||||
|
||||
|
||||
sprinkler(P) :-
|
||||
cloudy(C),
|
||||
{ P = sprinkler with p([f,t],
|
||||
[0.5,0.9,
|
||||
0.5,0.1],
|
||||
[C])
|
||||
}.
|
||||
|
||||
rain(R) :-
|
||||
cloudy(C),
|
||||
{ R = rain with p([f,t], [0.8,0.2,
|
||||
0.2,0.8],
|
||||
[C]) }.
|
||||
|
||||
cloudy(C) :-
|
||||
{ C = cloudy with p([f,t],[0.5,0.5],[]) }.
|
||||
|
||||
|
Reference in New Issue
Block a user