be more careful about calling the solver:
- only pass variables related to the query - call the solver in case we have only evidence
This commit is contained in:
parent
181e122200
commit
7cbdad30f2
@ -63,7 +63,9 @@
|
|||||||
:- use_module('clpbn/evidence',
|
:- use_module('clpbn/evidence',
|
||||||
[
|
[
|
||||||
store_evidence/1,
|
store_evidence/1,
|
||||||
incorporate_evidence/2
|
incorporate_evidence/2,
|
||||||
|
check_stored_evidence/2,
|
||||||
|
add_evidence/2
|
||||||
]).
|
]).
|
||||||
|
|
||||||
:- use_module('clpbn/utils',
|
:- use_module('clpbn/utils',
|
||||||
@ -71,6 +73,11 @@
|
|||||||
sort_vars_by_key/3
|
sort_vars_by_key/3
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
:- use_module('clpbn/connected',
|
||||||
|
[
|
||||||
|
influences/4
|
||||||
|
]).
|
||||||
|
|
||||||
:- dynamic solver/1,output/1,use/1,suppress_attribute_display/1.
|
:- dynamic solver/1,output/1,use/1,suppress_attribute_display/1.
|
||||||
|
|
||||||
solver(jt).
|
solver(jt).
|
||||||
@ -109,7 +116,7 @@ clpbn_flag(suppress_attribute_display,Before,After) :-
|
|||||||
{Var = Key with Dist} :-
|
{Var = Key with Dist} :-
|
||||||
put_atts(El,[key(Key),dist(DistInfo,Parents)]),
|
put_atts(El,[key(Key),dist(DistInfo,Parents)]),
|
||||||
dist(Dist, DistInfo, Key, Parents),
|
dist(Dist, DistInfo, Key, Parents),
|
||||||
add_evidence(Var,DistInfo,El).
|
add_evidence(Var,Key,DistInfo,El).
|
||||||
|
|
||||||
check_constraint(Constraint, _, _, Constraint) :- var(Constraint), !.
|
check_constraint(Constraint, _, _, Constraint) :- var(Constraint), !.
|
||||||
check_constraint((A->D), _, _, (A->D)) :- var(A), !.
|
check_constraint((A->D), _, _, (A->D)) :- var(A), !.
|
||||||
@ -127,11 +134,13 @@ replace_var([V|_], V0, [NV|_], NV) :- V == V0, !.
|
|||||||
replace_var([_|Vars], V, [_|NVars], NV) :-
|
replace_var([_|Vars], V, [_|NVars], NV) :-
|
||||||
replace_var(Vars, V, NVars, NV).
|
replace_var(Vars, V, NVars, NV).
|
||||||
|
|
||||||
add_evidence(V,Distinfo,NV) :-
|
add_evidence(V,Key,Distinfo,NV) :-
|
||||||
nonvar(V), !,
|
nonvar(V), !,
|
||||||
get_evidence_position(V, Distinfo, Pos),
|
get_evidence_position(V, Distinfo, Pos),
|
||||||
|
check_stored_evidence(Key, Pos),
|
||||||
clpbn:put_atts(NV,evidence(Pos)).
|
clpbn:put_atts(NV,evidence(Pos)).
|
||||||
add_evidence(V,_,V).
|
add_evidence(V,K,_,V) :-
|
||||||
|
add_evidence(K,V).
|
||||||
|
|
||||||
clpbn_marginalise(V, Dist) :-
|
clpbn_marginalise(V, Dist) :-
|
||||||
attributes:all_attvars(AVars),
|
attributes:all_attvars(AVars),
|
||||||
@ -150,20 +159,17 @@ project_attributes(GVars, AVars) :-
|
|||||||
clpbn_vars(AVars, DiffVars, AllVars),
|
clpbn_vars(AVars, DiffVars, AllVars),
|
||||||
get_clpbn_vars(GVars,CLPBNGVars0),
|
get_clpbn_vars(GVars,CLPBNGVars0),
|
||||||
simplify_query_vars(CLPBNGVars0, CLPBNGVars),
|
simplify_query_vars(CLPBNGVars0, CLPBNGVars),
|
||||||
write_out(Solver,CLPBNGVars, AllVars, DiffVars).
|
(
|
||||||
|
Solver = graphs
|
||||||
|
->
|
||||||
|
write_out(Solver, [[]], AllVars, DiffVars)
|
||||||
|
;
|
||||||
|
influences(AllVars, CLPBNGVars, _, NewAllVars),
|
||||||
|
writeln(AllVars:NewAllVars),
|
||||||
|
write_out(Solver, [CLPBNGVars], NewAllVars, DiffVars)
|
||||||
|
).
|
||||||
project_attributes(_, _).
|
project_attributes(_, _).
|
||||||
|
|
||||||
call_solver(GVars, AVars) :-
|
|
||||||
AVars = [_|_],
|
|
||||||
solver(Solver),
|
|
||||||
( GVars = [_|_] ; Solver = graphs), !,
|
|
||||||
clpbn_vars(AVars, DiffVars, AllVars),
|
|
||||||
get_clpbn_vars(GVars,CLPBNGVars0),
|
|
||||||
simplify_query_vars(CLPBNGVars0, CLPBNGVars),
|
|
||||||
write_out(Solver,[CLPBNGVars], AllVars, DiffVars).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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).
|
||||||
@ -192,6 +198,9 @@ get_rid_of_ev_vars([V|LVs0],[V|LVs]) :-
|
|||||||
get_rid_of_ev_vars(LVs0,LVs).
|
get_rid_of_ev_vars(LVs0,LVs).
|
||||||
|
|
||||||
|
|
||||||
|
% do nothing if we don't have query variables to compute.
|
||||||
|
write_out(graphs, _, AVars, _) :-
|
||||||
|
clpbn2graph(AVars).
|
||||||
write_out(vel, GVars, AVars, DiffVars) :-
|
write_out(vel, GVars, AVars, DiffVars) :-
|
||||||
vel(GVars, AVars, DiffVars).
|
vel(GVars, AVars, DiffVars).
|
||||||
write_out(jt, GVars, AVars, DiffVars) :-
|
write_out(jt, GVars, AVars, DiffVars) :-
|
||||||
@ -200,8 +209,6 @@ write_out(gibbs, GVars, AVars, DiffVars) :-
|
|||||||
gibbs(GVars, AVars, DiffVars).
|
gibbs(GVars, AVars, DiffVars).
|
||||||
write_out(bnt, GVars, AVars, DiffVars) :-
|
write_out(bnt, GVars, AVars, DiffVars) :-
|
||||||
do_bnt(GVars, AVars, DiffVars).
|
do_bnt(GVars, AVars, DiffVars).
|
||||||
write_out(graphs, _, AVars, _) :-
|
|
||||||
clpbn2graph(AVars).
|
|
||||||
|
|
||||||
get_bnode(Var, Goal) :-
|
get_bnode(Var, Goal) :-
|
||||||
get_atts(Var, [key(Key),dist(Dist,Parents)]),
|
get_atts(Var, [key(Key),dist(Dist,Parents)]),
|
||||||
|
Reference in New Issue
Block a user