fix cases where you get repeated keys or a(X,X) keys in PFL.
This commit is contained in:
parent
46fbc539bf
commit
6cee85bd60
@ -44,7 +44,7 @@ call_horus_lifted_solver(QueryVars, AllVars, Output) :-
|
||||
init_horus_lifted_solver(_, AllVars, _, state(Network, DistIds)) :-
|
||||
get_parfactors(Parfactors),
|
||||
get_observed_keys(AllVars, ObservedKeys),
|
||||
%writeln(network:(parfactors=Parfactors, evidence=ObservedKeys)), nl,
|
||||
% writeln(network:(parfactors=Parfactors, evidence=ObservedKeys)), nl,
|
||||
cpp_create_lifted_network(Parfactors, ObservedKeys, Network),
|
||||
maplist(get_dist_id, Parfactors, DistIds0),
|
||||
sort(DistIds0, DistIds).
|
||||
@ -74,7 +74,7 @@ is_factor(pf(Id, Ks, Rs, Phi, Tuples)) :-
|
||||
maplist(get_range, Ks, Rs),
|
||||
Table \= avg,
|
||||
gen_table(Table, Phi),
|
||||
all_tuples(Constraints, Vs, Tuples).
|
||||
all_tuples(Constraints, Vs, Tuples).
|
||||
|
||||
|
||||
get_range(K, Range) :-
|
||||
@ -87,7 +87,8 @@ gen_table(Table, Phi) :-
|
||||
|
||||
|
||||
all_tuples(Constraints, Tuple, Tuples) :-
|
||||
setof(Tuple, Constraints^run(Constraints), Tuples).
|
||||
findall(Tuple, run(Constraints), Tuples0),
|
||||
sort(Tuples0, Tuples).
|
||||
|
||||
|
||||
run([]).
|
||||
|
@ -153,12 +153,15 @@ process_arg(Sk, Id, _I) -->
|
||||
new_skolem(Sk,D) :-
|
||||
copy_term(Sk, Sk1),
|
||||
skolem(Sk1, D1),
|
||||
Sk1 =@= Sk,
|
||||
functor(Sk1,N,A),
|
||||
functor(Sk ,N,A),
|
||||
!,
|
||||
( D1 = D -> true ; throw(pfl(permission_error(redefining_domain(Sk),D:D1)))).
|
||||
new_skolem(Sk,D) :-
|
||||
interface_predicate(Sk),
|
||||
assert(skolem(Sk, D)).
|
||||
functor(Sk ,N,A),
|
||||
functor(NSk ,N,A),
|
||||
interface_predicate(NSk),
|
||||
assert(skolem(NSk, D)).
|
||||
|
||||
interface_predicate(Sk) :-
|
||||
Sk =.. SKAs,
|
||||
|
Reference in New Issue
Block a user