From faf7726452730dd47d4561dcead1dc7f400fb99a Mon Sep 17 00:00:00 2001 From: Fabrizio Riguzzi Date: Tue, 17 Sep 2013 13:04:22 +0200 Subject: [PATCH 1/2] test program --- packages/cplint/doc/manual.html | 117 ++++++-- packages/cplint/doc/manual.pdf | Bin 226425 -> 227785 bytes packages/cplint/doc/manual.tex | 22 ++ packages/cplint/slipcover/test.pl | 469 ++++++++++++++++++++++++++++++ 4 files changed, 576 insertions(+), 32 deletions(-) create mode 100644 packages/cplint/slipcover/test.pl diff --git a/packages/cplint/doc/manual.html b/packages/cplint/doc/manual.html index 5bbf13c0e..dad36ea77 100644 --- a/packages/cplint/doc/manual.html +++ b/packages/cplint/doc/manual.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@ class="cmr-12">Fabrizio Riguzzi
fabrizio.riguzzi@unife.it
September 4, 2013
+class="cmr-12">September 17, 2013

1 Introduction

@@ -1339,69 +1339,121 @@ class="cmtt-10">background_clauses (values: integer, d
  • maxdepth_var (values: integer, default value: 2, valid for SLIPCOVER): maximum depth of variables in clauses (as defined in [10]).
  • -

    +href="#XDBLP:journals/ai/Cohen95">10]). + +

  • score (values: ll, aucpr, default value ll, valid for SLIPCOVER): + determines the score function for refinement: if set to ll, log likelihood is + used, if set to aucpr, the area under the precision-recall curve is used.
  • + +

    5.3 Commands

    -

    To execute CEM, load

    To execute CEM, load em.pl with

    ?:- use_module(library(’cplint/em’)).
    -

    and call: +

    and call:

    ?:- em(stem).
    -

    To execute RIB, load

    To execute RIB, load rib.pl with

    ?:- use_module(library(’cplint/rib’)).
    -

    and call: +

    and call:

    ?:- ib_par(stem).
    -

    To execute EMBLEM, load

    To execute EMBLEM, load slipcase.pl with

    ?:- use_module(library(’cplint/slipcase’)).
    -

    and call +

    and call

    ?:- em(stem).
    -

    To execute SLIPCASE, load

    To execute SLIPCASE, load slipcase.pl with

    ?:- use_module(library(’cplint/slipcase’)).
    -

    and call +

    and call

    ?:- sl(stem).
    -

    To execute SLIPCOVER, load

    To execute SLIPCOVER, load slipcover.pl with

    ?:- use_module(library(’cplint/slipcover’)).
    -

    and call +

    and call

    ?:- sl(stem).
    -

    +

    5.4 Learning Examples

    -

    The subfolders Testing +

    To test the theories learned, load test.pl with + +

    +?:- use_module(library(’cplint/test’)). +
    +

    and call + +

    +?:- main([<stem_fold1>,...,<stem_foldn>],[<testing_set_fold1>,..., + 
      <testing_set_foldn>]). +
    +

    For example, if you want to test the theory in ai_train.rules on the set ai.kb, +you can call + +

    +?:- main([ai_train],[ai]). +
    +

    The testing program has the following parameter: +

    +

    +

    5.5 Learning Examples

    +

    The subfolders em, rib, slipcase and slipcover of the class="cmtt-10">packages/cplint folder in Yap git distribution contain examples of input and output files for the learning algorithms. -

    +

    6 License

    -

    License +

    cplint, as Yap, follows the Artistic License 2.0 that you can find in Yap CVS root dir. The copyright is by Fabrizio Riguzzi. -

    The modules in the approx subdirectory use SimplecuddLPADs, a modification of +

    The modules in the approx subdirectory use SimplecuddLPADs, a modification of the Simplecudd library whose copyright is by Katholieke Universiteit Leuven and that follows the Artistic License 2.0. -

    Some modules use the library

    Some modules use the library CUDD for manipulating BDDs that is included in glu. For the use of CUDD, the following license must be accepted: -

    Copyright (c) 1995-2004, Regents of the University of Colorado -

    All rights reserved. -

    Redistribution and use in source and binary forms, with or without modification, +

    Copyright (c) 1995-2004, Regents of the University of Colorado +

    All rights reserved. +

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    - -

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
    AND CONTRIBUTORS ”AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -1452,7 +1504,7 @@ class="newline" />AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

    lpad.pl, semlpad.pl and cpl.pl are based on the SLG system by Weidong @@ -1462,7 +1514,7 @@ href="http://www.cs.sunysb.edu/~warren/" > David Scott Warren , Copyright (C on this copyright.

    References

    + id="x1-170006">References

    @@ -1480,6 +1532,7 @@ class="cmti-10">Proceedings of the 26th Italian class="cmti-10">Conference on Computational Logic (CILC2011), Pescara, Italy, 31 August 31-2 September, 2011, 2011. +

    [3]   31-2 September, 2011, 2011.

    [4]   Elena Bellodi and Fabrizio Riguzzi. Learning the structure of - probabilistic logic programs. In Inductive Logic Programming, 21th LNCS, pages 30–37. Springer, 2011. delaying for general logic programs. Journal of the ACM, 43(1):20–74, 1996.

    +

    [10]   William W. Cohen. Pac-learning non-recursive prolog clauses. Intell., 79(1):1–38, 1995. class="cmti-10">International Joint Conference on Artificial Intelligence, pages 2462–2467, 2007. -

    [12]   LNAI, pages 109–120. Springer, 2007. class="cmti-10">Proceedings of the 14th RCRA workshop Experimental Evaluation of Algorithms for Solving Problems with Combinatorial Explosion, 2007. +

    [18]   Proceedings of the 26th Italian class="cmti-10">Conference on Computational Logic (CILC2011), Pescara, Italy, 31 August-2 September, 2011, 2011. -

    [20]   International Conference on Logic Programming, volume 3131 of LNCS, pages 195–209. Springer, 2004. +

    diff --git a/packages/cplint/doc/manual.pdf b/packages/cplint/doc/manual.pdf index 216e2ef4d9763d294e0645e42fbd37cb16d1225a..3a7e2cfa073f9613904a63090e5f4c229415453a 100644 GIT binary patch delta 49292 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 delta 47995 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,...,],[,..., + ]). +\end{verbatim} +For example, if you want to test the theory in \verb|ai_train.rules| on the set \verb|ai.kb|, you can call +\begin{verbatim} +?:- main([ai_train],[ai]). +\end{verbatim} +The testing program has the following parameter: +\begin{itemize} +\item \verb|neg_ex| (values: \verb|given|, \verb|cw|, default value: \verb|cw|): if set to \verb|given|, the negative examples +are taken from \verb|.kb|, i.e., those example \verb|ex| stored as \verb|neg(ex)|; if set to \verb|cw|, the negative examples are generated according to the closed world assumption, i.e., all atoms for target predicates that are not positive examples. The set of all atoms is obtained by collecting the set of constants for each type of the arguments of the target predicate. +\end{itemize} + \subsection{Learning Examples} The subfolders \verb|em|, \verb|rib|, \verb|slipcase| and \verb|slipcover| of the \verb|packages/cplint| folder in Yap git distribution contain examples of input and output files for the learning algorithms. diff --git a/packages/cplint/slipcover/test.pl b/packages/cplint/slipcover/test.pl new file mode 100644 index 000000000..a87cdf122 --- /dev/null +++ b/packages/cplint/slipcover/test.pl @@ -0,0 +1,469 @@ +:-multifile setting/2. +:-source. +:-use_module(library('cplint/slipcover')). + +setting(neg_ex,cw). +/* allowed values: given, cw */ + +main(TrainP,TestSets):- + system('rm -f areas.csv'), + system('rm -f curve_roc.m'), + system('rm -f curve_pr.m'), + open('cll1.pl',write,S), + open('areas.csv',append,SA), + format(SA,"Fold;\tCLL;\t AUCROC;\t AUCPR~n",[]), + close(SA), + test(TrainP,TestSets,S,[],LG,0,Pos,0,Neg,0,CLL), + keysort(LG,LG1), + format(S,"cll(all,post,~d,~d,[",[Pos,Neg]), + writes(LG1,S), + reverse(LG1,LGR1), + compute_areas(LGR1,Pos,Neg,AUCROC,AUCPR), + open('areas.csv',append,SA1), + format(SA1,"~a;\t ~f;\t ~f;\t ~f~n",[all,CLL,AUCROC,AUCPR]), + close(SA1), + close(S). + +test([],[],_S,LG,LG,Pos,Pos,Neg,Neg,CLL,CLL). + +test([HP|TP],[HT|TT],S,LG0,LG,Pos0,Pos,Neg0,Neg,CLL0,CLL):- + test_fold(HP,HT,S,LG1,Pos1,Neg1,CLL1), + append(LG0,LG1,LG2), + Pos2 is Pos0+Pos1, + Neg2 is Neg0+Neg1, + CLL2 is CLL0+CLL1, + test(TP,TT,S,LG2,LG,Pos2,Pos,Neg2,Neg,CLL2,CLL). + +test_fold(P,F,S,LGOrd,Pos,Neg,CLL1):- + atom_concat([P,'.rules'],PR), + atom_concat([P,'.bg'],PBG), + atom_concat([P,'.l'],FL), + atom_concat([F,'.kb'],TKB), + reconsult(FL), + (file_exists(PBG)-> + set(compiling,on), + load(PBG,_ThBG,RBG), + set(compiling,off), + generate_clauses(RBG,_RBG1,0,[],ThBG), + assert_all(ThBG) + ; + true + ), + format("~a~n",[TKB]), + load_models(TKB,DB), + set(compiling,on), + load(PR,Th1,R1), + set(compiling,off), + assert_all(Th1), + assert_all(R1), + find_ex(DB,LG,Pos,Neg), + compute_CLL_atoms(LG,0,0,CLL1,LG1), + (file_exists(PBG)-> + retract_all(ThBG) + ; + true + ), + retract_all(Th1), + retract_all(R1), + keysort(LG1,LGOrd), + reverse(LGOrd,LGROrd), + compute_areas(LGROrd,Pos,Neg,AUCROC,AUCPR), + format(S,"cll(~a,post,~d,~d,[",[F,Pos,Neg]), + writes(LGOrd,S), + open('areas.csv',append,SA), + format(SA,"~a;\t ~f;\t ~f;\t ~f~n",[F,CLL1,AUCROC,AUCPR]), + close(SA). + +compute_areas(LG,Pos,Neg,AUCROC,AUCPR):- + compute_pointsroc(LG,+inf,0,0,Pos,Neg,[],ROC), + hull(ROC,0,0,0,AUCROC), + open('curve_roc.m',append,SC), + write_p(ROC,SC), + close(SC), + compute_aucpr(LG,Pos,Neg,AUCPR,PR), + open('curve_pr.m',append,SPR), + write_ppr(PR,SPR), + close(SPR). + +compute_pointsroc([],_P0,_TP,_FP,_FN,_TN,P0,P1):-!, + append(P0,[1.0-1.0],P1). + +compute_pointsroc([P- (\+ _)|T],P0,TP,FP,FN,TN,Po0,Po1):-!, + (P + FPR is FP/(FP+TN), + TPR is TP/(TP+FN), + append(Po0,[(FPR-TPR)],Po2), + P1=P + ; + Po2=Po0, + P1=P0 + ), + FP1 is FP+1, + TN1 is TN-1, + compute_pointsroc(T,P1,TP,FP1,FN,TN1,Po2,Po1). + +compute_pointsroc([P- _|T],P0,TP,FP,FN,TN,Po0,Po1):-!, + (P + FPR is FP/(FP+TN), + TPR is TP/(TP+FN), + append(Po0,[FPR-TPR],Po2), + P1=P + ; + Po2=Po0, + P1=P0 + ), + TP1 is TP+1, + FN1 is FN-1, + compute_pointsroc(T,P1,TP1,FP,FN1,TN,Po2,Po1). + + +hull([],FPR,TPR,AUC0,AUC1):- + AUC1 is AUC0+(1-FPR)*(1+TPR)/2. + + +hull([FPR1-TPR1|T],FPR,TPR,AUC0,AUC1):- + AUC2 is AUC0+(FPR1-FPR)*(TPR1+TPR)/2, + hull(T,FPR1,TPR1,AUC2,AUC1). + +compute_aucpr(L,Pos,Neg,A,PR):- + L=[P_0-E|TL], + (E= (\+ _ )-> + FP=1, + TP=0, + FN=Pos, + TN is Neg -1 + ; + FP=0, + TP=1, + FN is Pos -1, + TN=Neg + ), + compute_curve_points(TL,P_0,TP,FP,FN,TN,Points), + Points=[R0-P0|_TPoints], + (R0=:=0,P0=:=0-> + Flag=true + ; + Flag=false + ), + area(Points,Flag,Pos,0,0,0,A,[],PR). + +compute_curve_points([],_P0,TP,FP,_FN,_TN,[1.0-Prec]):-!, + Prec is TP/(TP+FP). + +compute_curve_points([P- (\+ _)|T],P0,TP,FP,FN,TN,Pr):-!, + (P + Prec is TP/(TP+FP), + Rec is TP/(TP+FN), + Pr=[Rec-Prec|Pr1], + P1=P + ; + Pr=Pr1, + P1=P0 + ), + FP1 is FP+1, + TN1 is TN-1, + compute_curve_points(T,P1,TP,FP1,FN,TN1,Pr1). + +compute_curve_points([P- _|T],P0,TP,FP,FN,TN,Pr):-!, + (P + Prec is TP/(TP+FP), + Rec is TP/(TP+FN), + Pr=[Rec-Prec|Pr1], + P1=P + ; + Pr=Pr1, + P1=P0 + ), + TP1 is TP+1, + FN1 is FN-1, + compute_curve_points(T,P1,TP1,FP,FN1,TN,Pr1). + +area([],_Flag,_Pos,_TPA,_FPA,A,A,PR,PR). + +area([R0-P0|T],Flag,Pos,TPA,FPA,A0,A,PR0,PR):- + TPB is R0*Pos, + (TPB=:=0-> + A1=A0, + FPB=0, + PR2=PR0, + PR=[R0-P0|PR3] + ; + R_1 is TPA/Pos, + (TPA=:=0-> + (Flag=false-> + P_1=P0, + PR=[0.0-P0|PR3] + ; + P_1=0.0, + PR=[0.0-0.0|PR3] + ) + ; + P_1 is TPA/(TPA+FPA), + PR=PR3 + ), + FPB is TPB*(1-P0)/P0, + N is TPB-TPA+0.5, + (N<1.0-> + append(PR0,[R0-P0],PR2), + A1=A0 + ; + interpolate(1,N,Pos,R_1,P_1,TPA,FPA,TPB,FPB,A0,A1,[],PR1), + append(PR0,PR1,PR2) + ) + ), + area(T,Flag,Pos,TPB,FPB,A1,A,PR2,PR3). + +interpolate(I,N,_Pos,_R0,_P0,_TPA,_FPA,_TPB,_FPB,A,A,PR,PR):-I>N,!. + +interpolate(I,N,Pos,R0,P0,TPA,FPA,TPB,FPB,A0,A,PR0,[R-P|PR]):- + R is (TPA+I)/Pos, + P is (TPA+I)/(TPA+I+FPA+(FPB-FPA)/(TPB-TPA)*I), + A1 is A0+(R-R0)*(P+P0)/2, + I1 is I+1, + interpolate(I1,N,Pos,R,P,TPA,FPA,TPB,FPB,A1,A,PR0,PR). + + +find_ex(DB,LG,Pos,Neg):- + findall(P/A,output(P/A),LP), + setting(neg_ex,given),!, + find_ex_pred(LP,DB,[],LG,0,Pos,0,Neg). + +find_ex(DB,LG,Pos,Neg):- + findall(P/A,output(P/A),LP), + setting(neg_ex,cw), + find_ex_pred_cw(LP,DB,[],LG,0,Pos,0,Neg). + + +find_ex_pred([],_DB,LG,LG,Pos,Pos,Neg,Neg). + +find_ex_pred([P/A|T],DB,LG0,LG,Pos0,Pos,Neg0,Neg):- + functor(At,P,A), + find_ex_db(DB,At,LG0,LG1,Pos0,Pos1,Neg0,Neg1), + find_ex_pred(T,DB,LG1,LG,Pos1,Pos,Neg1,Neg). + +find_ex_db([],_At,LG,LG,Pos,Pos,Neg,Neg). + +find_ex_db([H|T],At,LG0,LG,Pos0,Pos,Neg0,Neg):- + At=..[P|L], + At1=..[P,H|L], + findall(At1,At1,LP), + findall(\+ At1,neg(At1),LN), + length(LP,NP), + length(LN,NN), + append([LG0,LP,LN],LG1), + Pos1 is Pos0+NP, + Neg1 is Neg0+NN, + find_ex_db(T,At,LG1,LG,Pos1,Pos,Neg1,Neg). + + +find_ex_pred_cw([],_DB,LG,LG,Pos,Pos,Neg,Neg). + +find_ex_pred_cw([P/A|T],DB,LG0,LG,Pos0,Pos,Neg0,Neg):- + functor(At,P,A), + get_types(At,Types), + remove_duplicates(Types,Types1), + find_ex_db_cw(DB,At,Types1,LG0,LG1,Pos0,Pos1,Neg0,Neg1), + find_ex_pred_cw(T,DB,LG1,LG,Pos1,Pos,Neg1,Neg). + +get_types(At,Types):- + modeh(_,At), + At=..[_|Args], + get_args(Args,Types). + +get_args([],[]). + +get_args([+H|T],[H|T1]):-!, + get_args(T,T1). + +get_args([-H|T],[H|T1]):-!, + get_args(T,T1). + +get_args([#H|T],[H|T1]):-!, + get_args(T,T1). + +get_args([-#H|T],[H|T1]):-!, + get_args(T,T1). + +get_args([H|T],[H|T1]):- + get_args(T,T1). + + + + +get_constants([],_M,[]). + +get_constants([Type|T],M,[(Type,Co)|C]):- + find_pred_using_type(Type,LP), + find_constants(LP,M,[],Co), + get_constants(T,M,C). + +find_pred_using_type(T,L):- + setof((P,Ar,A),pred_type(T,P,Ar,A),L). + +pred_type(T,P,Ar,A):- + modeh(_,S), + S=..[P|Args], + length(Args,Ar), + scan_args(Args,T,1,A). + +pred_type(T,P,Ar,A):- + modeb(_,S), + S=..[P|Args], + length(Args,Ar), + scan_args(Args,T,1,A). + +scan_args([+T|_],T,A,A):-!. + +scan_args([-T|_],T,A,A):-!. + +scan_args([#T|_],T,A,A):-!. + +scan_args([-#T|_],T,A,A):-!. + +scan_args([_|Tail],T,A0,A):- + A1 is A0+1, + scan_args(Tail,T,A1,A). + +find_constants([],_M,C,C). + +find_constants([(P,Ar,A)|T],M,C0,C):- + gen_goal(1,Ar,A,Args,ArgsNoV,V), + G=..[P,M|Args], + setof(V,ArgsNoV^G,LC), + append(C0,LC,C1), + remove_duplicates(C1,C2), + find_constants(T,M,C2,C). + + +gen_goal(Arg,Ar,_A,[],[],_):- + Arg =:= Ar+1,!. + +gen_goal(A,Ar,A,[V|Args],ArgsNoV,V):-!, + Arg1 is A+1, + gen_goal(Arg1,Ar,A,Args,ArgsNoV,V). + +gen_goal(Arg,Ar,A,[ArgV|Args],[ArgV|ArgsNoV],V):- + Arg1 is Arg+1, + gen_goal(Arg1,Ar,A,Args,ArgsNoV,V). + + + +find_ex_db_cw([],_At,_Ty,LG,LG,Pos,Pos,Neg,Neg). + +find_ex_db_cw([H|T],At,Types,LG0,LG,Pos0,Pos,Neg0,Neg):- + get_constants(Types,H,C), + At=..[P|L], + get_types(At,TypesA), + length(L,N), + length(LN,N), + At1=..[P,H|LN], + findall(At1,At1,LP), + setof(\+ At1,neg_ex(LN,TypesA,At1,C),LNeg), + length(LP,NP), + length(LNeg,NN), + append([LG0,LP,LNeg],LG1), + Pos1 is Pos0+NP, + Neg1 is Neg0+NN, + find_ex_db_cw(T,At,Types,LG1,LG,Pos1,Pos,Neg1,Neg). + +neg_ex([],[],At1,_C):- + \+ At1. + +neg_ex([H|T],[HT|TT],At1,C):- + member((HT,Co),C), + member(H,Co), + neg_ex(T,TT,At1,C). + +compute_CLL_atoms([],_N,CLL,CLL,[]):-!. + +compute_CLL_atoms([\+ H|T],N,CLL0,CLL1,[PG- (\+ H)|T1]):-!, + rule_n(NR), + init_test(NR), +% write(\+ H), + get_node(H,BDD),!, + ret_prob(BDD,PG), +% write(PG),nl, + end_test,!, + PG1 is 1-PG, + (PG1=:=0.0-> + CLL2 is CLL0-10 + ; + CLL2 is CLL0+ log(PG1) + ), + N1 is N+1, + compute_CLL_atoms(T,N1,CLL2,CLL1,T1). + +compute_CLL_atoms([H|T],N,CLL0,CLL1,[PG-H|T1]):- + rule_n(NR), + init_test(NR), +% write(H), + get_node(H,BDD),!, + ret_prob(BDD,PG), +% write(PG),nl, + end_test,!, + (PG=:=0.0-> + CLL2 is CLL0-10 + ; + CLL2 is CLL0+ log(PG) + ), + N1 is N+1, + compute_CLL_atoms(T,N1,CLL2,CLL1,T1). + + +writes([H-H1],S):- + format(S,"~f - (~p)]).~n~n",[H,H1]). + +writes([H-H1|T],S):- + format(S,"~f - (~p),~n",[H,H1]), + writes(T,S). + +write_p(P,S):- + get_xy(P,PX,PY), + format(S,"x=[",[]), + writesf(PX,S), + format(S,"y=[",[]), + writesf(PY,S), + format(S," +figure('Name','roc','NumberTitle','off') +set(gca,'XLim',[0.0 1.0]) +set(gca,'YLim',[0.0 1.0]) +x=[x 1.0] +y=[y 0.0] +k=convhull(x,y) +plot(x(k),y(k),'r-',x,y,'--b+') +A = polyarea(x,y)~n~n +save area_roc.csv A -ascii -append +", + []). + +get_xy([],[],[]). + +get_xy([X-Y|T],[X|TX],[Y|TY]):- + get_xy(T,TX,TY). + + +writesf([H],S):- + format(S,"~f]~n",[H]). + +writesf([H|T],S):- + format(S,"~f ",[H]), + writesf(T,S). + +write_ppr(P,S):- + get_xy(P,PX,PY), + format(S,"rec=[",[A]), + writesf(PX,S), + format(S,"prec=[",[A]), + writesf(PY,S), + format(S," +figure('Name','pr','NumberTitle','off') +set(gca,'XLim',[0.0 1.0]) +set(gca,'YLim',[0.0 1.0]) +rec=[0.0 rec 1.0]; +prec=[0.0 prec 0.0]; +plot(rec,prec,'--*k') +A=polyarea(rec,prec) +save area_pr.csv A -ascii -append +~n~n", + []). + From 3659f9036cd75cce2f79b101ec831c08c2cc59c5 Mon Sep 17 00:00:00 2001 From: Fabrizio Riguzzi Date: Tue, 17 Sep 2013 14:10:08 +0200 Subject: [PATCH 2/2] testing output --- packages/cplint/doc/manual.html | 61 +++++++++++++++++++----------- packages/cplint/doc/manual.pdf | Bin 227785 -> 228985 bytes packages/cplint/doc/manual.tex | 12 +++++- packages/cplint/slipcover/test.pl | 8 ++-- 4 files changed, 54 insertions(+), 27 deletions(-) diff --git a/packages/cplint/doc/manual.html b/packages/cplint/doc/manual.html index dad36ea77..4c8816cb3 100644 --- a/packages/cplint/doc/manual.html +++ b/packages/cplint/doc/manual.html @@ -7,7 +7,7 @@ - + @@ -1349,7 +1349,7 @@ class="cmtt-10">ll, valid for SLIPCOVER): determines the score function for refinement: if set to ll, log likelihood is used, if set to aucpr, the area under the precision-recall curve is used. +class="cmtt-10">aucpr, the area under the Precision-Recall curve is used.

    5.5 Learning Examples

    -

    The subfolders

    The subfolders em, rib, slipcase and slipcover of the class="cmtt-10">packages/cplint folder in Yap git distribution contain examples of input and output files for the learning algorithms. -

    +

    6 License

    -

    cplint, as Yap, follows the Artistic License 2.0 that you can find in Yap CVS root dir. The copyright is by Fabrizio Riguzzi. -

    The modules in the approx subdirectory use SimplecuddLPADs, a modification of + +

    The modules in the approx subdirectory use SimplecuddLPADs, a modification of the Simplecudd library whose copyright is by Katholieke Universiteit Leuven and that follows the Artistic License 2.0. -

    Some modules use the library

    Some modules use the library CUDD for manipulating BDDs that is included in glu. For the use of CUDD, the following license must be accepted: -

    Copyright (c) 1995-2004, Regents of the University of Colorado -

    All rights reserved. -

    Redistribution and use in source and binary forms, with or without modification, +

    Copyright (c) 1995-2004, Regents of the University of Colorado +

    All rights reserved. +

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -
    • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation @@ -1490,7 +1507,7 @@ are permitted provided that the following conditions are met:
    • Neither the name of the University of Colorado nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
    -

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
    AND CONTRIBUTORS ”AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -1504,7 +1521,7 @@ class="newline" />AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

    lpad.pl, semlpad.pl and cpl.pl are based on the SLG system by Weidong @@ -1512,6 +1529,7 @@ Chen and David Scott Warren , Copyright (C) 1993 Southern Methodist University, 1993 SUNY at Stony Brook, see the file COYPRIGHT_SLG for detailed information on this copyright. +

    References

    @@ -1532,7 +1550,6 @@ class="cmti-10">Proceedings of the 26th Italian class="cmti-10">Conference on Computational Logic (CILC2011), Pescara, Italy, 31 August 31-2 September, 2011, 2011. -

    [3]   Programming, 2013. class="cmti-10">Inductive Logic Programming (ILP 2004), Work in Progress Track, 2004. +

    [8]   LNCS, pages 30–37. Springer, 2011. delaying for general logic programs. Journal of the ACM, 43(1):20–74, 1996.

    -

    [10]   William W. Cohen. Pac-learning non-recursive prolog clauses. Research, 3:679–707, December 2002. id="XDBLP:journals/ai/Poole97">David Poole. The independent choice logic for modelling multiple agents under uncertainty. Artificial Intelligence, 94(1-2):7–56, 1997. +

    [16]   LNAI, pages 109–120. Springer, 2007. class="cmti-10">Proceedings of the 14th RCRA workshop Experimental Evaluation of Algorithms for Solving Problems with Combinatorial Explosion, 2007. -

    [18]   Proceedings of the 10th class="cmti-10">European Conference on Logics in Artificial Intelligence, LNAI. Springer, September 2006.

    +

    [23]   J. Vennekens, Marc Denecker, and Maurice Bruynooghe. CP-logic: @@ -1713,7 +1731,6 @@ class="cmti-10">International Conference on Logic Programming, volume 3131 of LNCS, pages 195–209. Springer, 2004. -

    diff --git a/packages/cplint/doc/manual.pdf b/packages/cplint/doc/manual.pdf index 3a7e2cfa073f9613904a63090e5f4c229415453a..5771d7bcc620659a1f89d3f383438c7a788d2c60 100644 GIT binary patch delta 15597 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

    >In*w;Dr|tx}ogmHE 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 delta 14703 zcmajFcRbeL|3B_>*?Wb|OGe1J_K=ZLi0qj?LsnL17a==z(N$(Pl~D=_nOVsmWsk@v zlp_6}di8#P-Y_pt#5wJop|wvu;>Z)1rk|Zz@|dcp?J0cGP$8RdNgFq_qED60ATMx?v$BGdu&MR0zo zaH8g-lHh)WmT_TK6JCa1*{t&FmQ#Z-!{AJbJ9|Pg0|x`yasbyY-lt?XhC7U-4LvP1 zk?JNlh|Aajzt+~|7WzATH3^wp7a2kC>#e<`NK+1+WQ-md3Ej_wC`XfXU}=wByXGps zwNSfbwSIK06^Kc){XIALFE+tLV3J-(ma z{E&X=)M4c1TpRVR?%}~tFEMl0QwsuazF73^>t~-%+w%F=ia@N*4y@nb)^$>KP^xTv z$<>`S^Mgv*nl{BBkJ_Q)!EFa36m0-iNITi?6~Hn4ElA zuuZpBN4y_pzi)a!VOb#gD_l^ERUq;Cqj?xDd?QmzZyQAG^xmmrr9af~E=7rnMtJ$d z$&Z5Tysz-?hj%M~1#CaFp>Mpwy}5shC36Fn7A1m&GSOl4ASmc$|uZ#$T$A#Zj>D})&eu$GWKbzroc7hI5 zWzKGRb$YT$RTtm9yS)y%c=mw1`tqgv(XE4rnK9*}iWe>y>G#2`=`LA=^d+u+rMOY~ z5aS#DO52*jll4_vUb)Ge>ux-5O`|zT)JMDLS9A;a(B)d3!y02q!ynZ@`3)j|`JcLR z?sThjoaI^OqPW@#_xSqytL!MA)2z#9BVVk9%_qeKHA4cM@s9|}&}axZz)$7BPS!rVYiPqwY6-vq%24PtSRsOZH zcDMaB`#fE&&G6Ej5ova#ofX&iBZ8l9w(t?uAOCpo%yr&L8_R zxlNDHVsq6Q+n|hed~`}b6z1f$>VJ~USa0VE@sS3*ecSVs0gt9tnD7!gbmsf(^}oVB z1=@55UuNKUtcRjZ&>nO;Sie3BZHgNV4MhQsu!&6@;g<0p(J(#>h4V2{m&~)M2P&&b zvRwIT1|VA59RAl1Vs9n0-qR_K6|-SZ(J9Q{&gEjgIQ|aaEyCb@Ip2}7zQ~1T`Kv4} zYPcb|IXpFgqVg`M;P#EfEoB!Krxe+h&rWxaoXJ@6`$=KV3(jnI?#y4s<5z>W3tcbru`;GSf9ggB`%k24p0;c#Ubte4q zxQ|H%-2*8%O@d#2ytZ6+%VCFD!yo8{vh>$3)(q+(q1OKbf9^3^fqPFKV0P4@@`E`- z;Y>6CRD`GusYfpLC&^le+KdQeH5OmIh09DPHI*^-C@Lq~-iBAxZZs~go8uRW>iYb5 z8V7d*vY)9^vJp-ShGCEdrU+5|u(6rPIGXKNZ~2y)FvM0RHb4JqM+F0QMNZqD;m;ae zoG&!Tl^pt$KARu?WRSkU{=j*H7P=-tUB2`sWEy8MmC!5Yt_Bm=?WE>USQ69}71x7z z>EDHlsm_1+jQ+6)k72!J@?!aueSu^8rCVC2ABP6De6$_+3$J2)pGemR;(t&qjvYSQ zcRyTe>uK2YNwI#wyto$Y$9~rI{>4w}X5$|`d-546|yz2AzM){`|cDgRCJo75W&88 znPjFVUl`w9s`hx9=P;mAkAJt%HOr=Zw<)q<>=m|_#L==t`1Ho6gOA2+R<*RQR(Me4M#?5nm~dgmPbK6unw z)gjhNkU=r{?T>jnuRH$oqN*=@CqQH%ex$OnG(rG$Zr%8qlp*%73f~ZhN zC(iH2p{6O>4K}&iYEBz@I^bV6H7tb2GUlaRrEs|!yDTNyUvuV2H%svD2 zxe|w^H&#%&V!iAiS@XSH?Bw^5c{y5UuO4)?UqD?GmEKtwBOHXh^A}1>SW}+X?i=r( zG^;J%bO>U(-un)kvc6y_$CJK=f;}MlH18y`WXn2V{OtDoT!A5-d>+f6DRnD$(!Rme zWGMyGP+Q;YKQD-p?`r5C;d|7^kij-g%CUWW^*L5D&MoLO4|pz*6Y(BWvuZv^RqR%4 zJtL*P=U>vK!h`)PZTp&Ztsa-(j*NmSi%Bz_(az&ix4-i=LdZZm^V)v6Acq|!^tPZS z15*U@fxVclEAsri+R?{^!ct{Hwvd{znM|9;fnsBMt}|enDABFZX1w$brNL$vw|8c_ zJrGUgZnLa{soG+yMe)%qMp*7ZrTrBTAu}$#BZcEo(>l1D-{Xuer$lL z3C(!OJx)~gO~{UIn0`7^YgGCP$&dZCb?ZXqi#riUPo^@n$5lJ9 z%#+RRWbvbonih&r?{nbCslGiJ)Uer>sD5=y_sL-w7u^MHh}`EXDGvd~8_hRX%*37s zId-Y_WD0QSqSlp=Egydw>eEY(&l;=f+Z}bT8$4E5N=85bl35Eaw~e=u{XXKc@zblK z@9W1m<@MvwJ08f1iMMPF^t{+x{gM)OsZPYJ(czhCC-}PRHQA}KVqVJKrOee0XGj=VONr(xdSdGz?X|CfI%E>h935cCl4kx5oSD}7Mm!%4lE8!BDzmKtp z@I?DuOXla=mGLT=dX`A7O-Yucrg@L9Z%ek&_XSLw(fVph8F$rlM`w#KU%m&r)K;+^ zKIFSge!UE@ee}~A|LIEb@J%|(VJAY#MoHn>Q$o^ffiBnY4`lFVm-!Zmdl_}xy!Fg@ zQc||s>-kqN z-l-a#u6>N#h%8&-elmTolHPFD*HHU2RNvWZELuz7SZ;d5J`wNy6&2#xQ?zEX^*p3J zzy(|7GR8ngF1X%Tah5r9wZy@UMtb?cbKUfEVE$W#M@&b+;B7%|$?|-2iilY;w~zGp zylg78rDtEZ6NbXx=QQXCkx}^^{&J}uP7Hb+VMP{9Ceo?r(>#Q{Qh;sgB};AdHVjXw z{o+MJUYmQ_7?g{b9Dc#0tkjPrG0g8;4t<9(LfbWv2T(n{_8B=Nn5{&m*^9Mva`{+w z54}I!pCD4B>($hMF>)g?b@Bxt#L<_w?9=I&GU+Pd#y;vIN!{skdX9-G`YWBDP0s4{ zK4*S#6!-_&fKlw(cC%w8$b;s3Utc-$)yMZUGIp*;dYZ7~3nT+&p4@f%^({@|O>_-G z$fNi`*N4SJxG?1DcScL*vva*g{0cQx3>0sxB|KsI&*Yvm6ndPaM7A1!A&`)Hwc5^% zH(W?5FbI?#Y0kv!al6D;C@ewr5xW{AMyQYTW?d!8Ew*<_db9!>rUbgKbyLjQEvMaM za8yNozM_K?#wYr+GwPq!5Id#WeafU=ntb>R1*@)V6aT8g18~A9@iHgb!UKJq8c%Vb zZ(8I(6r2zAPGy8#%*t@I`r?smim7v`TX*n{UnA4n;JGqA5N{e9S4>8~HP z1{oF(;*@LWQEo&rD$nIMWcS!Jhwr`owO+9MH%$<3lHvTBg?%B@cWlyx-Qva&WIT(` z={Y~^`$zD?eiWVK(l5jx%k(^fY4*h4jtI&V@^l%gNE=#QX;XWMVtzfLrWt)-C4Ue% zp4xvSrBG)0bdca)hsI@LCbDRrH11q0oB@@9qOK2Fk<81X8nyN1_Krt&_uVzGFP93E zm&$Lk=L!cH+-}&;sMjc&>e;NYnS1-tJ0m{;(HZs(0W~Vlz9;a}OtCffZRR3|+i(u14wLxY|#%Hl> z&u_CdyL+;0N>0VwJf67{6w^4RowV2Udd~M@&_?5%inXU|-@}GiqA^7a`6U}qsy2Rt zJw8V0AL9LzRJa7xhj8o93@hy>hm~dn%r-dG;$?=uzWqwcw#g%N&$_wZ6aGymid2|q zC6L${jt*d@`Xa*Q(Z3Q1_Ruq1SoGA?deWsuDZ&_W#!*n<&UblTccmnoI*F>N7Y-h(4!b^{g&&_g^Za| z3$|80cW!1x-E^t4jR>+9l`toi=5`Mny`4gfHxBizG}$E1E*iZ+k;muU?LiB?m#Jf9 z9g3f@KliD1CGxhr?ZQ!JOq0r_Vb!_Az^)JoPkl|eR-NFx#aS6mKDFo(2E8ZH4}JH- zUb7^}6koekm&wUJ>%k)R^*TgVVr)Hc68*Nq)S@HI{XL4NXhd z;rOPPbkRj+6Fno>U6{!(%+ZAg~O^|Fh!>nWYd@KHon?`d_6@{mAStvIPoR{N3w1%VUf^I95 z-`j(LjEKAk8eggBhWb***Zoej#&kD&&GDM>gxuOgJWzv{Q* z1+dF`b7yY93cBxAzy3KD$=C;@UGF$hnhzmnzFqeyb(V=5JWBodeh9T)*&7l zmXc9g9H{nmfjdgngl zn4N4p(GlA<;M@CbJ7BL_H;zNr+=OdN@&fv7;KMFKQPliXm+ewLgu2Jo(WiAeFZf?& z&oi|i+zyRvnYrbD*}`)-OwdvNFo@!sKmg2bfz7j!N7BQCG0mE)Fr!>!{Z7=dE*lBs zhEwUni(RdQ%(0z~g3Tv92%o zj62ukPgkC|412t}PT={`7&yFJ-}xj-R+Db{8xv)lP{WT;E_Z*)m_r(G8d@MC&O9(~ zI1>X2zqrdnwz%NWEm<4I+k!IKS%1wi^`^E6C#y@Gj7i7v%i4EclW5nK<0${outFd3 zrR!19WZEyv*B?zD0VNt62tl|Z3t@*NkPs+Dk49S0!P~>v%g(_Y0!P3JcXJg8ulpIn za0HCd)^EgtLc^qR2o%tVl)_=)5EKS3g~1{Suz^wz6dWgog2Nzi999YrM?g?Ws1yQ? z1NvZuVy4psg+V3|jIbreNho6$jOobf^?T_7iL7Z(FOGKS)~T>zS0`^9ke`cTeHTHJrq|SxgtU7|phzJCuxR`{o}$ z&ZN+lT{Y}ME(RdIMU(UC*M7izF50`BeOu#NsrA|!-a&j8_R?o>O3in zwMdbS$5Nik7@zyB~eau-#~*VgLQ_V40s zPJpgT)V|2H8hqjJ#G3E_w5X3go_!zs$@E29IleZlfjsV&f{Tp&!b^*ZJtc|gD^1*JVmW75sh#m*~Zn4q+ zkoC*A4V7P9{SkzA(;n0+vokQs2*mEl{#dwQxIWoDg01$rL_*FFk<1C`UFT_z*(nZp zKf*uOJ)4Lftjb))7iMVdez+q-$69aXHl8*@HdI&t$cMizyh(ZE5f$R5j>?2=?5k;Q z_Z%t~rT&~M8oo@k!I2sFp{05{Zj0%%u3N)*w0D&bRV8N9$W(*b;IWJkE!(3s6Xw8n zs&mR|!kYHsrr9G1Y(&s*)|;gVq917lyr=QVIC66eq*&aUxp*b=sMNsmk??eady8dW zxIWwV21j$`O(ovUEGzdq7*-^+C=2Dwbhw9#|LV?oyV7uvjn+k(N{5Zqa_@SXO7p4n z8z0Pjo8$UHzGqBK~`+n zxynZejRccj2tR78I>M1L7DCBIV}FtuqeBzs}r2YfGTO%dC9@wX6swtZA8DyWEYDC4@7tCr66|2itWC*Ww_r;UU6p3X$uuCu<-V`c~~hv$Ta39mW2$igfykHF+PsRe{=W zNB!=+=?aDI%S_$&cfP+&hlMY>Xx4I_nR31&D7_6SEaBo>?wv|2a}909`>WTC)Y8V) z4e;1LU1I7EQ34wwyh8^4JQzPD--%sI;uWBr7Mutky}SSMZUv#p-|kuJ2<7FE)&>r` zr)uhnYoENI3&`|+7EhTkxMZxot@S**!Jvnamt;F_UirY)a2%@L-mFc=-;QEovHJcn zamHorLGspsM9im~Q8*HAT|CJaZMJQ?OQfX~HZkR0TvDvl{%0vBE=Dr5JLEqrHojLA zR+WR!o|)cDDR?-3*S}27Dnd&wxZV}SCT{RnNH|=m>t>}D^WpOAqDBUPR#KXrrG+V5 zn@0l|%oKM!{jbhC3cZm^Zz$qZ7=JN??y$xwHzZ~me}E3lYau#vPZi=j8}&V@zp(O< z^bbO`@igDJA7lsIY>n&Lo^2duwzc>Y`)ix3$v@3ri7{68x{;*egT_PIbc!@J*Yp}2 z_Du7&yyPWnLLeo*81&u`rCm8~s~2>_ROe_=Nh+2X0&3FpOk^N4;?dSgjy3OcH#_d; zlWhcT`gX+$Tu8a`vW&qKZ$CM7<9he0A&knt)0tvWijuPEGQWtU=jmqw_qW;Tx=LS1 zh>nO^>jr68JreOuP+pLjS1^ zo%#$RwBg^*NZr{WLv?uvA~ZsQIHId>pmWP8r%F#lKFRO>xzuwghab@=7j5eO;P6_W z5Lhs$J9>8Vd5=!PPRAZE>YbMByQ1hY0!(6!GgAaJGbQPA zpF+kxjE8ADwp|@tT&c7wR92zZ$@x`sA3LP^r^hMn-A@Z8r62TduJ}*WJ@<{iO4cEq zqE@}z-2Y9-YOGQA=RA)P_Z=h0&!!93jrU}jA5PGkumpSiN4&;Eg_%M$ns@fnCq0c* z^q#M-ZArb&{c?*RRtR%=hM((P33+eHIo-VRh>|f9%4)_Z!PfBOt4aZPc9DTrO^HuL z`sP4?5p?;wzG2Gf1+~!dUF8S<0oR(e$mK+o7p9cB1KZyR)4gK9*S9##jKzzRhHcJ2 zeuWpvCOqS)9-~nSOIAms~QP z@+HcmGhFpM&BIaMXFCd(f27`wI@kKEkg}rd9XOYNwq^LbKP)0YOqI=9Z=vE1TLWZg z71kR#72FW8V>MBvDSljO5_YDp6SmfA39uPEN(@l6LD6tR`V58=1BFV#kyt`MaLc+j zBSe8lqolAHLh=?XL2Oo-0u6&op^?9Poo0o=C^VX&v&BIuoE4%(!QoOkpv3H-#gHSh zFe&J7B7r$!3M2w01;+ueYy|5$AxZ=eCWQp1o84d~WF5c55mFc!n$S6ip@ai{a4ei~ zc0-WhId_Tzg_A-;VFZUiuQ0R}40b#PE1_zGi4Z!&MhOF|UN{y>pqv*Yym#gx^zOn4 z5%Z^jdl}51s?yARyo%-cUPcgU_pCKlWs2v+GB#PRZ2hZd(K=XC0L~pdv^6)hovrZN zB&oK)q<20bIkb(Xb>r6SgE0P$>7TnWxo63!=8OqEZdU1{vxL^YF%|PM!ojCb{x!z3 zqclxlp2`5^L-D2$y=A2$`pM59%ah04Ta$SjoRN>eH~h-1tP(Df8CB40sEZvimN-Wg z`pIOpx!v^iyG;Kb2NV^-r1Dj|CQh@P`dYv%r7KNn-@PQc1&H_;N15-dM}slZf~jK! zv8CkUG_A?SxK0C?rV;<42uX|nq(?uLe!V>R99`b^v=MjhirLM$swWl^=|{V|T^7Ag zd}66t_|_K(MUS5>H>nKXiLo{QFb9+7rCwqk8<=IxnC9m*bgzFw?R97&J23vW+1izD zCm;Wz1mh*%ubKC)CuQ@Bt<^m&sQohalpk$%R%kurl#6km35>b@Os*TnwWfnDUp8A_ zrQob9kTPvtglgfP$r*{(T9S56`p**zxd|nA9^fS=-%87HrWTJ6c+>JI7=3T!!q-l+MX|->|;j(_r%fc{RS6h zlj{?EMVc#Wdw#{gy1GCXlVWkdG(6|h(-K65u(Nq!`024o zuw7wE3X8JoNMK{=%=4aD*>mcFBgoX=(1{`eyfc%G=N=XU39-8nk*u2$I~h&Ylht?H zus_Ud#KdGvM+u&)c3MwR_L5`d1c~6KE>L1V{O8fmYGrq_a&gDoLy}Y6joz%DOye93 zck?4(U!gahp%u~+un9_XVim5K2VJ`NOCx^5KU8Ndij-R6wq#QvBR8LQOVF6-Tf+mj zJiM7o+uGN7$LYsEuJ1(OpIw{FPM9uzKU(HW4TFSq#k!N2$htD@4?Hz798#S7X*UvZ zP~%=q!F0yAdE@b149zLEZ~?~1)xCyKM@i7MD}AkEx$%`zb?>e!Jb4zkmrBlHWm>wbpzGce)ZP~+%cexXjIzFyMpeUjAgzRH0duhN zudF(U(i?4Ndn^j}q^_!&dCyp8S-(U#7_AO9aN1}`jW|bnxe3~==Pa$)EZMzY{Vs%e zG_LGkJ(%{8p2{1y&3^dE+c3GENBx?q1=B6h`yeGbPIb(_{86@A(p=T%8*GHCv2T?n zIAz-$&D(4FRP!qRm31ptWA)h3dm<1pS+lj)Bd6j+(K}k8q%Y@pg(uGGqC=@?Cn?t* z>X$!C+JU3^NWm(c7vH_<{;t`YVJ8d2-;J@yl$p9Z8?)#8mn}i>XMEi%Ei&`Ha{iRi zEARA?QvTw)jJt+(!5`Gb+mn&Yx*{#%_QkPz2Evr)nyq>MEM6Vt5Xk$@Yd#B z7t#~yT~gWZ>yHP)YFw+n7^;0OtDFDntlSAHg3PGHK4Yvt8lRTR_&*^|Fl#y+@JMg9^P;q?%|lPp z)%vNZ+90VGL)X2}Ke@U6Rzs^$Im>z}7j7o|(iigG%?UByTb0b!4iS?a;`-Qdy(Qxa zJ?8Q)_llm(JJQecg{MPr)+Gz!*+0kM@)k_Kq<0RJqca=Yo@L(jIX90UJwDKPGhr*Y zMWa*qNpcd_{)-~5v)ZD~+3#bgRNi`ABX!LD($P>f#Mm16?Md2`smi7qTQ|2x6#uB zkL-r{Ufeuf2)j^{UA@acQR$SIdFdiF_Nx??rApVT6Pd7*>S45ii7RM;=$^A17eB}> z_1MRrVgrhle90Y{&J&f@x&Xyv)y%ua)O7xNKPX{M4#lEosTVB$V%0~9r3=+PoDJ3{l2&6zGkN*q`w!w2{n2{ z_3nvrLyIUWVe!J7igAt8Ok&p$^y05?N&$5QN7~m<2ZS5z9fX|?VM3NOCjq)COvuo~7rbHtVQdpoYO54Oxpn)n3h5cP2t!@IP6$%ZU%%Oh2i)|g3T1Y7b4EDPYy0#@m z=-=cb6aY99fsumY5QM%hG*D$Bq!1_!fo>aUBY@LD;3Q8SXu|>gxHhuf6(odivJxn^ zIS9mUTSD0`WhK>K3@IrRTS@r#21JU)5e&WygP@gx-z`YFV89vQ@d2J03JvhG06u~F z=R6MuuiQSsl7bMG;zwSjAmqzT&}|S1RSh8p0X$IX>RB-8IncmVr;>xnL8<8=T4DhO z$cGe#BZfJG*s7%|K_+4#D6vTke2Qr80AeRrLP0HTz8mUCJ^?5KUDe-MOfX2vyCuxaimjSN# z)WL-y7!h|FYzNpV^DUS0Cw#Pz%5k^d>Rm{TnlVV+&u;awZU9~c=Fl+a9axio&x|W z5<`3sAV3F92YikwrwxeYssq*sByZFKixbUs0Iml*U)3cXxcflh*xv`uG}0Q*_TI@Gyaztb2w7B1E z80drlGZy#Hr2-uH+qnRaI#!pRXl(^1BNp3%A;eCAn)yG}e`dsCjydxX!S-N?7#w#z zACR;lva&SNDh}R&y1;$NG5`O`D+nl*sA&&AbLLNQY5V%PI=dfVxnTd?!f4sJ9lzpm z#3XyL3=sI;_TU(D1QZT~5ltPye1Dq34qzuBv_Cn3mC3Mh42&q@2-YOS!mt=(@INgm zjQH-jg~4IaM4oG4O`>Zs5R-w|!181mEEGws128fS28JQhIUTpq2q@9~cMI47h);jF zkO&y@@OKNy?nF)J<8g2dl$hZRK7R^u!0`{_4xu@I!eJN~7C~Hd2IDwjXuulBzyIlk z;?P7{7oZaj`+s!8;l%jgoml8eN;D3Msh)5F%YvNHa2VjSe=|lQk4=991H?UvAu-1` z{`WXE^lw3dn=BMD)D>)vM|B7{NFW`a>3cUiL|A_@)APl(i`}aT;7MSNG zhQa+m3>VUT}C zKM=vcBNL$hk8;2w!kt_Za2Of`Mc_|Nf`*|HCj$Tt#r!P{pzujkqoLTpgh9hFz}@=4 z6+y#+yXrp}{!fkt4ovP0J6g0v`Ea!6@-VPQPAUE^7!{3 za{(9%`5y`YDUfT2$AKQJf`b~4ig7~=mdga2oXgCUSm)QJcNFd#JlEj0{@!kyfdV8AK# zUjhPOO8mtSu<6Nk3&W#f@RR<80ecMegpYxJ7Xv+EegMP$B_I}uIcaJb4lvCLMSxt3 zIdOq#t4TYk$-Q^Xw1pv11zWCY4U&F2?xrClW_!KDCGYshyPPyV6n&b z_rHm8fRKM-$dlT^fwToXk!S!6dvdpf!+}(D!o_en9;j|km=zcZ{MUP8VmK6aT=V@) zKsXc&{~N=d%pY(-4b+L%1Yj`a@f?Bx$N!oi0I?^c8W@Nmj)Z{u@xXsDdLAA=5TMfh zU3*HayE}RSZvesZM?UJnH#M?wgbGknL4nMsq<9gIMJprGz#k.kb|, i.e., those example \verb|ex| stored as \verb|neg(ex)|; if set to \verb|cw|, the negative examples are generated according to the closed world assumption, i.e., all atoms for target predicates that are not positive examples. The set of all atoms is obtained by collecting the set of constants for each type of the arguments of the target predicate. \end{itemize} +The testing program produces the following output in the current folder: +\begin{itemize} +\item \verb|cll.pl|: for each fold, the list of examples orderd by their probability of being true +\item \verb|areas.csv|: the areas under the Precision-Recall curve and the Receiver Operating Characteristic curve +\item \verb|curve_roc.m|: a Matlab file for plotting the Receiver Operating Characteristic curve +\item \verb|curve_pr.m|: a Matlab file for plotting the Precision-Recall curve +\end{itemize} + \subsection{Learning Examples} The subfolders \verb|em|, \verb|rib|, \verb|slipcase| and \verb|slipcover| of the \verb|packages/cplint| folder in Yap git distribution diff --git a/packages/cplint/slipcover/test.pl b/packages/cplint/slipcover/test.pl index a87cdf122..42a7bc9eb 100644 --- a/packages/cplint/slipcover/test.pl +++ b/packages/cplint/slipcover/test.pl @@ -431,8 +431,8 @@ x=[x 1.0] y=[y 0.0] k=convhull(x,y) plot(x(k),y(k),'r-',x,y,'--b+') -A = polyarea(x,y)~n~n -save area_roc.csv A -ascii -append +%A = polyarea(x,y)~n~n +%save area_roc.csv A -ascii -append ", []). @@ -462,8 +462,8 @@ set(gca,'YLim',[0.0 1.0]) rec=[0.0 rec 1.0]; prec=[0.0 prec 0.0]; plot(rec,prec,'--*k') -A=polyarea(rec,prec) -save area_pr.csv A -ascii -append +%A=polyarea(rec,prec) +%save area_pr.csv A -ascii -append ~n~n", []).

    5.3 slipcover.pl with ?:- sl(stem).

    +

    5.4 Testing

    -

    To test the theories learned, load

    To test the theories learned, load test.pl with

    ?:- use_module(library(’cplint/test’)).
    -

    and call +

    and call

    ?:- main([<stem_fold1>,...,<stem_foldn>],[<testing_set_fold1>,...,  
      <testing_set_foldn>]).
    -

    For example, if you want to test the theory in

    For example, if you want to test the theory in ai_train.rules on the set ai.kb, you can call @@ -1432,7 +1433,7 @@ you can call

    ?:- main([ai_train],[ai]).
    -

    The testing program has the following parameter: +

    The testing program has the following parameter:

    -

    +

    The testing program produces the following output in the current folder: +

    +