diff --git a/packages/ProbLog/problog.yap b/packages/ProbLog/problog.yap index 7331a2e81..034828e65 100644 --- a/packages/ProbLog/problog.yap +++ b/packages/ProbLog/problog.yap @@ -371,6 +371,7 @@ init_global_params :- set_problog_flag(bdd_file,example_bdd), set_problog_flag(dir,output), set_problog_flag(save_bdd,false), + set_problog_flag(hacked_proofs,false), set_problog_flag(verbose,true). % problog_flags, % print_sep_line, @@ -494,7 +495,7 @@ problog_predicate(Name, Arity, ProblogName) :- append(Args,[Prob],L1), ProbFact =.. [ProblogName,ID|L1], prolog_load_context(module,Mod), - + make_add_to_proof(ID2,ProbEval,AddToProof), assert( (Mod:OriginalGoal :- ProbFact, ( non_ground_fact(ID) @@ -505,7 +506,7 @@ problog_predicate(Name, Arity, ProblogName) :- ), % take the log of the probability (for non ground facts with variable as probability ProbEval is Prob, - add_to_proof(ID2,ProbEval) + AddToProof )), assert( (Mod:problog_not(OriginalGoal) :- ProbFact, @@ -525,6 +526,14 @@ problog_predicate(Name, Arity, ProblogName) :- ArityPlus2 is Arity+2, dynamic(problog:ProblogName/ArityPlus2). +make_add_to_proof(ID2,ProbEval,O) :- + problog_flag(hacked_proofs,true), !, + O = hacked_add_to_proof(ID2,ProbEval). +make_add_to_proof(ID2,ProbEval,add_to_proof(ID2,ProbEval)). + + + + % generate next global identifier probclause_id(ID) :- nb_getval(probclause_counter,ID), !, @@ -553,7 +562,7 @@ non_ground_fact_grounding_id(Goal,ID) :- nb_getval(non_ground_fact_grounding_id_counter,ID), ID2 is ID+1, nb_setval(non_ground_fact_grounding_id_counter,ID2), - assert(grounding_is_known(Goal,ID)) + once(assert(grounding_is_known(Goal,ID))) ) ). @@ -717,6 +726,22 @@ add_to_proof(ID,Prob) :- ) ). +% simpliciation +hacked_add_to_proof(ID,Prob) :- + b_getval(problog_probability, CurrentP), + nb_getval(problog_threshold, CurrentThreshold), + multiply_probabilities(CurrentP, Prob, NProb), + b_getval(problog_current_proof, IDs), + ( + NProb < CurrentThreshold + -> + upper_bound([ID|IDs]), + fail + ; + b_setval(problog_probability, NProb), + b_setval(problog_current_proof, [ID|IDs]) + ). + %%%% Bernd, changes for negated ground facts add_to_proof_negated(ID,Prob) :- ( @@ -1248,13 +1273,17 @@ update_current_kbest(K,NewLogProb,Cl) :- (NewLength < K -> assert(current_kbest(OldThres,NewList,NewLength)) ; - (NewLength>K -> + (NewLength>K + -> First is NewLength-K+1, cutoff(NewList,NewLength,First,FinalList,FinalLength) - ; FinalList=NewList, FinalLength=NewLength), - FinalList=[NewThres-_|_], - nb_setval(problog_threshold,NewThres), - assert(current_kbest(NewThres,FinalList,FinalLength))). + ; + FinalList=NewList, FinalLength=NewLength + ), + FinalList=[NewThres-_|_], + nb_setval(problog_threshold,NewThres), + assert(current_kbest(NewThres,FinalList,FinalLength)) + ). sorted_insert(A,[],[A]). sorted_insert(A-LA,[B1-LB1|B], [A-LA,B1-LB1|B] ) :- diff --git a/packages/ProbLog/problog/flags.yap b/packages/ProbLog/problog/flags.yap index 0dbf534d5..0ef2f9c5d 100644 --- a/packages/ProbLog/problog/flags.yap +++ b/packages/ProbLog/problog/flags.yap @@ -216,7 +216,7 @@ :- ensure_loaded(library(system)). -:- dynamic bdd_time/1, first_threshold/1, last_threshold/1, id_stepsize/1, prunecheck/1, maxsteps/1, mc_batchsize/1, mc_logfile/1, bdd_file/1, bdd_par_file/1, bdd_result/1, work_dir/1, save_bdd/1, problog_verbose/1. +:- dynamic bdd_time/1, first_threshold/1, last_threshold/1, id_stepsize/1, prunecheck/1, maxsteps/1, mc_batchsize/1, mc_logfile/1, bdd_file/1, bdd_par_file/1, bdd_result/1, work_dir/1, save_bdd/1, problog_verbose/1, hacked_proofs/1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % global parameters that can be set using set_problog_flag/2 @@ -258,6 +258,8 @@ get_problog_flag(save_bdd,X) :- save_bdd(X). get_problog_flag(verbose,X) :- problog_verbose(X). +get_problog_flag(hacked_proofs,X) :- + hacked_proofs(X). %%%%%%%%%%%% @@ -472,6 +474,16 @@ set_problog_flag(verbose,_) :- flush_output(user), fail. +set_problog_flag(hacked_proofs,true) :- + retractall(hacked_proofs(_)), + assert(hacked_proofs(true)). +set_problog_flag(hacked_proofs,false) :- + retractall(hacked_proofs(_)), + assert(hacked_proofs(true)). +set_problog_flag(hacked_proofs,V) :- + format(user,'\% ERROR: value ~w should be \'true\' or \'false\'!~n',[V]), + flush_output(user), + fail. %%%%%%%%%%%%%%%%%%%%%%%% % show values diff --git a/packages/ProbLog/problog_learning.yap b/packages/ProbLog/problog_learning.yap index fa762a115..a121129c5 100644 --- a/packages/ProbLog/problog_learning.yap +++ b/packages/ProbLog/problog_learning.yap @@ -683,6 +683,8 @@ init_queries :- ( % go over all training examples current_predicate(user:example/3), user:example(ID,Query,Prob), +% statistics(runtime,[_,T]), +% my_format(3,' training example ~q: ~q ~q~n',[ID,Query,T]), my_format(3,' training example ~q: ~q~n',[ID,Query]), flush_output(user), init_one_query(ID,Query,training),