This commit is contained in:
Vitor Santos Costa 2019-04-02 15:32:50 +01:00
parent 63a514cad5
commit 10307c27fe
9 changed files with 59 additions and 14 deletions

View File

@ -1840,6 +1840,15 @@ static Term MkZeroApplTerm(Functor f, UInt sz USES_REGS) {
return tf;
}
/**
* @pred nb_heap(+_Size_,-_Heap_) is deterministic.
*
* Initialize a new binomial heap of size _Size_.
* The Heap resides in the Prolog stack, but the state of the
* Heap is not backtrable.
*
*/
static Int p_nb_heap(USES_REGS1) {
Term heap_arena, heap, *ar, *nar;
UInt hsize;
@ -1881,6 +1890,21 @@ static Int p_nb_heap(USES_REGS1) {
return TRUE;
}
/**
* @pred nb_heap_reset(+_Heap_) is deterministic.
*
* Set the number if entries in the heap to 0. Allows reusing
* the same space for several heaps.
*/
static Int p_nb_heap_reset(USES_REGS1) {
CELL *qd = GetHeap(ARG1, "reset_heap");
if (!qd)
return FALSE;
qd[HEAP_SIZE] = MkIntTerm(0);
return true;
}
static Int p_nb_heap_close(USES_REGS1) {
Term t = Deref(ARG1);
if (!IsVarTerm(t)) {
@ -2796,6 +2820,7 @@ void Yap_InitGlobals(void) {
Yap_InitCPred("nb_heap_peek", 3, p_nb_heap_peek, SafePredFlag);
Yap_InitCPred("nb_heap_empty", 1, p_nb_heap_empty, SafePredFlag);
Yap_InitCPred("nb_heap_size", 2, p_nb_heap_size, SafePredFlag);
Yap_InitCPred("nb_heap_reset", 1, p_nb_heap_reset, SafePredFlag);
Yap_InitCPred("nb_beam", 2, p_nb_beam, 0L);
Yap_InitCPred("nb_beam_close", 1, p_nb_beam_close, SafePredFlag);
Yap_InitCPred("nb_beam_add", 3, p_nb_beam_add_to_beam, 0L);

View File

@ -45,6 +45,7 @@
nb_heap_del/3,
nb_heap_peek/3,
nb_heap_empty/1,
nb_heap_reset/1,
nb_heap_size/2,
nb_beam/2,
nb_beam_close/1,

View File

@ -145,7 +145,7 @@ for ( [key,v] of singletonVars.entries()) {
console.log("reset");
}
CodeMirror.registerHelper("lint", "prolog", exportErrors);
//CodeMirror.registerHelper("lint", "prolog", exportErrors);
/*******************************
* CHARACTER ESCAPES *

View File

@ -30,6 +30,7 @@ set (PROBLOG_PROGRAMS
problog/version_control.yap
problog/nestedtries.yap
problog/utils.yap
problog/lbdd.yap
problog/utils_lbdd.yap
problog/ad_converter.yap
problog/termhandling.yap

View File

@ -1330,7 +1330,7 @@ set_fact_probability(ID,Prob) :-
retract(ProblogTerm),
ProblogTerm =.. [ProblogName|ProblogTermArgs],
nth1(ProblogArity,ProblogTermArgs,_,KeepArgs),
NewLogProb is log(Prob),
(isnan(Prob) -> NewLogProb = 0.0 ; NewLogProb is log(Prob)),
nth1(ProblogArity,NewProblogTermArgs,NewLogProb,KeepArgs),
NewProblogTerm =.. [ProblogName|NewProblogTermArgs],
assertz(NewProblogTerm).

View File

@ -68,10 +68,18 @@ log2prob(X,Slope,FactID,V) :-
sigmoid(V0, Slope, V).
bind_maplist([], _Slope, _X).
bind_maplist([Node-(Node-Pr)|MapList], Slope, X) :-
bind_maplist([Node-(Node-NPr)|MapList], Slope, X) :-
SigPr <== X[Node],
sigmoid(SigPr, Slope, Pr),
bind_maplist(MapList, Slope, X).
(Pr > 0.999
->
NPr = 0.999
;
Pr < 0.001
->
NPr = 0.001 ;
Pr = NPr ),
bind_maplist(MapList, Slope, X).
%get_prob(Node, Prob) :-

View File

@ -2,7 +2,6 @@
:- ensure_loaded(library(lists)).
:- ensure_loaded(library(rbtrees)).
:- ensure_loaded(library(tries)).
:- ensure_loaded(('../problog/ptree')).
:- ensure_loaded(library(trie_sp)).
:- ensure_loaded(library(bdd)).
:- ensure_loaded(library(bhash)).
@ -29,6 +28,8 @@ graph2bdd(Query,1,bdd(D,T,Vs)) :-
:- set_problog_flag(init_method,(Q,N,Bdd,user:graph2bdd(Q,N,Bdd))).
:- nb_heap(100000,Q), nb_setval(heap,Q).
%:- leash(0), spy graph2bdd.
@ -58,7 +59,8 @@ graph(X,Y,Trie_Completed_Proofs,Vs) :-
!,
export_answer([Y|Final], Trie_Completed_Proofs,Vs).
graph(X,Y,Trie_Completed_Proofs, Vs) :-
nb_heap(100000,Q),
nb_getval(heap, Q),
nb_heap_reset(Q),
path(X,Y,X,[X],Final, 0, _Pr, Q),
!,
export_answer(Final, Trie_Completed_Proofs, Vs).

View File

@ -17,7 +17,7 @@
:- use_module('../problog_lbfgs').
:- if(false).
:- if(true).
:- use_module('kbgraph').

View File

@ -800,6 +800,20 @@ gradient_descent :-
set_fact(FactID, Slope, P ) :-
X <== P[FactID],
sigmoid(X, Slope, Pr),
(Pr > 0.999
->
NPr = 0.999
;
Pr < 0.001
->
NPr = 0.001 ;
Pr = NPr ),
set_fact_probability(FactID, NPr).
set_tunable(I,Slope,P) :-
X <== P[I],
sigmoid(X,Slope,Pr),
(Pr > 0.99
->
NPr = 0.99
@ -808,13 +822,7 @@ set_fact(FactID, Slope, P ) :-
->
NPr = 0.01 ;
Pr = NPr ),
set_fact_probability(FactID, NPr).
set_tunable(I,Slope,P) :-
X <== P[I],
sigmoid(X,Slope,Pr),
set_fact_probability(I,Pr).
set_fact_probability(I,NPr).
:- include(problog/lbdd).