Merge branch 'master' of ssh://yap.git.sourceforge.net/gitroot/yap/yap-6.3
This commit is contained in:
commit
4e43aff605
@ -884,9 +884,9 @@ run_solver(Qs, LLPs, bdd(Term, Leaves, Nodes, Hash, Id)) :-
|
|||||||
run_bdd_solver([Q],LPs,bdd(Term,Leaves,Nodes))),
|
run_bdd_solver([Q],LPs,bdd(Term,Leaves,Nodes))),
|
||||||
LLPs).
|
LLPs).
|
||||||
|
|
||||||
run_bdd_solver([[V]], LPs, bdd(Term, _Leaves, Nodes)) :-
|
run_bdd_solver([Vs], LPs, bdd(Term, _Leaves, Nodes)) :-
|
||||||
build_out_node(Nodes, Node),
|
build_out_node(Nodes, Node),
|
||||||
findall(Prob, get_prob(Term, Node, V, Prob),TermProbs),
|
findall(Prob, get_prob(Term, Node, Vs, Prob),TermProbs),
|
||||||
sumlist(TermProbs, Sum),
|
sumlist(TermProbs, Sum),
|
||||||
normalise(TermProbs, Sum, LPs).
|
normalise(TermProbs, Sum, LPs).
|
||||||
|
|
||||||
@ -899,13 +899,13 @@ build_out_node2([T,T1|Tops], T*Top) :-
|
|||||||
build_out_node2(T1.Tops, Top).
|
build_out_node2(T1.Tops, Top).
|
||||||
|
|
||||||
|
|
||||||
get_prob(Term, _Node, V, SP) :-
|
get_prob(Term, _Node, Vs, SP) :-
|
||||||
bdds(ddnnf), !,
|
bdds(ddnnf), !,
|
||||||
all_cnfs(Term, CNF, IVs, Indics, V, AllParms, AllParmValues),
|
all_cnfs(Term, CNF, IVs, Indics, Vs, AllParms, AllParmValues),
|
||||||
build_cnf(CNF, IVs, Indics, AllParms, AllParmValues, SP).
|
build_cnf(CNF, IVs, Indics, AllParms, AllParmValues, SP).
|
||||||
get_prob(Term, Node, V, SP) :-
|
get_prob(Term, Node, Vs, SP) :-
|
||||||
bdds(bdd), !,
|
bdds(bdd), !,
|
||||||
bind_all(Term, Node, Bindings, V, AllParms, AllParmValues),
|
bind_all(Term, Node, Bindings, Vs, AllParms, AllParmValues),
|
||||||
% reverse(AllParms, RAllParms),
|
% reverse(AllParms, RAllParms),
|
||||||
term_variables(AllParms, NVs),
|
term_variables(AllParms, NVs),
|
||||||
build_bdd(Bindings, NVs, AllParms, AllParmValues, Bdd),
|
build_bdd(Bindings, NVs, AllParms, AllParmValues, Bdd),
|
||||||
@ -922,19 +922,19 @@ build_bdd(Bindings, NVs, VTheta, Theta, Bdd) :-
|
|||||||
VTheta = Theta.
|
VTheta = Theta.
|
||||||
|
|
||||||
bind_all([], End, End, _V, [], []).
|
bind_all([], End, End, _V, [], []).
|
||||||
bind_all([info(V, _Tree, Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0, ParmVars.AllParms, Parms.AllTheta) :-
|
bind_all([info(V, _Tree, Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0s, ParmVars.AllParms, Parms.AllTheta) :-
|
||||||
V0 == V, !,
|
v_in(V, V0s), !,
|
||||||
set_to_one_zeros(Ev),
|
set_to_one_zeros(Ev),
|
||||||
bind_formula(Formula, BindsF, BindsI),
|
bind_formula(Formula, BindsF, BindsI),
|
||||||
bind_all(Term, End, BindsI, V0, AllParms, AllTheta).
|
bind_all(Term, End, BindsI, V0s, AllParms, AllTheta).
|
||||||
bind_all([info(_V, _Tree, Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0, ParmVars.AllParms, Parms.AllTheta) :-
|
bind_all([info(_V, _Tree, Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0s, ParmVars.AllParms, Parms.AllTheta) :-
|
||||||
set_to_ones(Ev),!,
|
set_to_ones(Ev),!,
|
||||||
bind_formula(Formula, BindsF, BindsI),
|
bind_formula(Formula, BindsF, BindsI),
|
||||||
bind_all(Term, End, BindsI, V0, AllParms, AllTheta).
|
bind_all(Term, End, BindsI, V0s, AllParms, AllTheta).
|
||||||
% evidence: no need to add any stuff.
|
% evidence: no need to add any stuff.
|
||||||
bind_all([info(_V, _Tree, _Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0, ParmVars.AllParms, Parms.AllTheta) :-
|
bind_all([info(_V, _Tree, _Ev, _Values, Formula, ParmVars, Parms)|Term], End, BindsF, V0s, ParmVars.AllParms, Parms.AllTheta) :-
|
||||||
bind_formula(Formula, BindsF, BindsI),
|
bind_formula(Formula, BindsF, BindsI),
|
||||||
bind_all(Term, End, BindsI, V0, AllParms, AllTheta).
|
bind_all(Term, End, BindsI, V0s, AllParms, AllTheta).
|
||||||
|
|
||||||
bind_formula([], L, L).
|
bind_formula([], L, L).
|
||||||
bind_formula(B.Formula, B.BsF, Bs0) :-
|
bind_formula(B.Formula, B.BsF, Bs0) :-
|
||||||
@ -961,29 +961,33 @@ normalise(P.TermProbs, Sum, NP.LPs) :-
|
|||||||
finalize_bdd_solver(_).
|
finalize_bdd_solver(_).
|
||||||
|
|
||||||
all_cnfs([], [], [], [], _V, [], []).
|
all_cnfs([], [], [], [], _V, [], []).
|
||||||
all_cnfs([info(V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0, AllParmsF, AllThetaF) :-
|
all_cnfs([info(V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0s, AllParmsF, AllThetaF) :-
|
||||||
%writeln(f:Formula),
|
%writeln(f:Formula),
|
||||||
V0 == V, !,
|
v_in(V, V0s), !,
|
||||||
set_to_one_zeros(Ev),
|
set_to_one_zeros(Ev),
|
||||||
all_indicators(Values, BindsF, Binds0),
|
all_indicators(Values, BindsF, Binds0),
|
||||||
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
||||||
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
||||||
parameters(Formula, Tree, Binds1, BindsI),
|
parameters(Formula, Tree, Binds1, BindsI),
|
||||||
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0, AllParms, AllTheta).
|
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0s, AllParms, AllTheta).
|
||||||
all_cnfs([info(_V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0, AllParmsF, AllThetaF) :-
|
all_cnfs([info(_V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0s, AllParmsF, AllThetaF) :-
|
||||||
set_to_ones(Ev),!,
|
set_to_ones(Ev),!,
|
||||||
all_indicators(Values, BindsF, Binds0),
|
all_indicators(Values, BindsF, Binds0),
|
||||||
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
||||||
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
||||||
parameters(Formula, Tree, Binds1, BindsI),
|
parameters(Formula, Tree, Binds1, BindsI),
|
||||||
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0, AllParms, AllTheta).
|
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0s, AllParms, AllTheta).
|
||||||
% evidence: no need to add any stuff.
|
% evidence: no need to add any stuff.
|
||||||
all_cnfs([info(_V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0, AllParmsF, AllThetaF) :-
|
all_cnfs([info(_V, Tree, Ev, Values, Formula, ParmVars, Parms)|Term], BindsF, IVars, Indics, V0s, AllParmsF, AllThetaF) :-
|
||||||
all_indicators(Values, BindsF, Binds0),
|
all_indicators(Values, BindsF, Binds0),
|
||||||
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
indicators(Values, [], Ev, IVars, IVarsI, Indics, IndicsI, Binds0, Binds1),
|
||||||
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
parms( ParmVars, Parms, AllParmsF, AllThetaF, AllParms, AllTheta),
|
||||||
parameters(Formula, Tree, Binds1, BindsI),
|
parameters(Formula, Tree, Binds1, BindsI),
|
||||||
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0, AllParms, AllTheta).
|
all_cnfs(Term, BindsI, IVarsI, IndicsI, V0s, AllParms, AllTheta).
|
||||||
|
|
||||||
|
v_in(V, [V0|_]) :- V == V0, !.
|
||||||
|
v_in(V, [_|Vs]) :-
|
||||||
|
v_in(V, Vs).
|
||||||
|
|
||||||
all_indicators(Values) -->
|
all_indicators(Values) -->
|
||||||
{ values_to_disj(Values, Disj) },
|
{ values_to_disj(Values, Disj) },
|
||||||
|
@ -21,6 +21,7 @@ data(t,f,t,t).
|
|||||||
%:- clpbn:set_clpbn_flag(em_solver,gibbs).
|
%:- clpbn:set_clpbn_flag(em_solver,gibbs).
|
||||||
%:- clpbn:set_clpbn_flag(em_solver,jt).
|
%:- clpbn:set_clpbn_flag(em_solver,jt).
|
||||||
:- clpbn:set_clpbn_flag(em_solver,hve).
|
:- clpbn:set_clpbn_flag(em_solver,hve).
|
||||||
|
:- clpbn:set_clpbn_flag(em_solver,bdd).
|
||||||
%:- clpbn:set_clpbn_flag(em_solver,bp).
|
%:- clpbn:set_clpbn_flag(em_solver,bp).
|
||||||
%:- clpbn:set_clpbn_flag(em_solver,ve).
|
%:- clpbn:set_clpbn_flag(em_solver,ve).
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user