Merge /home/vsc/yap

This commit is contained in:
Vítor Santos Costa 2019-04-05 18:32:04 +01:00
commit 3bfaee9226
5 changed files with 79 additions and 33 deletions

View File

@ -252,10 +252,11 @@ YAPStringTerm::YAPStringTerm(wchar_t *s, size_t len)
YAPApplTerm::YAPApplTerm(YAPFunctor f, YAPTerm ts[]) { YAPApplTerm::YAPApplTerm(YAPFunctor f, YAPTerm ts[]) {
BACKUP_H(); BACKUP_H();
arity_t arity = ArityOfFunctor(f.f); arity_t arity = ArityOfFunctor(f.f);
Term o = Yap_MkNewApplTerm(f.f, arity); Term o = AbsAppl(HR);
*HR++ = (CELL)f.f;
Term *tt = RepAppl(o) + 1; Term *tt = RepAppl(o) + 1;
for (arity_t i = 0; i < arity; i++) for (arity_t i = 0; i < arity; i++)
tt[i] = ts[i].term(); *HR++ = ts[i].term();
mk(o); mk(o);
RECOVER_H(); RECOVER_H();
} }

42
docker/Dockerfile Normal file
View File

@ -0,0 +1,42 @@
# Use an official Python runtime as a parent image
FROM ubuntu:18.04
# Update Software repository
RUN apt-get update
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN apt install gcc g++ libreadline-dev libgmp-dev git \
python3-dev python3-pip python3-notebook python3-wheel python3-setuptools\
libgecode-dev r-cran-rcpp cmake libbdd-dev libxml2-dev \
bison flex openjdk-11-jdk-headless libraptor2-dev swig
#RUN git clone ssh://vsc@ssh.dcc.fc.up.pt:31064/yap.git
RUN git clone https://github.com/vscosta/cudd.git
RUN git clone https://github.com/vscosta/doxygen-yap.git
RUN git clone https://github.com/vscosta/cudd.git
RUN pushd cudd; ./configure --prefix=/usr --enable-shared --enable-obj --enable-dddmp; make -j install; popd
RUN pushd doxygen-yap; mkdir -p build; cd build; cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr && cmake --build . --target install; popd
RUN pushd yap; mkdir -p build; cd build; cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr && cmake --build . --target install; pushd paackages/real; R CMD INSTALL yap4r; popd; popd
RUN R CMD INSTALL packages/real/yap4r
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
This Dockerfile refers to a couple of files we havent created yet, namely app.py and requirements.txt. Lets create those next.

View File

@ -41,7 +41,7 @@ cvt_to_id([E0,E1],VId*true, [Id-VId]) :-
cvt_to_id([E0,E1|Es], VId*Ids, [Id-VId|VIds]) :- cvt_to_id([E0,E1|Es], VId*Ids, [Id-VId|VIds]) :-
problog:problog_dir_edge(Id,E0,E1,_Pr), problog:problog_dir_edge(Id,E0,E1,_Pr),
!, !,
cvt_to_id([E1|Es],Id*Ids, VIds). cvt_to_id([E1|Es],Ids, VIds).
cvt_to_id([E0,E1|Es], VId*Ids, [Id-VId|VIds]) :- cvt_to_id([E0,E1|Es], VId*Ids, [Id-VId|VIds]) :-
problog:problog_dir_edge(Id,E1,E0,_Pr), problog:problog_dir_edge(Id,E1,E0,_Pr),
!, !,

View File

