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
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
You can also use the CUDD interface package in YAP. You will need to
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.
@ -279,7 +279,7 @@ A probabilistic fact is encoded in ProbLog by preceding a predicate with a proba
~~~~
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
@ -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.
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.
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
Flag telling whether to use the builtin trie to trie transformation.
The possible values for this flag are true or false.
Flag telling whether to use the builtin trie to trie transformation.
The possible values for this flag are true or false.
+ db_trie_opt_lvl
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
@ -425,8 +425,8 @@ The possible values for this flag are true or false.
+ db_min_prefix
Sets the minimum size of the prefix for dbtrie to optimize.
The possible values for this flag are any integer
Sets the minimum size of the prefix for dbtrie to optimize.
The possible values for this flag are any integer
+ use_naive_trie
@ -625,7 +625,7 @@ The possible values for this flag are any valid path name.
+ 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).
+ reuse_initialized_bdds
@ -646,12 +646,12 @@ The possible values for this flag are true or false.
+ init_method
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
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
@ -660,7 +660,7 @@ The possible values for this flag are any integer greater than zero.
+ 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).
+ slope
@ -890,7 +890,7 @@ The possible values for this flag are any number greater than zero.
:- dynamic current_prob/1.
:- dynamic possible_proof/2.
:- dynamic impossible_proof/1.
:- table conditional_prob/4.
% ProbLog files declare prob. facts as P::G
@ -1068,7 +1068,8 @@ reset_control :-
problog_control(off,mc),
problog_control(off,limit),
% problog_control(off,exact),
problog_control(off,remember).
problog_control(off,remember),
nb_setval(problog_steps, 1).
:- initialization(reset_control).
@ -1105,12 +1106,14 @@ generate_atoms(N, A):-
% converts annotated disjunctions
term_expansion_intern((Head<--Body), Module, C):-
term_expansion_intern_ad((Head<--Body), Module,inference, C).
% converts ?:: prefix to ? :: infix, as handled by other clause
term_expansion_intern((Annotation::Fact), Module, ExpandedClause) :-
Annotation == ( '?' ),
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
term_expansion_intern((Annotation :: Head :- Body), Module, problog:ExpandedClause) :-
@ -1191,7 +1194,7 @@ term_expansion_intern(Head :: Goal,Module,problog:ProbFact) :-
length(Args,Arity),
atomic_concat([problogcontinuous_,Name],ProblogName),
probclause_id(ID),
% is it a tunable fact?
(
(number(Mu),number(Sigma))
@ -1218,7 +1221,7 @@ term_expansion_intern(Head :: Goal,Module,problog:ProbFact) :-
% handles probabilistic facts
term_expansion_intern(P :: Goal,Module,problog:ProbFact) :-
@ -1286,7 +1289,7 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
->
P=P1;
P=0.5
)
)
);
(
number(Initializer)
@ -1294,7 +1297,7 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
P=Initializer
;
atom(Initializer)
->
->
call(user:Initializer,Goal,P)
;
throw(unkown_probability_initializer(Initializer))
@ -1303,6 +1306,14 @@ sample_initial_value_for_tunable_fact(Goal,LogP) :-
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).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -1477,7 +1488,7 @@ non_ground_fact_grounding_id(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,'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]),
@ -1512,15 +1523,15 @@ prove_problog_fact(ClauseID,GroundID,Prob) :-
(problog_control(check,find_decisions) ->
signal_decision(ClauseID,GroundID)
;
(Prob = ('?') ->
(Prob == ('?') ->
add_to_proof(GroundID,0) % 0 is log(1)!
;
% Checks needed for LeDTProbLog
(Prob = always ->
(Prob == always ->
% Always true, do not add to trie
true
;
(Prob = never ->
(Prob == never ->
% Always false, do not add to trie
fail
;
@ -1865,13 +1876,13 @@ add_to_proof(ID, LogProb) :-
b_getval(problog_probability, CurrentLogProb),
nb_getval(problog_threshold, CurrentThreshold),
b_getval(problog_current_proof, IDs),
% check whether negation of this fact is already used in proof
\+ open_end_memberchk(not(ID),IDs),
( % check whether this fact is already used in proof
open_end_memberchk(ID, IDs)
->
->
true;
(
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
\+ open_end_memberchk(ID, IDs),
( % check wether negation of this fact is already used in proof
open_end_memberchk(not(ID), IDs)
->
@ -2040,7 +2051,7 @@ init_problog(Threshold) :-
reset_control,
LT is log(Threshold),
b_setval(problog_probability, 0.0),
b_setval(problog_current_proof, []),
nb_setval(problog_current_proof, []),
nb_setval(problog_threshold, LT),
problog_flag(maxsteps,MaxS),
init_tabling,
@ -2064,6 +2075,9 @@ init_problog(Threshold) :-
timer_reset(sld_time),
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
% note that current ptree implementation doesn't provide the check as there's no efficient method known so far...
prune_check(Proof, Trie) :-
@ -2309,7 +2323,7 @@ eval_dnf(OriTrie1, Prob, Status) :-
delete_ptree(DBTrie),
timer_stop(script_gen_time_builtin,Script_Gen_Time_Builtin),
problog_var_set(bdd_script_time(Builtin), Script_Gen_Time_Builtin),
timer_start(bdd_gen_time_builtin),
@ -2418,7 +2432,7 @@ execute_bdd_tool(BDDFile, BDDParFile, Prob, Status):-
;
Param = ParamD
),
convert_filename_to_problog_path('problogbdd', ProblogBDD),
convert_filename_to_problog_path('simplecudd', ProblogBDD),
convert_filename_to_working_path(ResultFileFlag, ResultFile),
atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command),
shell(Command, Return),
@ -2473,7 +2487,7 @@ add_solution :-
Cont_IDs == []
->
Continuous=[];
(
(
proof_id(ProofID),
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)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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, _, _) :-
init_problog_low(Threshold),
problog_control(off, up),
@ -2920,7 +2938,7 @@ problog_kbest_explanations(Goal, K, Explanations) :-
problog_control(off,up),
problog_kbest_id(Goal, K),
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_flag(first_threshold,InitT),
@ -3383,14 +3401,14 @@ initialise_optimal_proof([Proof-MaxAdded|Rest],Theta) :-
OptAdded is Popt - Pcurr,
(MaxAdded > OptAdded ->
calculate_added_prob(Proof, P,ok),
%update the maximal added probability
retractall(possible_proof(Proof,_)),
AddedP is P - Pcurr,
(AddedP > Theta ->
%the proof can still add something
assert(possible_proof(Proof,AddedP)),
%Check whether to change the optimal proof
(P > Popt ->
retractall(optimal_proof(_,_)),
@ -3485,7 +3503,7 @@ calculate_added_prob([UsedFact|UsedProof],[],Conditions,P,S) :-
convert_filename_to_working_path('save_params', ParFile),
negate(UsedFact,NegatedFact),
conditional_prob(SONodeDumpFile,ParFile,[NegatedFact|Conditions],Pcond,Scond),
( Srec = ok ->
( Srec = ok ->
( Scond = ok ->
S = ok,
get_fact_probability(UsedFact,Pfact),
@ -3510,7 +3528,7 @@ bubblesort(List,Sorted):-
swap(List,List1),!,
bubblesort(List1,Sorted).
bubblesort(Sorted,Sorted).
swap([X,Y|Rest], [Y,X|Rest]):- bigger(X,Y).
swap([Z|Rest],[Z|Rest1]):- swap(Rest,Rest1).
@ -3542,7 +3560,7 @@ bigger(X,Y) :-
X > IDY.
bigger(X,Y) :-
X > Y.
round_added_prob(P,RoundedP) :-
P < 1,
Pnew is P*10,
@ -3564,7 +3582,7 @@ remove_used_facts([Fact|Rest],Used,New) :-
Used = [Fact|RecUsed],
New = RecNew
;
Used = RecUsed,
New = [Fact|RecNew]
).
@ -3614,7 +3632,7 @@ change_par_file(ParFile,[not(ID)|Rest],ChangedParFile) :-
open(ChangedParFile,'append',S),
tell(S),
format('@x~w\n0\n',[ID]),
told.
told.
% Copies a file
copy_file(From,To) :-
@ -3688,7 +3706,7 @@ eval_bdd_forest(N,Probs,Status) :-
;
Param = ParamD
),
convert_filename_to_problog_path('problogbdd', ProblogBDD),
convert_filename_to_problog_path('simplecudd', ProblogBDD),
problog_flag(bdd_result,ResultFileFlag),
convert_filename_to_working_path(ResultFileFlag, ResultFile),
atomic_concat([ProblogBDD, Param,' -l ', BDDFile, ' -i ', BDDParFile, ' -m p -t ', BDDTime, ' > ', ResultFile], Command),
@ -4133,7 +4151,7 @@ required(Feature) :-
Val == required.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
format_if_verbose(H,T,L) :-
@ -4170,4 +4188,3 @@ user:term_expansion(Term,ExpandedTerm) :-
problog:term_expansion_intern(Term,Mod,ExpandedTerm).
%% @}

View File

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

View File

@ -4,7 +4,7 @@
%
% $Date: 2011-11-28 14:41:26 +0100 (Mon, 28 Nov 2011) $
% $Revision: 6764 $
%
%
% Main author of this file:
% Bernd Gutmann
%
@ -61,7 +61,7 @@ grounder_reachable_atom(Atom) :-
%= The predicate always succeeds exactly once
%=
%= 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.
%= the only "speciality" is that the negation of a probilistic
%= fact always succeeds
@ -72,13 +72,12 @@ grounder_reachable_atom(Atom) :-
grounder_compute_reachable_atoms(A,ID,Success) :-
bb_put(dep_proven,false),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
( % go over all proofs for A in interpretation ID
tabled_meta_interpreter(A,ID),
writeln(A),
bb_put(dep_proven,true),
fail; % go to next proof
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
%
% 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
current_predicate(user:myclause/3),
user:myclause(ID,Atom,Body),
writeln(Atom:Body),
tabled_meta_interpreter(Body,ID),
% check whether Atom got grounded now,
@ -188,7 +185,7 @@ tabled_meta_interpreter(Atom,ID) :-
tabled_meta_interpreter_aux_ground_atom(Atom,_ID) :-
probabilistic_fact(_, Atom, _),
!.
!.
% probabilistic facts and background knowledge must not have
% an atom in common. hence we can savely put that cut above.
tabled_meta_interpreter_aux_ground_atom(Atom,ID) :-
@ -236,9 +233,9 @@ grounder_ground_term_with_reachable_atoms(X,'$atom'(X)) :-
%= X is
%= ID is
%=
%=
%=
%=
%=
%=
%=
%========================================================================
@ -250,6 +247,3 @@ grounder_completion_for_atom(Head,InterpretationID,'$atom'(Head)<=>Disjunction)
),Bodies),
Bodies\==[],
list_to_disjunction(Bodies,Disjunction).

View File

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

View File

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

View File

@ -615,7 +615,6 @@ init_queries :-
init_one_query(Training_ID,training)
)
),
writeln(Training_ID),
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_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,
' -i "', Input_File_Name, '"',