CLP(BN) stuff.

This commit is contained in:
Vitor Santos Costa 2012-06-01 13:17:39 +01:00
parent 39f392be9c
commit 71a62307f4
7 changed files with 39 additions and 29 deletions

View File

@ -235,11 +235,7 @@ project_attributes(GVars, _AVars0) :-
use_parfactors(on), use_parfactors(on),
clpbn_flag(solver, Solver), Solver \= fove, !, clpbn_flag(solver, Solver), Solver \= fove, !,
generate_network(GVars, GKeys, Keys, Factors, Evidence), generate_network(GVars, GKeys, Keys, Factors, Evidence),
(ground(GVars) -> call_ground_solver(Solver, GVars, GKeys, Keys, Factors, Evidence, _Avars0).
true
;
call_ground_solver(Solver, GVars, GKeys, Keys, Factors, Evidence, _Avars0)
).
project_attributes(GVars, AVars) :- project_attributes(GVars, AVars) :-
suppress_attribute_display(false), suppress_attribute_display(false),
AVars = [_|_], AVars = [_|_],
@ -259,6 +255,14 @@ project_attributes(GVars, AVars) :-
). ).
project_attributes(_, _). project_attributes(_, _).
match([], _Keys).
match([V|GVars], Keys) :-
clpbn:get_atts(V,[key(GKey)]),
member(GKey, Keys), ground(GKey), !,
match(GVars, Keys).
match([_V|GVars], Keys) :-
match(GVars, Keys).
clpbn_vars(AVars, DiffVars, AllVars) :- clpbn_vars(AVars, DiffVars, AllVars) :-
sort_vars_by_key(AVars,SortedAVars,DiffVars), sort_vars_by_key(AVars,SortedAVars,DiffVars),
incorporate_evidence(SortedAVars, AllVars). incorporate_evidence(SortedAVars, AllVars).

View File

@ -46,11 +46,11 @@ clpbn_bind_vals([Vs|MoreVs],[Ps|MorePs],AllDiffs) :-
clpbn_bind_vals2([],_,_) :- !. clpbn_bind_vals2([],_,_) :- !.
% simple case, we want a distribution on a single variable. % simple case, we want a distribution on a single variable.
bind_vals([V],Ps) :- clpbn_bind_vals2([V],Ps,AllDiffs) :-
use_parfactors(on), !, use_parfactors(on), !,
clpbn:get_atts(V, [key(K)]), clpbn:get_atts(V, [key(K)]),
pfl:skolem(K,Vals), pfl:skolem(K,Vals),
put_atts(V, posterior([V], Vals, Ps)). put_atts(V, posterior([V], Vals, Ps, AllDiffs)).
% complex case, we want a joint distribution, do it on a leader. % complex case, we want a joint distribution, do it on a leader.
% should split on cliques ? % should split on cliques ?
clpbn_bind_vals2(Vs,Ps,AllDiffs) :- clpbn_bind_vals2(Vs,Ps,AllDiffs) :-

View File

@ -245,8 +245,7 @@ get_dist_domain_size(Id, DSize) :-
get_dist_domain(Id, Domain) :- get_dist_domain(Id, Domain) :-
recorded(clpbn_dist_db, db(Id, _, _, _, Domain, _, _), _), !. recorded(clpbn_dist_db, db(Id, _, _, _, Domain, _, _), _), !.
get_dist_domain(avg(Domain), Domain) :- get_dist_domain(avg(Domain), Domain).
recorded(clpbn_dist_db, db(Id, _, _, _, Domain, _, _), _), !.
get_dist_key(Id, Key) :- get_dist_key(Id, Key) :-
use_parfactors(on), !, use_parfactors(on), !,

View File