@ -489,7 +489,8 @@ init_learning :-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% build BDD script for every example % build BDD script for every example
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
once(init_queries), empty_bdd_directory,
init_queries,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% done % done
@ -550,7 +551,7 @@ empty_bdd_directory.
init_queries :- init_queries :-
%empty_bdd_directory, empty_bdd_directory,
format_learning(2,'Build BDDs for examples~n',[]), format_learning(2,'Build BDDs for examples~n',[]),
forall(user:test_example(ID,Query,_Prob,_),init_one_query(ID,Query,test)), forall(user:test_example(ID,Query,_Prob,_),init_one_query(ID,Query,test)),
forall(user:example(ID,Query,_Prob,_),init_one_query(ID,Query,training)). forall(user:example(ID,Query,_Prob,_),init_one_query(ID,Query,training)).
@ -584,6 +585,7 @@ init_one_query(QueryID,Query,_Type) :-
add_bdd(QueryID,Query, Bdd) :- add_bdd(QueryID,Query, Bdd) :-
Bdd = bdd(Dir, Tree0,MapList), Bdd = bdd(Dir, Tree0,MapList),
user:graph2bdd(Query,1,Bdd), user:graph2bdd(Query,1,Bdd),
Bdd \= [],
!, !,
reverse(Tree0,Tree), reverse(Tree0,Tree),
%rb_new(H0), %rb_new(H0),
@ -592,21 +594,12 @@ init_one_query(QueryID,Query,_Type) :-
% ; % ;
% Bdd = bdd(-1,[],[]), % Bdd = bdd(-1,[],[]),
% Grad=[] % Grad=[]
store_bdd(QueryID, Dir, Tree, MapList). store_bdd(QueryID, Dir, Tree, MapList).
init_one_query(_,_,_).
store_bdd(QueryID, Dir, Tree, MapList) :- store_bdd(QueryID, Dir, Tree, MapList) :-
(QueryID mod 100 =:= 0 ->writeln(QueryID) ; true), (QueryID mod 100 =:= 0 ->writeln(QueryID) ; true),
(
recorded(QueryID, Bdd0, R),
arg(3, Bdd0, MapList0), variant(MapList0,MapList)
->
put_char('.')
;
(nonvar(R) -> erase(R);true),
recorda(QueryID,bdd(Dir, Tree, MapList),_), recorda(QueryID,bdd(Dir, Tree, MapList),_),
put_char('.') put_char('.').
).
%======================================================================== %========================================================================
@ -786,11 +779,9 @@ inv_sigmoid(T,Slope,InvSig) :-
% vsc: avoid silly search % vsc: avoid silly search
gradient_descent :- gradient_descent :-
problog_flag(sigmoid_slope,Slope),
% current_iteration(Iteration),
findall(FactID,tunable_fact(FactID,_GroundTruth),L), findall(FactID,tunable_fact(FactID,_GroundTruth),L),
length(L,N), length(L,N),
lbfgs_run(N,X,_BestF), lbfgs_run(N,_X,_BestF),
mse_trainingset, mse_trainingset,
mse_testset. mse_testset.
@ -830,8 +821,15 @@ user:evaluate(LLH_Training_Queries, X,Grad,N,_,_) :-
%Handle = user_error, %Handle = user_error,
N1 is N-1, N1 is N-1,
forall(between(0,N1,I),(Grad[I]<==0.0)), forall(between(0,N1,I),(Grad[I]<==0.0)),
go( X,Grad, LLs), catch(
sum_list( LLs, LLH_Training_Queries). go( X,Grad, LLs),
Error,
(writeln(Error), throw(Error) )),
length(LLs,NN),
V <== array[NN] of LLs,
SLL <== sum(V),
%sum_list( LLs, SLL),
LLH_Training_Queries[0] <== SLL.
test :- test :-
S =.. [f,0-0.9,1-0.8,2-0.6,3-0.7,4-0.5,5-0.4,6-0.7,7-0.2], S =.. [f,0-0.9,1-0.8,2-0.6,3-0.7,4-0.5,5-0.4,6-0.7,7-0.2],
@ -845,7 +843,8 @@ Grad <== array[N] of floats,
LL, LL,
compute_gradient(Grad, X, Slope,LL), compute_gradient(Grad, X, Slope,LL),
LLs LLs
), sum_list( LLs, _LLH_Training_Queries). ), sum_list( LLs, SLL).
@ -862,8 +861,12 @@ compute_gradient( Grad, X, Slope, LL) :-
user:example(QueryID,_Query,QueryProb,_), user:example(QueryID,_Query,QueryProb,_),
recorded(QueryID,BDD,_), recorded(QueryID,BDD,_),
BDD = bdd(_,_,MapList), BDD = bdd(_,_,MapList),
MapList = [_|_],
bind_maplist(MapList, Slope, X), bind_maplist(MapList, Slope, X),
%writeln(QueryID:MapList),
query_probabilities( BDD, BDDProb), query_probabilities( BDD, BDDProb),
(isnan(BDDProb) -> writeln((nan::QueryID)), fail;true),
writeln(BDDProb),
LL is (BDDProb-QueryProb)*(BDDProb-QueryProb), LL is (BDDProb-QueryProb)*(BDDProb-QueryProb),
forall( forall(
query_gradients(BDD,I,IProb,GradValue), query_gradients(BDD,I,IProb,GradValue),
@ -873,6 +876,7 @@ compute_gradient( Grad, X, Slope, LL) :-
gradient_pair(BDDProb, QueryProb, Grad, GradValue, I, Prob) :- gradient_pair(BDDProb, QueryProb, Grad, GradValue, I, Prob) :-
G0 <== Grad[I], G0 <== Grad[I],
GN is G0-GradValue*Prob*(1-Prob)*2*(QueryProb-BDDProb), GN is G0-GradValue*Prob*(1-Prob)*2*(QueryProb-BDDProb),
(isnan(GN) -> writeln((nan::I)), fail;true),
Grad[I] <== GN. Grad[I] <== GN.
wrap( X, Grad, GradCount) :- wrap( X, Grad, GradCount) :-

View File

@ -42,13 +42,14 @@ static lbfgsfloatval_t evaluate(void *instance, const lbfgsfloatval_t *x,
const lbfgsfloatval_t step) { const lbfgsfloatval_t step) {
YAP_Term call; YAP_Term call;
YAP_Bool result; YAP_Bool result;
lbfgsfloatval_t rc; lbfgsfloatval_t rc=0.0;
YAP_Term v, t1, t12; YAP_Term v, t1, t12;
YAP_Term t[6], t2[2]; YAP_Term t[6], t2[2];
t[0] = v = YAP_MkVarTerm(); YAP_Term t_0 = YAP_MkIntTerm((YAP_Int)&rc);
t1 = YAP_MkIntTerm((YAP_Int)x); t[0] = YAP_MkApplTerm(ffloats, 1, &t_0);
t[1] = YAP_MkApplTerm(ffloats, 1, &t1); YAP_Term t_1 = YAP_MkIntTerm((YAP_Int)x);
t[1] = YAP_MkApplTerm(ffloats, 1, &t_1);
t12 = YAP_MkIntTerm((YAP_Int)g_tmp); t12 = YAP_MkIntTerm((YAP_Int)g_tmp);
t[2] = YAP_MkApplTerm(ffloats, 1, &t12); t[2] = YAP_MkApplTerm(ffloats, 1, &t12);
t[3] = YAP_MkIntTerm(n); t[3] = YAP_MkIntTerm(n);
@ -70,12 +71,9 @@ static lbfgsfloatval_t evaluate(void *instance, const lbfgsfloatval_t *x,
// Goal did not succeed // Goal did not succeed
return FALSE; return FALSE;
} }
YAP_Term o; YAP_ShutdownGoal(true);
if (YAP_IsIntTerm((o = YAP_GetFromSlot(sl))))
rc = YAP_IntOfTerm(o);
else
rc = YAP_FloatOfTerm(o);
YAP_RecoverSlots(1, sl); YAP_RecoverSlots(1, sl);
fprintf(stderr,"%gxo\n",rc);
return rc; return rc;
} }
@ -123,9 +121,10 @@ static int progress(void *instance, const lbfgsfloatval_t *local_x,
if (YAP_IsIntTerm(o)) { if (YAP_IsIntTerm(o)) {
int v = YAP_IntOfTerm(o); int v = YAP_IntOfTerm(o);
return (int)v; YAP_ShutdownGoal(true);
return (int)v;
} }
YAP_ShutdownGoal(true);
fprintf(stderr, "ERROR: The progress call back function did not return an " fprintf(stderr, "ERROR: The progress call back function did not return an "
"integer as last argument\n"); "integer as last argument\n");
return 1; return 1;