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