@ -41,11 +41,22 @@ do_network([], _, _, _) :- !.
do_network(QueryVars, EVars, Keys, Factors) :- do_network(QueryVars, EVars, Keys, Factors) :-
retractall(currently_defined(_)), retractall(currently_defined(_)),
retractall(f(_,_,_,_)), retractall(f(_,_,_,_)),
writeln(keys:Keys),
run_through_factors(QueryVars), run_through_factors(QueryVars),
run_through_factors(EVars), run_through_factors(EVars),
findall(K, currently_defined(K), Keys), findall(K, currently_defined(K), Keys),
writeln(keys2:Keys),
findall(f(FType,FId,FKeys,FCPT), f(FType,FId,FKeys,FCPT), Factors). findall(f(FType,FId,FKeys,FCPT), f(FType,FId,FKeys,FCPT), Factors).
match([], _Keys).
match([V|GVars], Keys) :-
clpbn:get_atts(V,[key(GKey)]), !,
member(GKey, Keys), ground(GKey),
match(GVars, Keys).
match([_V|GVars], Keys) :-
match(GVars, Keys).
% %
% look for attributed vars with evidence (should also search the DB) % look for attributed vars with evidence (should also search the DB)
% verifiy if the evidence overlaps with query % verifiy if the evidence overlaps with query
@ -85,14 +96,6 @@ keys([Var|QueryVars], [Key|QueryKeys]) :-
clpbn:get_atts(Var,[key(Key)]), clpbn:get_atts(Var,[key(Key)]),
keys(QueryVars, QueryKeys). keys(QueryVars, QueryKeys).
run_through_factors([]).
run_through_factors([Var|_QueryVars]) :-
clpbn:get_atts(Var,[key(K)]),
find_factors(K),
fail.
run_through_factors([_|QueryVars]) :-
run_through_factors(QueryVars).
initialize_evidence([]). initialize_evidence([]).
initialize_evidence([V|EVars]) :- initialize_evidence([V|EVars]) :-
clpbn:get_atts(V, [key(K)]), clpbn:get_atts(V, [key(K)]),

View File

@ -20,9 +20,6 @@
]). ]).
:- use_module(library(pfl),
[set_pfl_flag/2]).
patch_things_up :- patch_things_up :-
assert_static(clpbn_horus:set_horus_flag(_,_)). assert_static(clpbn_horus:set_horus_flag(_,_)).
@ -33,13 +30,13 @@ warning :-
:- catch(load_foreign_files([horus], [], init_predicates), _, patch_things_up) -> true ; warning. :- catch(load_foreign_files([horus], [], init_predicates), _, patch_things_up) -> true ; warning.
set_solver(ve) :- set_pfl_flag(solver,ve). set_solver(ve) :- pfl:set_pfl_flag(solver,ve).
set_solver(jt) :- set_pfl_flag(solver,jt). set_solver(jt) :- pfl:set_pfl_flag(solver,jt).
set_solver(gibbs) :- set_pfl_flag(solver,gibbs). set_solver(gibbs) :- pfl:set_pfl_flag(solver,gibbs).
set_solver(fove) :- set_pfl_flag(solver,fove). set_solver(fove) :- pfl:set_pfl_flag(solver,fove).
set_solver(hve) :- set_pfl_flag(solver,bp), set_horus_flag(inf_alg, ve). set_solver(hve) :- pfl:set_pfl_flag(solver,bp), set_horus_flag(inf_alg, ve).
set_solver(bp) :- set_pfl_flag(solver,bp), set_horus_flag(inf_alg, bp). set_solver(bp) :- pfl:set_pfl_flag(solver,bp), set_horus_flag(inf_alg, bp).
set_solver(cbp) :- set_pfl_flag(solver,bp), set_horus_flag(inf_alg, cbp). set_solver(cbp) :- pfl:set_pfl_flag(solver,bp), set_horus_flag(inf_alg, cbp).
set_solver(S) :- throw(error('unknow solver ', S)). set_solver(S) :- throw(error('unknow solver ', S)).

View File

@ -1,3 +1,5 @@
/* /*
total_professors(32). total_professors(32).
@ -11,11 +13,15 @@ total_students(256).
:- style_check(all). :- style_check(all).
:- yap_flag(unknown,error).
:- yap_flag(write_strings,on). :- yap_flag(write_strings,on).
:- ensure_loaded(parschema). :- ensure_loaded(parschema).
:- yap_flag(unknown,error).
%:- clpbn_horus:set_solver(fove).
%:- clpbn_horus:set_solver(hve).
:- clpbn_horus:set_solver(bp).
%:- clpbn_horus:set_solver(cbp).
:- ensure_loaded(school32_data). :- ensure_loaded(school32_data).

View File

@ -131,6 +131,7 @@ interface_predicate(Sk) :-
append(SKAs, [Var], ESKAs), append(SKAs, [Var], ESKAs),
ESk =.. ESKAs, ESk =.. ESKAs,
assert(preprocess(ESk, Sk, Var)), assert(preprocess(ESk, Sk, Var)),
% transform from PFL to CLP(BN) call
assert_static((user:ESk :- assert_static((user:ESk :-
evidence(Sk,Ev) -> Ev = Var; evidence(Sk,Ev) -> Ev = Var;
var(Var) -> insert_atts(Var,Sk) ; var(Var) -> insert_atts(Var,Sk) ;