learn again

This commit is contained in:
Vitor Santos Costa 2016-06-03 16:23:28 +01:00
parent e441f30c4c
commit 8ce16f64d9
4 changed files with 33 additions and 14 deletions

View File

@ -14,7 +14,7 @@
% will run 20 iterations of learning with default settings % will run 20 iterations of learning with default settings
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:- use_module(library(problog_lbdd)). :- use_module(library(problog)).
:- use_module(library(problog_learning_lbdd)). :- use_module(library(problog_learning_lbdd)).
%%%% %%%%

View File

@ -1,4 +1,4 @@
%%% -*- Mode: Prolog; -*- 1%%% -*- Mode: Prolog; -*-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@ -246,14 +246,17 @@
:- dynamic(query_md5/3). :- dynamic(query_md5/3).
:- multifile(user:example/4). :- multifile(user:example/4).
:- multifile(user:problog_drop_example/1).
user:example(A,B,C,=) :- user:example(A,B,C,=) :-
current_predicate(user:example/3), current_predicate(user:example/3),
user:example(A,B,C). user:example(A,B,C),
\+ user:problog_drop_example(B).
:- multifile(user:test_example/4). :- multifile(user:test_example/4).
user:test_example(A,B,C,=) :- user:test_example(A,B,C,=) :-
current_predicate(user:test_example/3), current_predicate(user:test_example/3),
user:test_example(A,B,C). user:test_example(A,B,C),
\+ user:problog_drop_example(B).
%======================================================================== %========================================================================
@ -514,7 +517,7 @@ init_learning :-
-> ->
( (
format_learning(2,'Theory uses continuous facts.~nWill use problog_exact/3 as initalization method.~2n',[]), format_learning(2,'Theory uses continuous facts.~nWill use problog_exact/3 as initalization method.~2n',[]),
set_problog_flag(init_method,(Query,Probability,BDDFile,ProbFile,problog_exact_save(Query,Probability,_Status,BDDFile,ProbFile))) set_problog_flag(init_method,(Query,Probability,BDDFile,ProbFile,problog:problog_exact_save(Query,Probability,_Status,BDDFile,ProbFile)))
); );
true true
), ),
@ -524,7 +527,7 @@ init_learning :-
-> ->
( (
format_learning(2,'Theory uses tabling.~nWill use problog_exact/3 as initalization method.~2n',[]), format_learning(2,'Theory uses tabling.~nWill use problog_exact/3 as initalization method.~2n',[]),
set_problog_flag(init_method,(Query,Probability,BDDFile,ProbFile,problog_exact_save(Query,Probability,_Status,BDDFile,ProbFile))) set_problog_flag(init_method,(Query,Probability,BDDFile,ProbFile,problog:problog_exact_save(Query,Probability,_Status,BDDFile,ProbFile)))
); );
true true
), ),

View File

