init better; problog_low accepts conditional probabilities (untested); accept (p0::a;p1::b).

This commit is contained in:
Vitor Santos Costa 2016-08-05 16:43:11 -05:00
parent 0aeeb726e3
commit b3a11b339a
6 changed files with 123 additions and 121 deletions

View File

@ -243,14 +243,14 @@ For installing and running ProbLog, the following are required:
### Download ### Download
To install ProbLog1, it is first necessary to download SimpleCUDD or CUDD. YAP Prolog also needs to be downloaded if it is not already installed on the machine To install ProbLog1, it is first necessary to download SimpleCUDD or CUDD. YAP Prolog also needs to be downloaded if it is not already installed on the machine
For downloading SimpleCUDD, go to: For downloading SimpleCUDD, go to:
+ http://www.cs.kuleuven.be/$sim$theo/tools/SimpleCUDD.tar.gz + http://www.cs.kuleuven.be/$sim$theo/tools/SimpleCUDD.tar.gz
You can also use the CUDD interface package in YAP. You will need to You can also use the CUDD interface package in YAP. You will need to
1. If a Fedora user, CUDD is just available. 1. If a Fedora user, CUDD is just available.
2. If a Mac user, there is a ports package. 2. If a Mac user, there is a ports package.
3. Otherwise, you can obtain the version at . This version compiles under WIN32. 3. Otherwise, you can obtain the version at . This version compiles under WIN32.
@ -279,7 +279,7 @@ A probabilistic fact is encoded in ProbLog by preceding a predicate with a proba
~~~~ ~~~~
0.5::heads(_). 0.5::heads(_).
~~~~ ~~~~
encodes the fact that there's 50% chance of getting heads when tossing an unbiassed coin. encodes the fact that there's 50% chance of getting heads when tossing an unbiassed coin.
### Encoding Parameter Learning Facts ### Encoding Parameter Learning Facts
@ -357,7 +357,7 @@ This predicate returns the lower bound of the probability of achieving the goal
* *
This predicate specifies an example. Every example has as input a unique identifier (N), a query (Q) and a probability (Prob) associated with it. This predicate specifies an example. Every example has as input a unique identifier (N), a query (Q) and a probability (Prob) associated with it.
Instead of queries, you can also give proofs as training example. They are encoded as the conjunction of the probabilistic facts used in the proof. Instead of queries, you can also give proofs as training example. They are encoded as the conjunction of the probabilistic facts used in the proof.
*/ */
/** /**
@ -365,7 +365,7 @@ Instead of queries, you can also give proofs as training example. They are encod
* *
This predicate specifies a test example. Every test example has as input a unique identifier (N), a query (Q) and a probability (Prob) associated with it. This predicate specifies a test example. Every test example has as input a unique identifier (N), a query (Q) and a probability (Prob) associated with it.
Test examples are ignored during learning but are used afterwards to check the performance of the model. The ID namespace is shared between the test examples and the training examples and you may only reuse an ID if the queries are identical. Test examples are ignored during learning but are used afterwards to check the performance of the model. The ID namespace is shared between the test examples and the training examples and you may only reuse an ID if the queries are identical.
*/ */
/** /**
@ -410,13 +410,13 @@ This predicate gives the value of the flag with the specified name. The supporte
+ use_db_trie + use_db_trie
Flag telling whether to use the builtin trie to trie transformation. Flag telling whether to use the builtin trie to trie transformation.
The possible values for this flag are true or false. The possible values for this flag are true or false.
+ db_trie_opt_lvl + db_trie_opt_lvl
Sets the optimization level for the trie to trie transformation Sets the optimization level for the trie to trie transformation
The possible values for this flag are any integer The possible values for this flag are any integer
+ compare_opt_lvl + compare_opt_lvl
@ -425,8 +425,8 @@ The possible values for this flag are true or false.
+ db_min_prefix + db_min_prefix
Sets the minimum size of the prefix for dbtrie to optimize. Sets the minimum size of the prefix for dbtrie to optimize.
The possible values for this flag are any integer The possible values for this flag are any integer
+ use_naive_trie + use_naive_trie
@ -625,7 +625,7 @@ The possible values for this flag are any valid path name.
+ verbosity_level + verbosity_level
Flag telling how much output shall be given. Flag telling how much output shall be given.
The possible values for this flag are an integer between 0 and 5 (0=nothing, 5=all). The possible values for this flag are an integer between 0 and 5 (0=nothing, 5=all).
+ reuse_initialized_bdds + reuse_initialized_bdds
@ -646,12 +646,12 @@ The possible values for this flag are true or false.
+ init_method + init_method
Flag setting the ProbLog predicate to search proofs. Flag setting the ProbLog predicate to search proofs.
The possible values for this flag are of the form: (+Query,-P,+BDDFile,+ProbFile,+Call). For example: A,B,C,D,problog_kbest_save(A,100,B,E,C,D) The possible values for this flag are of the form: (+Query,-P,+BDDFile,+ProbFile,+Call). For example: A,B,C,D,problog_kbest_save(A,100,B,E,C,D)
+ probability_initializer + probability_initializer
Flag setting the ProbLog predicate to initialize probabilities. Flag setting the ProbLog predicate to initialize probabilities.
The possible values for this flag are of the form: (+FactID,-P,+Call). For example: A,B,random_probability(A,B) The possible values for this flag are of the form: (+FactID,-P,+Call). For example: A,B,random_probability(A,B)
+ log_frequency + log_frequency
@ -660,7 +660,7 @@ The possible values for this flag are any integer greater than zero.
+ alpha + alpha
Flag setting the weight of negative examples. Flag setting the weight of negative examples.
The possible values for this flag are number or "auto" (auto=n_p/n_n). The possible values for this flag are number or "auto" (auto=n_p/n_n).
+ slope + slope
@ -890,7 +890,7 @@ The possible values for this flag are any number greater than zero.
:- dynamic current_prob/1. :- dynamic current_prob/1.
:- dynamic possible_proof/2. :- dynamic possible_proof/2.
:- dynamic impossible_proof/1. :- dynamic impossible_proof/1.
:- table conditional_prob/4. :- table conditional_prob/4.
% ProbLog files declare prob. facts as P::G % ProbLog files declare prob. facts as P::G
@ -1068,7 +1068,8 @@ reset_control :-
problog_control(off,mc), problog_control(off,mc),
problog_control(off,limit), problog_control(off,limit),
% problog_control(off,exact), % problog_control(off,exact),
problog_control(off,remember). problog_control(off,remember),
nb_setval(problog_steps, 1).
:- initialization(reset_control). :- initialization(reset_control).
@ -1105,12 +1106,14 @@ generate_atoms(N, A):-
% converts annotated disjunctions % converts annotated disjunctions
term_expansion_intern((Head<--Body), Module, C):- term_expansion_intern((Head<--Body), Module, C):-
term_expansion_intern_ad((Head<--Body), Module,inference, C). term_expansion_intern_ad((Head<--Body), Module,inference, C).
% converts ?:: prefix to ? :: infix, as handled by other clause % converts ?:: prefix to ? :: infix, as handled by other clause
term_expansion_intern((Annotation::Fact), Module, ExpandedClause) :- term_expansion_intern((Annotation::Fact), Module, ExpandedClause) :-
Annotation == ( '?' ), Annotation == ( '?' ),
term_expansion_intern(((?) :: Fact :- true), Module, ExpandedClause). term_expansion_intern(((?) :: Fact :- true), Module, ExpandedClause).
term_expansion_intern((Annotation::Head; Alternatives), Module, C):-
is_alternatives( Alternatives ),
!,
term_expansion_intern_ad(((Annotation::Head; Alternatives)<--true), Module,inference, C).
% handles decision clauses % handles decision clauses
term_expansion_intern((Annotation :: Head :- Body), Module, problog:ExpandedClause) :- term_expansion_intern((Annotation :: Head :- Body), Module, problog:ExpandedClause) :-
@ -1191,7 +1194,7 @@ term_expansion_intern(Head :: Goal,Module,problog:ProbFact) :-
length(Args,Arity), length(Args,Arity),
atomic_concat([problogcontinuous_,Name],ProblogName), atomic_concat([problogcontinuous_,Name],ProblogName),
probclause_id(ID), probclause_id(ID),
% is it a tunable fact? % is it a tunable fact?
( (
(number(Mu),number(Sigma)) (number(Mu),number(Sigma))
@ -1218,7 +1221,7 @@ term_expansion_intern(Head :: Goal,Module,problog:ProbFact) :-
% handles probabilistic facts % handles probabilistic facts
term_expansion_intern(P :: Goal,Module,problog:ProbFact) :- term_expansion_intern(P :: Goal,Module,problog:ProbFact) :-
@ -1286,7 +1289,7 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
-> ->
P=P1; P=P1;
P=0.5 P=0.5
) )
); );
( (
number(Initializer) number(Initializer)
@ -1294,7 +1297,7 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
P=Initializer P=Initializer
; ;
atom(Initializer) atom(Initializer)
-> ->
call(user:Initializer,Goal,P) call(user:Initializer,Goal,P)
; ;
throw(unkown_probability_initializer(Initializer)) throw(unkown_probability_initializer(Initializer))
@ -1303,6 +1306,14 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
LogP is log(P). LogP is log(P).
is_alternatives( Var ) :-
var( Var ),
!,
fail.
is_alternatives( _Prob::_Alt ).
is_alternatives( ( A1 ; As ) ) :-
is_alternatives( A1 ),
is_alternatives( As ).
% %
@ -1428,7 +1439,7 @@ problog_retractall(Goal) :-
retractall(problog:ProbLogGoal). retractall(problog:ProbLogGoal).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -1477,7 +1488,7 @@ non_ground_fact_grounding_id(Goal,ID) :-
assertz(grounding_is_known(Goal,ID)) assertz(grounding_is_known(Goal,ID))
) )
). ).
non_ground_fact_grounding_id(Goal,_) :- non_ground_fact_grounding_id(Goal,_) :-
format(user_error,'The current program uses non-ground facts.~n', []), format(user_error,'The current program uses non-ground facts.~n', []),
format(user_error,'If you query those, you may only query fully-grounded versions of the fact.~n',[]), format(user_error,'If you query those, you may only query fully-grounded versions of the fact.~n',[]),
format(user_error,'Within the current proof, you queried for ~q which is not ground.~2n', [Goal]), format(user_error,'Within the current proof, you queried for ~q which is not ground.~2n', [Goal]),
@ -1512,15 +1523,15 @@ prove_problog_fact(ClauseID,GroundID,Prob) :-
(problog_control(check,find_decisions) -> (problog_control(check,find_decisions) ->
signal_decision(ClauseID,GroundID) signal_decision(ClauseID,GroundID)
; ;
(Prob = ('?') -> (Prob == ('?') ->
add_to_proof(GroundID,0) % 0 is log(1)! add_to_proof(GroundID,0) % 0 is log(1)!
; ;
% Checks needed for LeDTProbLog % Checks needed for LeDTProbLog
(Prob = always -> (Prob == always ->
% Always true, do not add to trie % Always true, do not add to trie
true true
; ;
(Prob = never -> (Prob == never ->
% Always false, do not add to trie % Always false, do not add to trie
fail fail
; ;
@ -1865,13 +1876,13 @@ add_to_proof(ID, LogProb) :-
b_getval(problog_probability, CurrentLogProb), b_getval(problog_probability, CurrentLogProb),
nb_getval(problog_threshold, CurrentThreshold), nb_getval(problog_threshold, CurrentThreshold),
b_getval(problog_current_proof, IDs), b_getval(problog_current_proof, IDs),
% check whether negation of this fact is already used in proof % check whether negation of this fact is already used in proof
\+ open_end_memberchk(not(ID),IDs), \+ open_end_memberchk(not(ID),IDs),
( % check whether this fact is already used in proof ( % check whether this fact is already used in proof
open_end_memberchk(ID, IDs) open_end_memberchk(ID, IDs)
-> ->
true; true;
( (
open_end_add(ID, IDs, NIDs), open_end_add(ID, IDs, NIDs),
@ -1907,7 +1918,7 @@ add_to_proof_negated(ID, LogProb) :-
% check whether unnegated fact is already used in proof % check whether unnegated fact is already used in proof
\+ open_end_memberchk(ID, IDs), \+ open_end_memberchk(ID, IDs),
( % check wether negation of this fact is already used in proof ( % check wether negation of this fact is already used in proof
open_end_memberchk(not(ID), IDs) open_end_memberchk(not(ID), IDs)
-> ->
@ -2040,7 +2051,7 @@ init_problog(Threshold) :-
reset_control, reset_control,
LT is log(Threshold), LT is log(Threshold),
b_setval(problog_probability, 0.0), b_setval(problog_probability, 0.0),
b_setval(problog_current_proof, []), nb_setval(problog_current_proof, []),
nb_setval(problog_threshold, LT), nb_setval(problog_threshold, LT),
problog_flag(maxsteps,MaxS), problog_flag(maxsteps,MaxS),
init_tabling, init_tabling,
@ -2064,6 +2075,9 @@ init_problog(Threshold) :-
timer_reset(sld_time), timer_reset(sld_time),
timer_reset(build_tree_low). timer_reset(build_tree_low).
% :- initialization( ( init_problog(0.0),
% reset_control ) ).
% idea: proofs that are refinements of known proof can be pruned as they don't add probability mass % idea: proofs that are refinements of known proof can be pruned as they don't add probability mass
% note that current ptree implementation doesn't provide the check as there's no efficient method known so far... % note that current ptree implementation doesn't provide the check as there's no efficient method known so far...
prune_check(Proof, Trie) :- prune_check(Proof, Trie) :-
@ -2309,7 +2323,7 @@ eval_dnf(OriTrie1, Prob, Status) :-
delete_ptree(DBTrie), delete_ptree(DBTrie),
timer_stop(script_gen_time_builtin,Script_Gen_Time_Builtin), timer_stop(script_gen_time_builtin,Script_Gen_Time_Builtin),
problog_var_set(bdd_script_time(Builtin), Script_Gen_Time_Builtin), problog_var_set(bdd_script_time(Builtin), Script_Gen_Time_Builtin),
timer_start(bdd_gen_time_builtin), timer_start(bdd_gen_time_builtin),
@ -2418,7 +2432,7 @@ execute_bdd_tool(BDDFile, BDDParFile, Prob, Status):-
; ;
Param = ParamD Param = ParamD
), ),
convert_filename_to_problog_path('problogbdd', ProblogBDD), convert_filename_to_problog_path('simplecudd', ProblogBDD),
convert_filename_to_working_path(ResultFileFlag, ResultFile), convert_filename_to_working_path(ResultFileFlag, ResultFile),
atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command), atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command),
shell(Command, Return), shell(Command, Return),
@ -2473,7 +2487,7 @@ add_solution :-
Cont_IDs == [] Cont_IDs == []
-> ->
Continuous=[]; Continuous=[];
( (
proof_id(ProofID), proof_id(ProofID),
collect_all_intervals(Cont_IDs,ProofID,AllIntervals), collect_all_intervals(Cont_IDs,ProofID,AllIntervals),
( (
@ -2600,7 +2614,11 @@ compute_bounds(LP, UP, Status) :-
% same as problog_threshold/5, but lower bound only (no stopped derivations stored) % same as problog_threshold/5, but lower bound only (no stopped derivations stored)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
problog_low(Goal/Cond, Threshold, _, _) :-
!,
problog_low((Cond,Goal), Threshold, P1, Status)
problog_low( Cond, Threshold, P2, Status)
P is P1/P2.
problog_low(Goal, Threshold, _, _) :- problog_low(Goal, Threshold, _, _) :-
init_problog_low(Threshold), init_problog_low(Threshold),
problog_control(off, up), problog_control(off, up),
@ -2920,7 +2938,7 @@ problog_kbest_explanations(Goal, K, Explanations) :-
problog_control(off,up), problog_control(off,up),
problog_kbest_id(Goal, K), problog_kbest_id(Goal, K),
retract(current_kbest(_,ListFound,_NumFound)), retract(current_kbest(_,ListFound,_NumFound)),
to_external_format_with_reverse(ListFound,Explanations). to_external_format_with_reverse(ListFound,Explanations).
problog_real_kbest(Goal, K, Prob, Status) :- problog_real_kbest(Goal, K, Prob, Status) :-
problog_flag(first_threshold,InitT), problog_flag(first_threshold,InitT),
@ -3383,14 +3401,14 @@ initialise_optimal_proof([Proof-MaxAdded|Rest],Theta) :-
OptAdded is Popt - Pcurr, OptAdded is Popt - Pcurr,
(MaxAdded > OptAdded -> (MaxAdded > OptAdded ->
calculate_added_prob(Proof, P,ok), calculate_added_prob(Proof, P,ok),
%update the maximal added probability %update the maximal added probability
retractall(possible_proof(Proof,_)), retractall(possible_proof(Proof,_)),
AddedP is P - Pcurr, AddedP is P - Pcurr,
(AddedP > Theta -> (AddedP > Theta ->
%the proof can still add something %the proof can still add something
assert(possible_proof(Proof,AddedP)), assert(possible_proof(Proof,AddedP)),
%Check whether to change the optimal proof %Check whether to change the optimal proof
(P > Popt -> (P > Popt ->
retractall(optimal_proof(_,_)), retractall(optimal_proof(_,_)),
@ -3485,7 +3503,7 @@ calculate_added_prob([UsedFact|UsedProof],[],Conditions,P,S) :-
convert_filename_to_working_path('save_params', ParFile), convert_filename_to_working_path('save_params', ParFile),
negate(UsedFact,NegatedFact), negate(UsedFact,NegatedFact),
conditional_prob(SONodeDumpFile,ParFile,[NegatedFact|Conditions],Pcond,Scond), conditional_prob(SONodeDumpFile,ParFile,[NegatedFact|Conditions],Pcond,Scond),
( Srec = ok -> ( Srec = ok ->
( Scond = ok -> ( Scond = ok ->
S = ok, S = ok,
get_fact_probability(UsedFact,Pfact), get_fact_probability(UsedFact,Pfact),
@ -3510,7 +3528,7 @@ bubblesort(List,Sorted):-
swap(List,List1),!, swap(List,List1),!,
bubblesort(List1,Sorted). bubblesort(List1,Sorted).
bubblesort(Sorted,Sorted). bubblesort(Sorted,Sorted).
swap([X,Y|Rest], [Y,X|Rest]):- bigger(X,Y). swap([X,Y|Rest], [Y,X|Rest]):- bigger(X,Y).
swap([Z|Rest],[Z|Rest1]):- swap(Rest,Rest1). swap([Z|Rest],[Z|Rest1]):- swap(Rest,Rest1).
@ -3542,7 +3560,7 @@ bigger(X,Y) :-
X > IDY. X > IDY.
bigger(X,Y) :- bigger(X,Y) :-
X > Y. X > Y.
round_added_prob(P,RoundedP) :- round_added_prob(P,RoundedP) :-
P < 1, P < 1,
Pnew is P*10, Pnew is P*10,
@ -3564,7 +3582,7 @@ remove_used_facts([Fact|Rest],Used,New) :-
Used = [Fact|RecUsed], Used = [Fact|RecUsed],
New = RecNew New = RecNew
; ;
Used = RecUsed, Used = RecUsed,
New = [Fact|RecNew] New = [Fact|RecNew]
). ).
@ -3614,7 +3632,7 @@ change_par_file(ParFile,[not(ID)|Rest],ChangedParFile) :-
open(ChangedParFile,'append',S), open(ChangedParFile,'append',S),
tell(S), tell(S),
format('@x~w\n0\n',[ID]), format('@x~w\n0\n',[ID]),
told. told.
% Copies a file % Copies a file
copy_file(From,To) :- copy_file(From,To) :-
@ -3688,7 +3706,7 @@ eval_bdd_forest(N,Probs,Status) :-
; ;
Param = ParamD Param = ParamD
), ),
convert_filename_to_problog_path('problogbdd', ProblogBDD), convert_filename_to_problog_path('simplecudd', ProblogBDD),
problog_flag(bdd_result,ResultFileFlag), problog_flag(bdd_result,ResultFileFlag),
convert_filename_to_working_path(ResultFileFlag, ResultFile), convert_filename_to_working_path(ResultFileFlag, ResultFile),
atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command), atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command),
@ -4133,7 +4151,7 @@ required(Feature) :-
Val == required. Val == required.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
format_if_verbose(H,T,L) :- format_if_verbose(H,T,L) :-
@ -4170,4 +4188,3 @@ user:term_expansion(Term,ExpandedTerm) :-
problog:term_expansion_intern(Term,Mod,ExpandedTerm). problog:term_expansion_intern(Term,Mod,ExpandedTerm).
%% @} %% @}

View File

@ -9,71 +9,71 @@
% http://dtai.cs.kuleuven.be/problog % http://dtai.cs.kuleuven.be/problog
% %
% ProbLog was developed at Katholieke Universiteit Leuven % ProbLog was developed at Katholieke Universiteit Leuven
% %
% Copyright 2009 % Copyright 2009
% Angelika Kimmig, Vitor Santos Costa, Bernd Gutmann % Angelika Kimmig, Vitor Santos Costa, Bernd Gutmann
% %
% Main authors of this file: % Main authors of this file:
% Bernd Gutmann % Bernd Gutmann
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Artistic License 2.0 % Artistic License 2.0
% %
% Copyright (c) 2000-2006, The Perl Foundation. % Copyright (c) 2000-2006, The Perl Foundation.
% %
% Everyone is permitted to copy and distribute verbatim copies of this % Everyone is permitted to copy and distribute verbatim copies of this
% license document, but changing it is not allowed. Preamble % license document, but changing it is not allowed. Preamble
% %
% This license establishes the terms under which a given free software % This license establishes the terms under which a given free software
% Package may be copied, modified, distributed, and/or % Package may be copied, modified, distributed, and/or
% redistributed. The intent is that the Copyright Holder maintains some % redistributed. The intent is that the Copyright Holder maintains some
% artistic control over the development of that Package while still % artistic control over the development of that Package while still
% keeping the Package available as open source and free software. % keeping the Package available as open source and free software.
% %
% You are always permitted to make arrangements wholly outside of this % You are always permitted to make arrangements wholly outside of this
% license directly with the Copyright Holder of a given Package. If the % license directly with the Copyright Holder of a given Package. If the
% terms of this license do not permit the full use that you propose to % terms of this license do not permit the full use that you propose to
% make of the Package, you should contact the Copyright Holder and seek % make of the Package, you should contact the Copyright Holder and seek
% a different licensing arrangement. Definitions % a different licensing arrangement. Definitions
% %
% "Copyright Holder" means the individual(s) or organization(s) named in % "Copyright Holder" means the individual(s) or organization(s) named in
% the copyright notice for the entire Package. % the copyright notice for the entire Package.
% %
% "Contributor" means any party that has contributed code or other % "Contributor" means any party that has contributed code or other
% material to the Package, in accordance with the Copyright Holder's % material to the Package, in accordance with the Copyright Holder's
% procedures. % procedures.
% %
% "You" and "your" means any person who would like to copy, distribute, % "You" and "your" means any person who would like to copy, distribute,
% or modify the Package. % or modify the Package.
% %
% "Package" means the collection of files distributed by the Copyright % "Package" means the collection of files distributed by the Copyright
% Holder, and derivatives of that collection and/or of those files. A % Holder, and derivatives of that collection and/or of those files. A
% given Package may consist of either the Standard Version, or a % given Package may consist of either the Standard Version, or a
% Modified Version. % Modified Version.
% %
% "Distribute" means providing a copy of the Package or making it % "Distribute" means providing a copy of the Package or making it
% accessible to anyone else, or in the case of a company or % accessible to anyone else, or in the case of a company or
% organization, to others outside of your company or organization. % organization, to others outside of your company or organization.
% %
% "Distributor Fee" means any fee that you charge for Distributing this % "Distributor Fee" means any fee that you charge for Distributing this
% Package or providing support for this Package to another party. It % Package or providing support for this Package to another party. It
% does not mean licensing fees. % does not mean licensing fees.
% %
% "Standard Version" refers to the Package if it has not been modified, % "Standard Version" refers to the Package if it has not been modified,
% or has been modified only in ways explicitly requested by the % or has been modified only in ways explicitly requested by the
% Copyright Holder. % Copyright Holder.
% %
% "Modified Version" means the Package, if it has been changed, and such % "Modified Version" means the Package, if it has been changed, and such
% changes were not explicitly requested by the Copyright Holder. % changes were not explicitly requested by the Copyright Holder.
% %
% "Original License" means this Artistic License as Distributed with the % "Original License" means this Artistic License as Distributed with the
% Standard Version of the Package, in its current version or as it may % Standard Version of the Package, in its current version or as it may
% be modified by The Perl Foundation in the future. % be modified by The Perl Foundation in the future.
% %
% "Source" form means the source code, documentation source, and % "Source" form means the source code, documentation source, and
% configuration files for the Package. % configuration files for the Package.
% %
% "Compiled" form means the compiled bytecode, object code, binary, or % "Compiled" form means the compiled bytecode, object code, binary, or
% any other form resulting from mechanical transformation or translation % any other form resulting from mechanical transformation or translation
% of the Source form. % of the Source form.
@ -81,34 +81,34 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Permission for Use and Modification Without Distribution % Permission for Use and Modification Without Distribution
% %
% (1) You are permitted to use the Standard Version and create and use % (1) You are permitted to use the Standard Version and create and use
% Modified Versions for any purpose without restriction, provided that % Modified Versions for any purpose without restriction, provided that
% you do not Distribute the Modified Version. % you do not Distribute the Modified Version.
% %
% Permissions for Redistribution of the Standard Version % Permissions for Redistribution of the Standard Version
% %
% (2) You may Distribute verbatim copies of the Source form of the % (2) You may Distribute verbatim copies of the Source form of the
% Standard Version of this Package in any medium without restriction, % Standard Version of this Package in any medium without restriction,
% either gratis or for a Distributor Fee, provided that you duplicate % either gratis or for a Distributor Fee, provided that you duplicate
% all of the original copyright notices and associated disclaimers. At % all of the original copyright notices and associated disclaimers. At
% your discretion, such verbatim copies may or may not include a % your discretion, such verbatim copies may or may not include a
% Compiled form of the Package. % Compiled form of the Package.
% %
% (3) You may apply any bug fixes, portability changes, and other % (3) You may apply any bug fixes, portability changes, and other
% modifications made available from the Copyright Holder. The resulting % modifications made available from the Copyright Holder. The resulting
% Package will still be considered the Standard Version, and as such % Package will still be considered the Standard Version, and as such
% will be subject to the Original License. % will be subject to the Original License.
% %
% Distribution of Modified Versions of the Package as Source % Distribution of Modified Versions of the Package as Source
% %
% (4) You may Distribute your Modified Version as Source (either gratis % (4) You may Distribute your Modified Version as Source (either gratis
% or for a Distributor Fee, and with or without a Compiled form of the % or for a Distributor Fee, and with or without a Compiled form of the
% Modified Version) provided that you clearly document how it differs % Modified Version) provided that you clearly document how it differs
% from the Standard Version, including, but not limited to, documenting % from the Standard Version, including, but not limited to, documenting
% any non-standard features, executables, or modules, and provided that % any non-standard features, executables, or modules, and provided that
% you do at least ONE of the following: % you do at least ONE of the following:
% %
% (a) make the Modified Version available to the Copyright Holder of the % (a) make the Modified Version available to the Copyright Holder of the
% Standard Version, under the Original License, so that the Copyright % Standard Version, under the Original License, so that the Copyright
% Holder may include your modifications in the Standard Version. (b) % Holder may include your modifications in the Standard Version. (b)
@ -127,7 +127,7 @@
% %
% Distribution of Compiled Forms of the Standard Version or % Distribution of Compiled Forms of the Standard Version or
% Modified Versions without the Source % Modified Versions without the Source
% %
% (5) You may Distribute Compiled forms of the Standard Version without % (5) You may Distribute Compiled forms of the Standard Version without
% the Source, provided that you include complete instructions on how to % the Source, provided that you include complete instructions on how to
% get the Source of the Standard Version. Such instructions must be % get the Source of the Standard Version. Such instructions must be
@ -138,13 +138,13 @@
% within thirty days after you become aware that the instructions are % within thirty days after you become aware that the instructions are
% invalid, then you do not forfeit any of your rights under this % invalid, then you do not forfeit any of your rights under this
% license. % license.
% %
% (6) You may Distribute a Modified Version in Compiled form without the % (6) You may Distribute a Modified Version in Compiled form without the
% Source, provided that you comply with Section 4 with respect to the % Source, provided that you comply with Section 4 with respect to the
% Source of the Modified Version. % Source of the Modified Version.
% %
% Aggregating or Linking the Package % Aggregating or Linking the Package
% %
% (7) You may aggregate the Package (either the Standard Version or % (7) You may aggregate the Package (either the Standard Version or
% Modified Version) with other packages and Distribute the resulting % Modified Version) with other packages and Distribute the resulting
% aggregation provided that you do not charge a licensing fee for the % aggregation provided that you do not charge a licensing fee for the
@ -152,7 +152,7 @@
% components in the aggregation are permitted. The terms of this license % components in the aggregation are permitted. The terms of this license
% apply to the use and Distribution of the Standard or Modified Versions % apply to the use and Distribution of the Standard or Modified Versions
% as included in the aggregation. % as included in the aggregation.
% %
% (8) You are permitted to link Modified and Standard Versions with % (8) You are permitted to link Modified and Standard Versions with
% other works, to embed the Package in a larger work of your own, or to % other works, to embed the Package in a larger work of your own, or to
% build stand-alone binary or bytecode versions of applications that % build stand-alone binary or bytecode versions of applications that
@ -160,7 +160,7 @@
% provided the result does not expose a direct interface to the Package. % provided the result does not expose a direct interface to the Package.
% %
% Items That are Not Considered Part of a Modified Version % Items That are Not Considered Part of a Modified Version
% %
% (9) Works (including, but not limited to, modules and scripts) that % (9) Works (including, but not limited to, modules and scripts) that
% merely extend or make use of the Package, do not, by themselves, cause % merely extend or make use of the Package, do not, by themselves, cause
% the Package to be a Modified Version. In addition, such works are not % the Package to be a Modified Version. In addition, such works are not
@ -168,21 +168,21 @@
% terms of this license. % terms of this license.
% %
% General Provisions % General Provisions
% %
% (10) Any use, modification, and distribution of the Standard or % (10) Any use, modification, and distribution of the Standard or
% Modified Versions is governed by this Artistic License. By using, % Modified Versions is governed by this Artistic License. By using,
% modifying or distributing the Package, you accept this license. Do not % modifying or distributing the Package, you accept this license. Do not
% use, modify, or distribute the Package, if you do not accept this % use, modify, or distribute the Package, if you do not accept this
% license. % license.
% %
% (11) If your Modified Version has been derived from a Modified Version % (11) If your Modified Version has been derived from a Modified Version
% made by someone other than you, you are nevertheless required to % made by someone other than you, you are nevertheless required to
% ensure that your Modified Version complies with the requirements of % ensure that your Modified Version complies with the requirements of
% this license. % this license.
% %
% (12) This license does not grant you the right to use any trademark, % (12) This license does not grant you the right to use any trademark,
% service mark, tradename, or logo of the Copyright Holder. % service mark, tradename, or logo of the Copyright Holder.
% %
% (13) This license includes the non-exclusive, worldwide, % (13) This license includes the non-exclusive, worldwide,
% free-of-charge patent license to make, have made, use, offer to sell, % free-of-charge patent license to make, have made, use, offer to sell,
% sell, import and otherwise transfer the Package with respect to any % sell, import and otherwise transfer the Package with respect to any
@ -192,7 +192,7 @@
% that the Package constitutes direct or contributory patent % that the Package constitutes direct or contributory patent
% infringement, then this Artistic License to you shall terminate on the % infringement, then this Artistic License to you shall terminate on the
% date that such litigation is filed. % date that such litigation is filed.
% %
% (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT % (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT
% HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED % HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED
% WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A % WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
@ -207,7 +207,7 @@
:- module(ad_converter,[term_expansion_intern_ad/4, :- module(ad_converter,[term_expansion_intern_ad/4,
op(1149, yfx, <-- ), op(1149, yfx, <-- ),
op( 550, yfx, :: ) op( 550, yfx, :: )
]). ƒcrete ]).
% general yap modules % general yap modules
:- use_module(library(lists),[member/2,append/3]). :- use_module(library(lists),[member/2,append/3]).
@ -218,7 +218,7 @@
:- discontiguous user:(<--)/2, problog:(<--)/2. :- discontiguous user:(<--)/2, problog:(<--)/2.
:- discontiguous user:myclause/1, problog:myclause/1. % notation of ADs in LFI-ProbLog :- discontiguous user:myclause/1, problog:myclause/1. % notation of ADs in LFI-ProbLog
:- op( 550, yfx, :: ). :- op( 550, yfx, :: ).
% for annotated disjunctions % for annotated disjunctions
@ -284,8 +284,6 @@ term_expansion_intern_ad((Head<--Body), Module, Mode, [user:ad_intern((Head<--Bo
; ;
findall(Module:B,member(B,Aux_Clauses),Result,Result_Atoms) findall(Module:B,member(B,Aux_Clauses),Result,Result_Atoms)
), ),
( (
problog_flag(show_ad_compilation,true) problog_flag(show_ad_compilation,true)
-> ->
@ -300,16 +298,11 @@ term_expansion_intern_ad((Head<--Body), Module, Mode, [user:ad_intern((Head<--Bo
; ;
true true
). ).
term_expansion_intern_ad( (Head<--Body),_,_) :- term_expansion_intern_ad( (Head<--Body),_,_) :-
format(chars(Error), 'Error at compiling the annotated disjunction ~q<--~m.',[Head,Body]), format(chars(Error), 'Error at compiling the annotated disjunction ~q<--~m.',[Head,Body]),
print_message(error,Error), print_message(error,Error),
fail. fail.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% proper_ad_head(+Head, +Acc) % proper_ad_head(+Head, +Acc)
% %
@ -391,7 +384,7 @@ create_mws_atom(A,Body_Vars,ID,Pos,A2) :-
create_ad_aux_facts(P::_, _, _, _, Acc, []) :- create_ad_aux_facts(P::_, _, _, _, Acc, []) :-
% if the probabilities in the head of the AD % if the probabilities in the head of the AD
% sum up to 1.0 drop the last aux fact % sum up to 1.0 drop the last aux fact
abs(Acc+P-1.0) < 0.0000001, abs(Acc+P-1.0) < 0.0000001,
!. !.
create_ad_aux_facts(P::Atom, Body_Vars, ID, Pos, Acc, [P1::ProbFact]) :- create_ad_aux_facts(P::Atom, Body_Vars, ID, Pos, Acc, [P1::ProbFact]) :-
@ -416,7 +409,7 @@ create_ad_aux_facts((P::Atom;T), Body_Vars, ID, Pos, Acc, [P1::ProbFact|T2]) :-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_tunable_ad_aux_facts(t(_)::_,_,_,Pos,[]) :- create_tunable_ad_aux_facts(t(_)::_,_,_,Pos,[]) :-
@ -431,7 +424,7 @@ create_tunable_ad_aux_facts((t(_)::Atom;T),Body_Vars,ID,Pos,[t(_)::ProbFact|T2])
create_tunable_ad_aux_facts(T,Body_Vars,ID,Pos2,T2). create_tunable_ad_aux_facts(T,Body_Vars,ID,Pos2,T2).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_aux_bodies(_::Atom, Body_Vars, Body, ID, Pos, Aux_Facts , _, [(Atom:-Body2)]) :- create_aux_bodies(_::Atom, Body_Vars, Body, ID, Pos, Aux_Facts , _, [(Atom:-Body2)]) :-
@ -458,7 +451,7 @@ create_aux_bodies((_::Atom; T), Body_Vars, Body, ID, Pos, Aux_Facts , Mode, [(At
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tuple_append(true,X,X) :- tuple_append(true,X,X) :-
!. !.

View File

@ -4,7 +4,7 @@
% %
% $Date: 2011-11-28 14:41:26 +0100 (Mon, 28 Nov 2011) $ % $Date: 2011-11-28 14:41:26 +0100 (Mon, 28 Nov 2011) $
% $Revision: 6764 $ % $Revision: 6764 $
% %
% Main author of this file: % Main author of this file:
% Bernd Gutmann % Bernd Gutmann
% %
@ -61,7 +61,7 @@ grounder_reachable_atom(Atom) :-
%= The predicate always succeeds exactly once %= The predicate always succeeds exactly once
%= %=
%= This is basically a vanilla meta-interpreter, that follows all %= This is basically a vanilla meta-interpreter, that follows all
%= paths in the SLD tree and records which atoms can be reached %= paths in the SLD tree and records which atoms can be reached
%= while proving A. %= while proving A.
%= the only "speciality" is that the negation of a probilistic %= the only "speciality" is that the negation of a probilistic
%= fact always succeeds %= fact always succeeds
@ -72,13 +72,12 @@ grounder_reachable_atom(Atom) :-
grounder_compute_reachable_atoms(A,ID,Success) :- grounder_compute_reachable_atoms(A,ID,Success) :-
bb_put(dep_proven,false), bb_put(dep_proven,false),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
( % go over all proofs for A in interpretation ID ( % go over all proofs for A in interpretation ID
tabled_meta_interpreter(A,ID), tabled_meta_interpreter(A,ID),
writeln(A),
bb_put(dep_proven,true), bb_put(dep_proven,true),
fail; % go to next proof fail; % go to next proof
true true
), ),
@ -144,12 +143,10 @@ tabled_meta_interpreter(Atom,ID) :-
% hence we need to be carefull not to ignore any path in the SLD tree % hence we need to be carefull not to ignore any path in the SLD tree
% %
% we can ignore probabilistic facts and only look for myclauses % we can ignore probabilistic facts and only look for myclauses
% since in ProbLog the requirement is that non-ground facts have to be % since in ProbLog the requirement is that non-ground facts have to be
% ground at query time % ground at query time
current_predicate(user:myclause/3), current_predicate(user:myclause/3),
user:myclause(ID,Atom,Body), user:myclause(ID,Atom,Body),
writeln(Atom:Body),
tabled_meta_interpreter(Body,ID), tabled_meta_interpreter(Body,ID),
% check whether Atom got grounded now, % check whether Atom got grounded now,
@ -188,7 +185,7 @@ tabled_meta_interpreter(Atom,ID) :-
tabled_meta_interpreter_aux_ground_atom(Atom,_ID) :- tabled_meta_interpreter_aux_ground_atom(Atom,_ID) :-
probabilistic_fact(_, Atom, _), probabilistic_fact(_, Atom, _),
!. !.
% probabilistic facts and background knowledge must not have % probabilistic facts and background knowledge must not have
% an atom in common. hence we can savely put that cut above. % an atom in common. hence we can savely put that cut above.
tabled_meta_interpreter_aux_ground_atom(Atom,ID) :- tabled_meta_interpreter_aux_ground_atom(Atom,ID) :-
@ -236,9 +233,9 @@ grounder_ground_term_with_reachable_atoms(X,'$atom'(X)) :-
%= X is %= X is
%= ID is %= ID is
%= %=
%= %=
%= %=
%= %=
%======================================================================== %========================================================================
@ -250,6 +247,3 @@ grounder_completion_for_atom(Head,InterpretationID,'$atom'(Head)<=>Disjunction)
),Bodies), ),Bodies),
Bodies\==[], Bodies\==[],
list_to_disjunction(Bodies,Disjunction). list_to_disjunction(Bodies,Disjunction).

View File

@ -244,15 +244,15 @@ set_problog_path( _Path):-
atom_concat(ROOT, '/bin', P2), atom_concat(ROOT, '/bin', P2),
getenv('PATH',Dirs), getenv('PATH',Dirs),
path_grouping( PathSep ), path_grouping( PathSep ),
atomic_list_concat( LPaths, PathSep, Dirs), atomic_list_concat( LPaths, PathSep, Dirs),
set_problog_paths( [P1,P2| LPaths] ), set_problog_paths( [P1,P2| LPaths] ),
fail. fail.
set_problog_path(Path):- set_problog_path(Path):-
path_separator( S ), path_separator( S ),
sub_atom(Path, _, 1, 0, S), !, sub_atom(Path, _, 1, 0, S), !,
sub_atom(Path, _, _, 1, Path0), sub_atom(Path, _, _, 1, Path0),
asserta(problog_path(Path0)). asserta(problog_path(Path0)).
set_problog_path(Path):- set_problog_path(Path):-
asserta(problog_path(Path)). asserta(problog_path(Path)).
@ -309,7 +309,8 @@ calc_md5_intern(Filename,MD5) :-
file_to_codes( F, Codes, LF ) :- file_to_codes( F, Codes, LF ) :-
open(F, read, S), open(F, read, S),
get_codes( S, Codes, LF). get_codes( S, Codes, LF),
close(S).
get_codes(S, [C|L], LF) :- get_codes(S, [C|L], LF) :-
get_code(S, C), get_code(S, C),
@ -319,13 +320,13 @@ get_codes(S, [C|L], LF) :-
get_codes(_, LF, LF). get_codes(_, LF, LF).
%======================================================================== %========================================================================
%= %=
%= %=
%= %=
%======================================================================== %========================================================================
check_existance(FileName):- check_existance(FileName):-
convert_filename_to_problog_path(FileName, Path), convert_filename_to_problog_path(FileName, Path),
catch(file_exists(Path), _, fail), !. catch(file_exists(Path), _, fail), !.
check_existance(FileName):- check_existance(FileName):-
@ -339,5 +340,3 @@ path_grouping(PathSep) :-
path_separator('\\') :- path_separator('\\') :-
current_prolog_flag( windows, true ). current_prolog_flag( windows, true ).
path_separator('/'). path_separator('/').

View File

@ -1564,7 +1564,7 @@ combine_ancestors(Ancestors, AddAncestors, AllAncestors):-
my_trie_print(T):- my_trie_print(T):-
trie_traverse(T, R), trie_traverse(T, R),
trie_get_entry(R, E), trie_get_entry(R, E),
writeln(E), format('~w~n', [E]),
fail. fail.
my_trie_print(_T). my_trie_print(_T).
@ -1844,7 +1844,7 @@ ptree_decomposition(Trie, BDDFileName, VarFileName) :-
tmpnam(TmpFile1), tmpnam(TmpFile1),
nb_setval(next_inter_step, 1), nb_setval(next_inter_step, 1),
variables_in_dbtrie(Trie, T), variables_in_dbtrie(Trie, T),
length(T, VarCnt), length(T, VarCnt),
tell(VarFileName), tell(VarFileName),
bdd_vars_script(T), bdd_vars_script(T),

View File

@ -615,7 +615,6 @@ init_queries :-
init_one_query(Training_ID,training) init_one_query(Training_ID,training)
) )
), ),
writeln(Training_ID),
forall( forall(
( (
@ -884,7 +883,7 @@ update_query(QueryID,ClusterID ,Method,Command,PID,Output_File_Name) :-
create_bdd_output_file_name(QueryID,ClusterID,Iteration,Output_File_Name), create_bdd_output_file_name(QueryID,ClusterID,Iteration,Output_File_Name),
create_bdd_file_name(QueryID,ClusterID,BDD_File_Name), create_bdd_file_name(QueryID,ClusterID,BDD_File_Name),
convert_filename_to_problog_path('problogbdd_lfi',Absolute_Name), convert_filename_to_problog_path('simplecudd_lfi',Absolute_Name),
atomic_concat([Absolute_Name, atomic_concat([Absolute_Name,
' -i "', Input_File_Name, '"', ' -i "', Input_File_Name, '"',