@ -243,19 +243,27 @@
:- dynamic(query_md5/2). :- dynamic(query_md5/2).
% used to identify queries which have identical proofs
:- dynamic(query_is_similar/2).
:- dynamic(query_md5/3).
% used to identify queries which have identical proofs % used to identify queries which have identical proofs
:- dynamic(query_is_similar/2). :- dynamic(query_is_similar/2).
:- dynamic(query_md5/3). :- dynamic(query_md5/3).
:- multifile(user:example/4). :- multifile(user:example/4).
:- multifile(user:problog_discard_example/1).
user:example(A,B,C,=) :- user:example(A,B,C,=) :-
current_predicate(user:example/3), current_predicate(user:example/3),
user:example(A,B,C). user:example(A,B,C),
\+ user:problog_discard_example(B).
:- multifile(user:test_example/4). :- multifile(user:test_example/4).
user:test_example(A,B,C,=) :- user:test_example(A,B,C,=) :-
current_predicate(user:test_example/3), current_predicate(user:test_example/3),
user:test_example(A,B,C). user:test_example(A,B,C),
\+ user:problog_discard_example(B).
%======================================================================== %========================================================================
@ -604,7 +612,7 @@ bdd_input_file(Filename) :-
concat_path_with_filename(Dir,'input.txt',Filename). concat_path_with_filename(Dir,'input.txt',Filename).
init_one_query(QueryID,Query,Type) :- init_one_query(QueryID,Query,Type) :-
format_learning(3,' ~q example ~q: ~q~n',[Type,QueryID,Query]), % format_learning(3,' ~q example ~q: ~q~n',[Type,QueryID,Query]),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% if BDD file does not exist, call ProbLog % if BDD file does not exist, call ProbLog
@ -614,18 +622,19 @@ init_one_query(QueryID,Query,Type) :-
-> ->
format_learning(3,' Reuse existing BDD ~q~n~n',[QueryID]); format_learning(3,' Reuse existing BDD ~q~n~n',[QueryID]);
( (
b_setval(problog_required_keep_ground_ids,false),
problog_flag(libbdd_init_method,(Query,Bdd,Call)), problog_flag(libbdd_init_method,(Query,Bdd,Call)),
Bdd = bdd(Dir, Tree, MapList), Bdd = bdd(Dir, Tree, MapList),
% trace,
once(Call), once(Call),
rb_new(H0), rb_new(H0),
maplist_to_hash(MapList, H0, Hash), maplist_to_hash(MapList, H0, Hash),
% writeln(Dir:Tree:MapList), Tree \= [],
% writeln(Dir:Tree:MapList),
tree_to_grad(Tree, Hash, [], Grad), tree_to_grad(Tree, Hash, [], Grad),
%% %writeln(Call:Tree),
recordz(QueryID,bdd(Dir, Grad, MapList),_) recordz(QueryID,bdd(Dir, Grad, MapList),_)
) )
), ),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% check wether this BDD is similar to another BDD % check wether this BDD is similar to another BDD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -636,7 +645,7 @@ init_one_query(QueryID,Query,Type) :-
; ;
true true
),!. ),!.
init_one_query(_QueryID,_Query,_Type).

View File

@ -44,8 +44,13 @@ complex_to_andor([Els], Map0, MapF, V) :-
complex_to_and(int(A1,[endlist]), Map0, MapF, V) :- !, complex_to_and(int(A1,[endlist]), Map0, MapF, V) :- !,
check(Map0, A1, V, MapF). check(Map0, A1, V, MapF).
complex_to_and(atom(A1,[endlist]), Map0, MapF, V) :- !,
check(Map0, A1, V, MapF).
complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, not(V)) :- !, complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, not(V)) :- !,
check(Map0, A1, V, MapF). check(Map0, A1, V, MapF).
complex_to_and(atom(A1,Els), Map0, MapF, and(V,T2)) :- !,
check(Map0, A1, V, MapI),
complex_to_andor(Els, MapI, MapF, T2).
complex_to_and(int(A1,Els), Map0, MapF, and(V,T2)) :- !, complex_to_and(int(A1,Els), Map0, MapF, and(V,T2)) :- !,
check(Map0, A1, V, MapI), check(Map0, A1, V, MapI),
complex_to_andor(Els, MapI, MapF, T2). complex_to_andor(Els, MapI, MapF, T2).
@ -79,6 +84,8 @@ tabled_complex_to_andor([Els], Map0, MapF, Tab0, TabF, V) :-
tabled_complex_to_and(int(A1,[endlist]), Map0, MapF, Tab, Tab, V) :- !, tabled_complex_to_and(int(A1,[endlist]), Map0, MapF, Tab, Tab, V) :- !,
check(Map0, A1, V, MapF). check(Map0, A1, V, MapF).
tabled_complex_to_and(atom(A1,[endlist]), Map0, MapF, Tab, Tab, V) :- !,
check(Map0, A1, V, MapF).
tabled_complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, Tab, Tab, not(V)) :- !, tabled_complex_to_and(functor(not,1,[int(A1,[endlist])]), Map0, MapF, Tab, Tab, not(V)) :- !,
check(Map0, A1, V, MapF). check(Map0, A1, V, MapF).
tabled_complex_to_and(T, Map, Map, Tab, Tab, V) :- tabled_complex_to_and(T, Map, Map, Tab, Tab, V) :-