Merge branch 'master' of ssh://git.dcc.fc.up.pt/yap-6.3

This commit is contained in:
Vitor Santos Costa 2013-07-16 10:00:51 -05:00
commit 4245a04ed0
15 changed files with 266080 additions and 1837 deletions

View File

@ -2004,6 +2004,7 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose
#endif /* TABLING */
op = rtp->opc;
opnum = Yap_op_from_opcode(op);
// fprintf(stderr, "%s\n", Yap_op_names[opnum]);
#ifdef TABLING
}
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) {
@ -2166,11 +2167,37 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose
case _table_answer_resolution:
{
CELL *vars_ptr, vars;
init_substitution_pointer(gc_B, vars_ptr, CONS_CP(gc_B)->cp_dep_fr);
vars = *vars_ptr++;
while (vars--) {
mark_external_reference(vars_ptr PASS_REGS);
vars_ptr++;
dep_fr_ptr dep_fr = CONS_CP(gc_B)->cp_dep_fr;
ans_node_ptr ans_node = DepFr_last_answer(dep_fr);
if (TrNode_child(ans_node)) {
/* unconsumed answers */
#ifdef MODE_DIRECTED_TABLING
if (IS_ANSWER_INVALID_NODE(TrNode_child(ans_node))) {
ans_node_ptr old_ans_node;
old_ans_node = ans_node;
ans_node = TrNode_child(ans_node);
do {
ans_node = TrNode_child(ans_node);
} while (IS_ANSWER_INVALID_NODE(ans_node));
TrNode_child(old_ans_node) = ans_node;
} else
#endif /* MODE_DIRECTED_TABLING */
ans_node = TrNode_child(ans_node);
if (gc_B == DepFr_leader_cp(dep_fr)) { \
/* gc_B is a generator-consumer node */ \
/* never here if batched scheduling */ \
TABLING_ERROR_CHECKING(generator_consumer, IS_BATCHED_GEN_CP(gc_B)); \
vars_ptr = (CELL *) (GEN_CP(gc_B) + 1); \
vars_ptr += SgFr_arity(GEN_CP(gc_B)->cp_sg_fr); \
} else { \
vars_ptr = (CELL *) (CONS_CP(gc_B) + 1); \
} \
vars = *vars_ptr++;
while (vars--) {
mark_external_reference(vars_ptr PASS_REGS);
vars_ptr++;
}
}
}
nargs = 0;
@ -3113,18 +3140,43 @@ sweep_choicepoints(choiceptr gc_B USES_REGS)
case _table_answer_resolution:
{
CELL *vars_ptr, vars;
sweep_environments(gc_B->cp_env, EnvSize(gc_B->cp_cp), EnvBMap(gc_B->cp_cp) PASS_REGS);
init_substitution_pointer(gc_B, vars_ptr, CONS_CP(gc_B)->cp_dep_fr);
vars = *vars_ptr++;
while (vars--) {
CELL cp_cell = *vars_ptr;
if (MARKED_PTR(vars_ptr)) {
UNMARK(vars_ptr);
if (HEAP_PTR(cp_cell)) {
into_relocation_chain(vars_ptr, GET_NEXT(cp_cell) PASS_REGS);
}
dep_fr_ptr dep_fr = CONS_CP(gc_B)->cp_dep_fr;
ans_node_ptr ans_node = DepFr_last_answer(dep_fr);
if (TrNode_child(ans_node)) {
/* unconsumed answers */
#ifdef MODE_DIRECTED_TABLING
if (IS_ANSWER_INVALID_NODE(TrNode_child(ans_node))) {
ans_node_ptr old_ans_node;
old_ans_node = ans_node;
ans_node = TrNode_child(ans_node);
do {
ans_node = TrNode_child(ans_node);
} while (IS_ANSWER_INVALID_NODE(ans_node));
TrNode_child(old_ans_node) = ans_node;
} else
#endif /* MODE_DIRECTED_TABLING */
ans_node = TrNode_child(ans_node);
if (gc_B == DepFr_leader_cp(dep_fr)) { \
/* gc_B is a generator-consumer node */
/* never here if batched scheduling */
TABLING_ERROR_CHECKING(generator_consumer, IS_BATCHED_GEN_CP(gc_B));
vars_ptr = (CELL *) (GEN_CP(gc_B) + 1);
vars_ptr += SgFr_arity(GEN_CP(gc_B)->cp_sg_fr);
} else {
vars_ptr = (CELL *) (CONS_CP(gc_B) + 1); \
}
sweep_environments(gc_B->cp_env, EnvSize(gc_B->cp_cp), EnvBMap(gc_B->cp_cp) PASS_REGS);
vars = *vars_ptr++;
while (vars--) {
CELL cp_cell = *vars_ptr;
if (MARKED_PTR(vars_ptr)) {
UNMARK(vars_ptr);
if (HEAP_PTR(cp_cell)) {
into_relocation_chain(vars_ptr, GET_NEXT(cp_cell) PASS_REGS);
}
}
vars_ptr++;
}
vars_ptr++;
}
}
break;

View File

@ -1,123 +1,123 @@
/* start css.sty */
.cmr-7{font-size:70%;}
.cmmi-7{font-size:70%;font-style: italic;}
.cmmi-10{font-style: italic;}
.cmr-17{font-size:170%;}
.cmtt-12x-x-144{font-size:172%;font-family: monospace;}
.cmtt-12x-x-144{font-family: monospace;}
.cmr-12{font-size:120%;}
.cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace;}
.cmbx-10{ font-weight: bold;}
.cmti-10{ font-style: italic;}
p.noindent { text-indent: 0em }
td p.noindent { text-indent: 0em; margin-top:0em; }
p.nopar { text-indent: 0em; }
p.indent{ text-indent: 1.5em }
@media print {div.crosslinks {visibility:hidden;}}
a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; }
td center { margin-top:0em; margin-bottom:0em; }
.Canvas { position:relative; }
img.math{vertical-align:middle;}
li p.indent { text-indent: 0em }
li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; }
li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
.enumerate4 {list-style-type:upper-alpha;}
div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
.obeylines-h,.obeylines-v {white-space: nowrap; }
div.obeylines-v p { margin-top:0; margin-bottom:0; }
.overline{ text-decoration:overline; }
.overline img{ border-top: 1px solid black; }
td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;}
.rightline {text-align:right;}
div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table}
div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.minipage{width:100%;}
div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
div.center div {text-align: left;}
div.flushright, div.flushright div.flushright {text-align: right;}
div.flushright div {text-align: left;}
div.flushleft {text-align: left;}
.underline{ text-decoration:underline; }
.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
.framebox-c {text-align:center;}
.framebox-l {text-align:left;}
.framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;}
td p:first-child{ margin-top:0em; }
td p:last-child{ margin-bottom:0em; }
div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; }
div.td11{ margin-left:5pt; margin-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
td.td00{ padding-left:0pt; padding-right:0pt; }
td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 1px; margin:0px; }
.tabbing-right {text-align:right;}
span.TEX {letter-spacing: -0.125em; }
span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
a span.TEX span.E {text-decoration: none; }
span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;}
div.figure img {text-align:center;}
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
table.equation {width:100%;}
.equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; }
td.equation-label { width:5%; text-align:center; }
td.eqnarray4 { width:5%; white-space: normal; }
td.eqnarray2 { width:5%; }
table.eqnarray-star, table.eqnarray {width:100%;}
div.eqnarray{text-align:center;}
div.array {text-align:center;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
.verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;}
h2.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
div.author{white-space: nowrap;}
.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
.abstract p {margin-left:5%; margin-right:5%;}
div.abstract {width:100%;}
.figure img.graphics {margin-left:10%;}
/* end css.sty */
/* start css.sty */
.cmr-7{font-size:70%;}
.cmmi-7{font-size:70%;font-style: italic;}
.cmmi-10{font-style: italic;}
.cmr-17{font-size:170%;}
.cmtt-12x-x-144{font-size:172%;font-family: monospace;}
.cmtt-12x-x-144{font-family: monospace;}
.cmr-12{font-size:120%;}
.cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace;}
.cmbx-10{ font-weight: bold;}
.cmti-10{ font-style: italic;}
p.noindent { text-indent: 0em }
td p.noindent { text-indent: 0em; margin-top:0em; }
p.nopar { text-indent: 0em; }
p.indent{ text-indent: 1.5em }
@media print {div.crosslinks {visibility:hidden;}}
a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; }
td center { margin-top:0em; margin-bottom:0em; }
.Canvas { position:relative; }
img.math{vertical-align:middle;}
li p.indent { text-indent: 0em }
li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; }
li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
.enumerate4 {list-style-type:upper-alpha;}
div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
.obeylines-h,.obeylines-v {white-space: nowrap; }
div.obeylines-v p { margin-top:0; margin-bottom:0; }
.overline{ text-decoration:overline; }
.overline img{ border-top: 1px solid black; }
td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;}
.rightline {text-align:right;}
div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table}
div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.minipage{width:100%;}
div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
div.center div {text-align: left;}
div.flushright, div.flushright div.flushright {text-align: right;}
div.flushright div {text-align: left;}
div.flushleft {text-align: left;}
.underline{ text-decoration:underline; }
.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
.framebox-c {text-align:center;}
.framebox-l {text-align:left;}
.framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;}
td p:first-child{ margin-top:0em; }
td p:last-child{ margin-bottom:0em; }
div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; }
div.td11{ margin-left:5pt; margin-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
td.td00{ padding-left:0pt; padding-right:0pt; }
td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 1px; margin:0px; }
.tabbing-right {text-align:right;}
span.TEX {letter-spacing: -0.125em; }
span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
a span.TEX span.E {text-decoration: none; }
span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;}
div.figure img {text-align:center;}
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
table.equation {width:100%;}
.equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; }
td.equation-label { width:5%; text-align:center; }
td.eqnarray4 { width:5%; white-space: normal; }
td.eqnarray2 { width:5%; }
table.eqnarray-star, table.eqnarray {width:100%;}
div.eqnarray{text-align:center;}
div.array {text-align:center;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
.verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;}
h2.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
div.author{white-space: nowrap;}
.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
.abstract p {margin-left:5%; margin-right:5%;}
div.abstract {width:100%;}
.figure img.graphics {margin-left:10%;}
/* end css.sty */

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -31,10 +31,10 @@ fabrizio.riguzzi@unife.it}
\texttt{cplint} is a suite of programs for reasoning with ICL \cite{DBLP:journals/ai/Poole97}, LPADs \cite{VenVer03-TR,VenVer04-ICLP04-IC} and CP-logic programs \cite{VenDenBru-JELIA06,DBLP:journals/tplp/VennekensDB09}. It contains programs both for inference and learning.
\section{Installation}
\texttt{cplint} is distributed in source code in the source code development tree of Yap. It includes Prolog and C files. Download it by following the instruction in \url{http://www.ncc.up.pt/~vsc/Yap/downloads.html}.
\texttt{cplint} is distributed in source code in the source code development tree of Yap. It includes Prolog and C files. Download it by following the instruction in \url{http://www.dcc.fc.up.pt/\string ~vsc/Yap/downloads.html}.
\texttt{cplint} requires \href{http://vlsi.colorado.edu/~fabio/CUDD/}{CUDD}.
You can download CUDD from \url{ftp://vlsi.colorado.edu/pub/cudd-2.4.2.tar.gz}.
\texttt{cplint} requires \href{http://vlsi.colorado.edu/\string ~fabio/CUDD/}{CUDD}.
You can download CUDD from \url{ftp://vlsi.colorado.edu/pub/cudd-2.5.0.tar.gz}.
Compile CUDD:
\begin{enumerate}
@ -48,7 +48,7 @@ when compiling Yap following the instruction of the \texttt{INSTALL} file in the
\begin{verbatim}
configure --enable-cplint=DIR
\end{verbatim}
where \verb|DIR| is the directory where CUDD is, i.e., the directory ending with \texttt{cudd-2.4.2}.
where \verb|DIR| is the directory where CUDD is, i.e., the directory ending with \texttt{cudd-2.5.0}.
Under Windows, you have to use Cygwin (CUDD does not compile under MinGW), so\\
\begin{verbatim}
configure --enable-cplint=DIR --enable-cygwin
@ -114,7 +114,7 @@ average/2
\end{verbatim}
that, given a list of numbers, computes its arithmetic mean.
The syntax of ICL program is the one used by the \href{http://www.cs.ubc.ca/~poole/aibook/code/ailog/ailog2.html}{AILog 2} system.
The syntax of ICL program is the one used by the \href{http://www.cs.ubc.ca/\string ~poole/aibook/code/ailog/ailog2.html}{AILog 2} system.
\section{Inference}
\texttt{cplint} contains various modules for answering queries.
@ -143,7 +143,7 @@ It is also able to deal with extensions of LPADs and CP-logic: the clause bodies
\item \texttt{montecarlo.pl} performs Monte Carlo \cite{BraRig10-ILP10-IC}
\item \texttt{mcintyre.pl}: implements the algorithm MCINTYRE (Monte Carlo INference wiTh Yap REcord) \cite{Rig11-CILC11-NC}
\end{itemize}
\item \texttt{approx/exact.pl} as \texttt{lpadsld.pl} but uses SimplecuddLPADs, a modification of the \href{www.cs.kuleuven.be/~theo/tools/simplecudd.html}{Simplecudd} instead of the \texttt{cplint} library for building BDDs and computing the probability.
\item \texttt{approx/exact.pl} as \texttt{lpadsld.pl} but uses SimplecuddLPADs, a modification of the \href{http://dtai.cs.kuleuven.be/problog/download.html}{Simplecudd} instead of the \texttt{cplint} library for building BDDs and computing the probability.
\end{itemize}
These modules answer queries using the definition of the semantics of LPADs and CP-logic:
@ -268,7 +268,7 @@ Variables: [(2,[X=2,X1=1]),(2,[X=1,X1=0]),(1,[])]
In the example above variable \texttt{X0} corresponds to clause \texttt{2} with the substitutions \texttt{X=2,X1=1},
variable \texttt{X1} corresponds to clause \texttt{2} with the substitutions \texttt{X=1,X1=0} and
variable \texttt{X2} corresponds to clause \texttt{1} with the empty substitution.
You can view the graph with \href{www.graphviz.org}{\texttt{graphviz}} using the
You can view the graph with \href{http://www.graphviz.org}{\texttt{graphviz}} using the
command
\begin{verbatim}
dotty cpl.dot &
@ -504,7 +504,7 @@ unseen(<predicate>/<arity>).
\end{verbatim}
For SLIPCASE, you have to specify the language bias by means of mode declarations in the style of
\href{http://www.doc.ic.ac.uk/~shm/progol.html}{Progol}.
\href{http://www.doc.ic.ac.uk/\string ~shm/progol.html}{Progol}.
\begin{verbatim}
modeh(<recall>,<predicate>(<arg1>,...).
\end{verbatim}
@ -529,6 +529,25 @@ for specifying an output variable of type \texttt{<type>}. or
\end{verbatim}
for specifying a constant.
An example of language bias for the UWCSE domain is
\begin{verbatim}
output(advisedby/2).
input(student/1).
input(professor/1).
....
modeh(*,advisedby(+person,+person)).
modeb(*,professor(+person)).
modeb(*,student(+person)).
modeb(*,sameperson(+person, -person)).
modeb(*,sameperson(-person, +person)).
modeb(*,samecourse(+course, -course)).
modeb(*,samecourse(-course, +course)).
....
\end{verbatim}
\subsection{Parameters}
In order to set the algorithms' parameters, you have to insert in \texttt{<stem>.l} commands of the form
\begin{verbatim}
@ -601,6 +620,9 @@ and call
\begin{verbatim}
?:- sl(stem).
\end{verbatim}
\subsection{Learning Examples}
The subfolders \verb|em|, \verb|rib| and \verb|slipcase| of the \verb|packages/cplint| folder in Yap git distribution
contain examples of input and output files for the learning algorithms.
\section{License}
\label{license}
@ -610,10 +632,10 @@ and call
\texttt{cplint}, as Yap, follows the Artistic License 2.0 that you can find in Yap CVS root dir. The copyright is by Fabrizio Riguzzi.
\vspace{3mm}
The modules in the approx subdirectory use SimplecuddLPADs, a modification of the \href{www.cs.kuleuven.be/~theo/tools/simplecudd.html}{Simplecudd} library whose copyright is by Katholieke Universiteit Leuven and that follows the Artistic License 2.0.
The modules in the approx subdirectory use SimplecuddLPADs, a modification of the \href{http://dtai.cs.kuleuven.be/problog/download.html}{Simplecudd} library whose copyright is by Katholieke Universiteit Leuven and that follows the Artistic License 2.0.
\vspace{3mm}
Some modules use the library \href{http://vlsi.colorado.edu/~fabio/}{CUDD} for manipulating BDDs that is included in glu.
Some modules use the library \href{http://vlsi.colorado.edu/\string ~fabio/}{CUDD} for manipulating BDDs that is included in glu.
For the use of CUDD, the following license must be accepted:
\vspace{3mm}
@ -654,7 +676,7 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
\texttt{lpad.pl}, \texttt{semlpad.pl} and \texttt{cpl.pl} are based on the SLG system
by \href{http://engr.smu.edu/~wchen/}{Weidong Chen} and \href{http://www.cs.sunysb.edu/~warren/}{David Scott Warren},
by Weidong Chen and \href{http://www.cs.sunysb.edu/\string ~warren/}{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.
\bibliographystyle{plain}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,2 @@
advisedby(X,Y):0.5.
advisedby(X,Y):0.5.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,157 @@
output(advisedby/2).
input(student/1).
input(professor/1).
input(inphase/2).
input(hasposition/2).
input(publication/2).
input(yearsinprogram/2).
input(taughtby/3).
input(ta/3).
input(courselevel/2).
input(tempadvisedby/2).
input(projectmember/2).
input(sameperson/2).
input(samecourse/2).
input(sameproject/2).
modeh(*,advisedby(+person,+person)).
modeb(*,professor(+person)).
modeb(*,student(+person)).
modeb(*,sameperson(+person, -person)).
modeb(*,sameperson(-person, +person)).
modeb(*,samecourse(+course, -course)).
modeb(*,samecourse(-course, +course)).
modeb(*,sameproject(-project, +project)).
modeb(*,sameproject(+project, -project)).
modeb(*,publication(+title, -person)).
modeb(*,courselevel(+course, -level)).
modeb(*,hasposition(+person, -position)).
%modeb(*,projectmember(+project, -person)).
modeb(*,projectmember(project119, +person)).
modeb(*,projectmember(project130, +person)).
modeb(*,projectmember(project152, +person)).
modeb(*,projectmember(project62, +person)).
modeb(*,projectmember(project94, +person)).
modeb(*,inphase(+person, -phase)).
modeb(*,tempadvisedby(+person, -person)).
modeb(*,yearsinprogram(+person, -integer)).
modeb(*,publication(-title, +person)).
%modeb(*,courselevel(-course, +level)).
modeb(*,courselevel(+course, level_500)).
modeb(*,courselevel(+course, level_400)).
modeb(*,courselevel(+course, level_300)).
%modeb(*,hasposition(-person, +position)).
modeb(*,hasposition(+person, faculty)).
modeb(*,hasposition(+person, faculty_affiliate)).
modeb(*,hasposition(+person, faculty_adjunct)).
modeb(*,hasposition(+person, faculty_visiting)).
modeb(*,hasposition(+person, faculty_emeritus)).
modeb(*,projectmember(-project, +person)).
%modeb(*,inphase(-person, +phase)).
modeb(*,inphase(+person, post_quals)).
modeb(*,inphase(+person, post_generals)).
modeb(*,inphase(+person, pre_quals)).
modeb(*,tempadvisedby(-person, +person)).
%modeb(*,yearsinprogram(-person, +integer)).
modeb(*,yearsinprogram(+person, year_1)).
modeb(*,yearsinprogram(+person, year_2)).
modeb(*,yearsinprogram(+person, year_3)).
modeb(*,yearsinprogram(+person, year_4)).
modeb(*,yearsinprogram(+person, year_5)).
modeb(*,yearsinprogram(+person, year_6)).
modeb(*,yearsinprogram(+person, year_7)).
modeb(*,yearsinprogram(+person, year_8)).
modeb(*,yearsinprogram(+person, year_9)).
modeb(*,yearsinprogram(+person, year_10)).
modeb(*,yearsinprogram(+person, year_12)).
modeb(*,taughtby(+course, -person, -quarter)).
modeb(*,ta(+course, -person, -quarter)).
modeb(*,taughtby(-course, +person, -quarter)).
modeb(*,ta(-course, +person, -quarter)).
%modeb(*,taughtby(-course, -person, +quarter)).
%modeb(*,ta(-course, -person, +quarter)).
modeb(*,taughtby(+course, +person, -quarter)).
modeb(*,ta(+course, +person, -quarter)).
%modeb(*,taughtby(+course, -person, +quarter)).
%modeb(*,ta(+course, -person, +quarter)).
modeb(*,taughtby(+course, -person, autumn_0001)).
modeb(*,ta(+course, -person, autumn_0001)).
modeb(*,taughtby(+course, -person, autumn_0102)).
modeb(*,ta(+course, -person, autumn_0102)).
modeb(*,taughtby(+course, -person, autumn_0203)).
modeb(*,ta(+course, -person, autumn_0203)).
modeb(*,taughtby(+course, -person, autumn_0304)).
modeb(*,ta(+course, -person, autumn_0304)).
modeb(*,taughtby(+course, -person, spring_0001)).
modeb(*,ta(+course, -person, spring_0001)).
modeb(*,taughtby(+course, -person, spring_0102)).
modeb(*,ta(+course, -person, spring_0102)).
modeb(*,taughtby(+course, -person, spring_0203)).
modeb(*,ta(+course, -person, spring_0203)).
modeb(*,taughtby(+course, -person, spring_0304)).
modeb(*,ta(+course, -person, spring_0304)).
modeb(*,taughtby(+course, -person, summer_0102)).
modeb(*,ta(+course, -person, summer_0102)).
modeb(*,taughtby(+course, -person, summer_0203)).
modeb(*,ta(+course, -person, summer_0203)).
modeb(*,taughtby(+course, -person, winter_0001)).
modeb(*,ta(+course, -person, winter_0001)).
modeb(*,taughtby(+course, -person, winter_0102)).
modeb(*,ta(+course, -person, winter_0102)).
modeb(*,taughtby(+course, -person, winter_0203)).
modeb(*,ta(+course, -person, winter_0203)).
modeb(*,taughtby(+course, -person, winter_0304)).
modeb(*,ta(+course, -person, winter_0304)).
%modeb(*,taughtby(-course, +person, +quarter)).
%modeb(*,ta(-course, +person, +quarter)).
modeb(*,taughtby(-course, +person, autumn_0001)).
modeb(*,ta(-course, +person, autumn_0001)).
modeb(*,taughtby(-course, +person, autumn_0102)).
modeb(*,ta(-course, +person, autumn_0102)).
modeb(*,taughtby(-course, +person, autumn_0203)).
modeb(*,ta(-course, +person, autumn_0203)).
modeb(*,taughtby(-course, +person, autumn_0304)).
modeb(*,ta(-course, +person, autumn_0304)).
modeb(*,taughtby(-course, +person, spring_0001)).
modeb(*,ta(-course, +person, spring_0001)).
modeb(*,taughtby(-course, +person, spring_0102)).
modeb(*,ta(-course, +person, spring_0102)).
modeb(*,taughtby(-course, +person, spring_0203)).
modeb(*,ta(-course, +person, spring_0203)).
modeb(*,taughtby(-course, +person, spring_0304)).
modeb(*,ta(-course, +person, spring_0304)).
modeb(*,taughtby(-course, +person, summer_0102)).
modeb(*,ta(-course, +person, summer_0102)).
modeb(*,taughtby(-course, +person, summer_0203)).
modeb(*,ta(-course, +person, summer_0203)).
modeb(*,taughtby(-course, +person, winter_0001)).
modeb(*,ta(-course, +person, winter_0001)).
modeb(*,taughtby(-course, +person, winter_0102)).
modeb(*,ta(-course, +person, winter_0102)).
modeb(*,taughtby(-course, +person, winter_0203)).
modeb(*,ta(-course, +person, winter_0203)).
modeb(*,taughtby(-course, +person, winter_0304)).
modeb(*,ta(-course, +person, winter_0304)).

View File

@ -0,0 +1,34 @@
/* SLIPCASE Final CLL -0.461865
Execution time 100.887000
setting(epsilon_em,0.0001).
setting(epsilon_em_fraction,1.0e-5).
setting(eps,0.0001).
setting(eps_f,1.0e-5).
setting(epsilon_sem,2).
setting(random_restarts_REFnumber,1).
setting(random_restarts_number,1).
setting(iterREF,-1).
setting(iter,-1).
setting(examples,atoms).
setting(group,1).
setting(d,1).
setting(verbosity,1).
setting(logzero,log(1.0e-6)).
setting(initial_clauses_modeh,1).
setting(max_iter,10).
setting(max_var,5).
setting(max_rules,10).
setting(beamsize,20).
setting(epsilon_parsing,1.0e-10).
setting(tabling,off).
setting(bagof,false).
setting(depth_bound,false).
setting(depth,2).
setting(single_var,false).
setting(compiling,off).
*/
advisedby(A,B):0.264403 :-
professor(B),
student(A).

View File

@ -2,7 +2,7 @@
EMBLEM and SLIPCASE
Copyright (c) 2011, Fabrizio Riguzzi and Elena Bellodi
Copyright (c) 2013, Fabrizio Riguzzi and Elena Bellodi
This package uses the library cudd, see http://vlsi.colorado.edu/~fabio/CUDD/
for the relative license.
@ -41,24 +41,18 @@ typedef struct
tablerow * table;
static variable * vars;
static variable ** vars_ex;
static int * bVar2mVar;
static int ** bVar2mVar_ex;
static double * sigma;
static double ***eta;
static double ***eta_temp;
static double **arrayprob;
static int *rules;
static DdManager *mgr;
static DdManager **mgr_ex;
static int *nVars;
static int *nVars_ex;
static int nRules;
double * probs;
double * nodes_probs_ex;
double ** probs_ex;
static int * boolVars;
static int * boolVars_ex;
tablerow * nodesB;
tablerow * nodesF;
@ -75,13 +69,13 @@ static int init(void);
static int end(void);
static int EM(void);
static int Q(void);
double ProbPath(DdNode *node, int comp_par);
double ProbPath(DdNode *node, int comp_par, int nex);
static int rec_deref(void);
int indexMvar(DdNode *node);
void Forward(DdNode *node);
void Forward(DdNode *node, int nex);
void GetForward(DdNode *node, double ForwProbPath);
void UpdateForward(DdNode * node);
double GetOutsideExpe(DdNode *root,double ex_prob);
void UpdateForward(DdNode * node, int nex);
double GetOutsideExpe(DdNode *root,double ex_prob, int nex);
void Maximization(void);
static double Expectation(DdNode **nodes_ex, int lenNodes);
void init_my_predicates(void);
@ -133,33 +127,27 @@ static int init(void)
static int init_bdd(void)
{
mgr=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,5120);
Cudd_AutodynEnable(mgr, CUDD_REORDER_GROUP_SIFT);
Cudd_SetMaxCacheHard(mgr, 0);
Cudd_SetLooseUpTo(mgr, 0);
Cudd_SetMinHit(mgr, 15);
mgr_ex=(DdManager **) realloc(mgr_ex, (ex+1)* sizeof(DdManager *));
mgr_ex[ex]=mgr;
mgr_ex[ex]=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,5120);
Cudd_AutodynEnable(mgr_ex[ex], CUDD_REORDER_GROUP_SIFT);
Cudd_SetMaxCacheHard(mgr_ex[ex], 0);
Cudd_SetLooseUpTo(mgr_ex[ex], 0);
Cudd_SetMinHit(mgr_ex[ex], 15);
bVar2mVar_ex=(int **) realloc(bVar2mVar_ex, (ex+1)* sizeof(int *));
bVar2mVar_ex[ex]=NULL;
bVar2mVar=bVar2mVar_ex[ex];
vars_ex=(variable **) realloc(vars_ex, (ex+1)* sizeof(variable *));
vars_ex[ex]=NULL;
vars=vars_ex[ex];
nVars_ex=(int *) realloc(nVars_ex, (ex+1)* sizeof(int ));
nVars=nVars_ex+ex;
*nVars=0;
nVars_ex[ex]=0;
probs_ex=(double **) realloc(probs_ex, (ex+1)* sizeof(double *));
probs_ex[ex]=NULL;
probs=probs_ex[ex];
boolVars_ex=(int *) realloc(boolVars_ex, (ex+1)* sizeof(int ));
boolVars=boolVars_ex+ex;
*boolVars=0;
boolVars_ex[ex]=0;
return 1;
}
@ -167,9 +155,6 @@ static int init_bdd(void)
static int end_bdd(void)
{
bVar2mVar_ex[ex]=bVar2mVar;
probs_ex[ex]=probs;
vars_ex[ex]=vars;
ex=ex+1;
return 1;
}
@ -184,33 +169,31 @@ static int init_test(void)
nRules=YAP_IntOfTerm(arg1);
mgr=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,0);
Cudd_AutodynEnable(mgr, CUDD_REORDER_GROUP_SIFT);
Cudd_SetMaxCacheHard(mgr, 1024*1024*1024);
Cudd_SetLooseUpTo(mgr, 1024*1024*512);
rules= (int *) malloc(nRules * sizeof(int));
mgr_ex[ex]=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,0);
Cudd_AutodynEnable(mgr_ex[ex], CUDD_REORDER_GROUP_SIFT);
Cudd_SetMaxCacheHard(mgr_ex[ex], 1024*1024*1024);
Cudd_SetLooseUpTo(mgr_ex[ex], 1024*1024*512);
rules= (int *) malloc(nRules * sizeof(int));
bVar2mVar=NULL;
probs=NULL;
vars=NULL;
bVar2mVar_ex[ex]=NULL;
probs_ex[ex]=NULL;
vars_ex[ex]=NULL;
nVars=(int *) malloc(sizeof(int ));
*nVars=0;
nVars_ex[ex]=0;
boolVars=(int *) malloc(sizeof(int ));
*boolVars=0;
boolVars_ex[ex]=0;
return 1;
}
static int end_test(void)
{
free(bVar2mVar);
free(vars);
free(nVars);
free(boolVars);
Cudd_Quit(mgr);
free(probs);
free(bVar2mVar_ex[ex]);
free(vars_ex[ex]);
free(nVars_ex+ex);
free(boolVars_ex+ex);
Cudd_Quit(mgr_ex[ex]);
free(probs_ex[ex]);
free(rules);
return 1;
}
@ -221,21 +204,16 @@ static double Expectation(DdNode **nodes_ex,int lenNodes)
{
int i;
double rootProb,CLL=0;
for(i=0;i<lenNodes;i++)
{
if (!Cudd_IsConstant(nodes_ex[i]))
{
mgr=mgr_ex[i];
probs=probs_ex[i];
boolVars=boolVars_ex+i;
nodesB=init_table(*boolVars);
nodesF=init_table(*boolVars);
bVar2mVar=bVar2mVar_ex[i];
vars=vars_ex[i];
nodesB=init_table(boolVars_ex[i]);
nodesF=init_table(boolVars_ex[i]);
Forward(nodes_ex[i]);
rootProb=GetOutsideExpe(nodes_ex[i],example_prob[i]);
Forward(nodes_ex[i],i);
rootProb=GetOutsideExpe(nodes_ex[i],example_prob[i],i);
if (rootProb<=0.0)
CLL = CLL + LOGZERO*example_prob[i];
@ -243,8 +221,8 @@ static double Expectation(DdNode **nodes_ex,int lenNodes)
CLL = CLL + log(rootProb)*example_prob[i];
nodes_probs_ex[i]=rootProb;
destroy_table(nodesB,*boolVars);
destroy_table(nodesF,*boolVars);
destroy_table(nodesB,boolVars_ex[i]);
destroy_table(nodesF,boolVars_ex[i]);
}
else
if (nodes_ex[i]==Cudd_ReadLogicZero(mgr_ex[i]))
@ -307,13 +285,13 @@ static int ret_prob(void)
if (!Cudd_IsConstant(node))
{
table=init_table(*boolVars);
table=init_table(boolVars_ex[ex]);
out=YAP_MkFloatTerm(Prob(node,0));
destroy_table(table,*boolVars);
destroy_table(table,boolVars_ex[ex]);
}
else
{
if (node==Cudd_ReadOne(mgr))
if (node==Cudd_ReadOne(mgr_ex[ex]))
out=YAP_MkFloatTerm(1.0);
else
out=YAP_MkFloatTerm(0.0);
@ -347,10 +325,6 @@ so that it is not recomputed
else
{
nodekey=Cudd_Regular(node);
/* if (comp)
nodekey=Cudd_Complement(nodefw);
else
nodekey=nodefw;*/
value_p=get_value(table,nodekey);
if (value_p!=NULL)
return *value_p;
@ -358,15 +332,15 @@ so that it is not recomputed
{
index=Cudd_NodeReadIndex(node); //Returns the index of the node. The node pointer can be either regular or complemented.
//The index field holds the name of the variable that labels the node. The index of a variable is a permanent attribute that reflects the order of creation.
p=probs[index];
p=probs_ex[ex][index];
T = Cudd_T(node);
F = Cudd_E(node);
pf=Prob(F,comp);
pt=Prob(T,comp);
BChild0=pf*(1-p);
BChild1=pt*p;
mVarIndex=bVar2mVar[index];
v=vars[mVarIndex];
mVarIndex=bVar2mVar_ex[ex][index];
v=vars_ex[ex][mVarIndex];
pos=index-v.firstBoolVar;
res=BChild0+BChild1;
add_node(table,nodekey,res);
@ -390,29 +364,30 @@ static int add_var(void)
arg2=YAP_ARG2;
arg3=YAP_ARG3;
arg4=YAP_ARG4;
*nVars=*nVars+1;
vars=(variable *) realloc(vars,*nVars * sizeof(variable));
v=&vars[*nVars-1];
nVars_ex[ex]=nVars_ex[ex]+1;
vars_ex[ex]=(variable *) realloc(vars_ex[ex],nVars_ex[ex] * sizeof(variable));
v=&vars_ex[ex][nVars_ex[ex]-1];
v->nVal=YAP_IntOfTerm(arg1);
v->nRule=YAP_IntOfTerm(arg3);
v->firstBoolVar=*boolVars;
probs=(double *) realloc(probs,(((*boolVars+v->nVal-1)* sizeof(double))));
bVar2mVar=(int *) realloc(bVar2mVar,((*boolVars+v->nVal-1)* sizeof(int)));
v->firstBoolVar=boolVars_ex[ex];
probs_ex[ex]=(double *) realloc(probs_ex[ex],(((boolVars_ex[ex]+v->nVal-1)* sizeof(double))));
bVar2mVar_ex[ex]=(int *) realloc(bVar2mVar_ex[ex],((boolVars_ex[ex]+v->nVal-1)* sizeof(int)));
probTerm=arg2;
p0=1;
for (i=0;i<v->nVal-1;i++)
{
node=Cudd_bddIthVar(mgr,*boolVars+i);
node=Cudd_bddIthVar(mgr_ex[ex],boolVars_ex[ex]+i);
p=YAP_FloatOfTerm(YAP_HeadOfTerm(probTerm));
bVar2mVar[*boolVars+i]=*nVars-1;
probs[*boolVars+i]=p/p0;
bVar2mVar_ex[ex][boolVars_ex[ex]+i]=nVars_ex[ex]-1;
probs_ex[ex][boolVars_ex[ex]+i]=p/p0;
probTerm_temp=YAP_TailOfTerm(probTerm);
probTerm=probTerm_temp;
p0=p0*(1-p/p0);
}
*boolVars=*boolVars+v->nVal-1;
boolVars_ex[ex]=boolVars_ex[ex]+v->nVal-1;
rules[v->nRule]= v->nVal;
out=YAP_MkIntTerm((YAP_Int)* nVars-1);
out=YAP_MkIntTerm((YAP_Int) nVars_ex[ex]-1);
return YAP_Unify(out,arg4);
}
@ -425,30 +400,30 @@ static int equality(void)
variable v;
DdNode * node, * tmp,*var;
arg1=YAP_ARG1; //var
arg2=YAP_ARG2; //value
arg3=YAP_ARG3; //node
arg1=YAP_ARG1;
arg2=YAP_ARG2;
arg3=YAP_ARG3;
varIndex=YAP_IntOfTerm(arg1);
value=YAP_IntOfTerm(arg2);
v=vars[varIndex];
v=vars_ex[ex][varIndex];
i=v.firstBoolVar;
tmp=Cudd_ReadOne(mgr);
tmp=Cudd_ReadOne(mgr_ex[ex]);
Cudd_Ref(tmp);
node=NULL;
for (i=v.firstBoolVar;i<v.firstBoolVar+value;i++)
{
var=Cudd_bddIthVar(mgr,i);
node=Cudd_bddAnd(mgr,tmp,Cudd_Not(var));
var=Cudd_bddIthVar(mgr_ex[ex],i);
node=Cudd_bddAnd(mgr_ex[ex],tmp,Cudd_Not(var));
Cudd_Ref(node);
Cudd_RecursiveDeref(mgr,tmp);
Cudd_RecursiveDeref(mgr_ex[ex],tmp);
tmp=node;
}
if (!(value==v.nVal-1))
{
var=Cudd_bddIthVar(mgr,v.firstBoolVar+value);
node=Cudd_bddAnd(mgr,tmp,var);
var=Cudd_bddIthVar(mgr_ex[ex],v.firstBoolVar+value);
node=Cudd_bddAnd(mgr_ex[ex],tmp,var);
Cudd_Ref(node);
Cudd_RecursiveDeref(mgr,tmp);
Cudd_RecursiveDeref(mgr_ex[ex],tmp);
}
out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg3));
@ -460,7 +435,7 @@ static int one(void)
DdNode * node;
arg=YAP_ARG1;
node = Cudd_ReadOne(mgr);
node = Cudd_ReadOne(mgr_ex[ex]);
Cudd_Ref(node);
out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg));
@ -472,7 +447,7 @@ static int zero(void)
DdNode * node;
arg=YAP_ARG1;
node = Cudd_ReadLogicZero(mgr);
node = Cudd_ReadLogicZero(mgr_ex[ex]);
Cudd_Ref(node);
out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg));
@ -501,7 +476,7 @@ static int and(void)
arg3=YAP_ARG3;
node1=(DdNode *)YAP_IntOfTerm(arg1);
node2=(DdNode *)YAP_IntOfTerm(arg2);
nodeout=Cudd_bddAnd(mgr,node1,node2);
nodeout=Cudd_bddAnd(mgr_ex[ex],node1,node2);
Cudd_Ref(nodeout);
out=YAP_MkIntTerm((YAP_Int) nodeout);
return(YAP_Unify(out,arg3));
@ -517,7 +492,7 @@ static int or(void)
arg3=YAP_ARG3;
node1=(DdNode *)YAP_IntOfTerm(arg1);
node2=(DdNode *)YAP_IntOfTerm(arg2);
nodeout=Cudd_bddOr(mgr,node1,node2);
nodeout=Cudd_bddOr(mgr_ex[ex],node1,node2);
Cudd_Ref(nodeout);
out=YAP_MkIntTerm((YAP_Int) nodeout);
return(YAP_Unify(out,arg3));
@ -531,7 +506,7 @@ static int garbage_collect(void)
arg1=YAP_ARG1;
arg2=YAP_ARG2;
clearCache=YAP_IntOfTerm(arg1);
nodes=(YAP_Int)cuddGarbageCollect(mgr,clearCache);
nodes=(YAP_Int)cuddGarbageCollect(mgr_ex[ex],clearCache);
out=YAP_MkIntTerm(nodes);
return(YAP_Unify(out,arg2));
}
@ -544,7 +519,7 @@ static int bdd_to_add(void)
arg1=YAP_ARG1;
arg2=YAP_ARG2;
node1=(DdNode *)YAP_IntOfTerm(arg1);
node2= Cudd_BddToAdd(mgr,node1);
node2= Cudd_BddToAdd(mgr_ex[ex],node1);
out=YAP_MkIntTerm((YAP_Int) node2);
return(YAP_Unify(out,arg2));
}
@ -564,11 +539,11 @@ static int create_dot(void)
arg2=YAP_ARG2;
YAP_StringToBuffer(arg2,filename,1000);
inames= (char **) malloc(sizeof(char *)*(*boolVars));
inames= (char **) malloc(sizeof(char *)*(boolVars_ex[ex]));
index=0;
for (i=0;i<*nVars;i++)
for (i=0;i<nVars_ex[ex];i++)
{
v=vars[i];
v=vars_ex[ex][i];
for (b=0;b<v.nVal-1;b++)
{
inames[b+index]=(char *) malloc(sizeof(char)*20);
@ -583,12 +558,12 @@ static int create_dot(void)
}
array[0]=(DdNode *)YAP_IntOfTerm(arg1);
file = open_file(filename, "w");
Cudd_DumpDot(mgr,1,array,inames,onames,file);
Cudd_DumpDot(mgr_ex[ex],1,array,inames,onames,file);
fclose(file);
index=0;
for (i=0;i<*nVars;i++)
for (i=0;i<nVars_ex[ex];i++)
{
v=vars[i];
v=vars_ex[ex][i];
for (b=0;b<v.nVal-1;b++)
{
free(inames[b+index]);
@ -607,13 +582,13 @@ static int rec_deref(void)
arg1=YAP_ARG1;
node=(DdNode *) YAP_IntOfTerm(arg1);
Cudd_RecursiveDeref(mgr, node);
Cudd_RecursiveDeref(mgr_ex[ex], node);
return 1;
}
double ProbPath(DdNode *node,int comp_par)
double ProbPath(DdNode *node,int comp_par, int nex)
{
int index,mVarIndex,comp,pos,position,boolVarIndex;
variable v;
@ -622,7 +597,7 @@ double ProbPath(DdNode *node,int comp_par)
double * value_p,** eta_rule;
DdNode *nodekey,*T,*F;
comp=Cudd_IsComplement(node);
comp=Cudd_IsComplement(node);
comp=(comp && !comp_par) ||(!comp && comp_par);
if (Cudd_IsConstant(node))
{
@ -647,42 +622,42 @@ double ProbPath(DdNode *node,int comp_par)
else
{
index=Cudd_NodeReadIndex(node);
p=probs[index];
p=probs_ex[nex][index];
T = Cudd_T(node);
F = Cudd_E(node);
pf=ProbPath(F,comp);
pt=ProbPath(T,comp);
pf=ProbPath(F,comp,nex);
pt=ProbPath(T,comp,nex);
BChild0=pf*(1-p);
BChild1=pt*p;
value_p=get_value(nodesF,nodekey);
e0 = (*value_p)*BChild0;
e1 = (*value_p)*BChild1;
mVarIndex=bVar2mVar[index];
v=vars[mVarIndex];
mVarIndex=bVar2mVar_ex[nex][index];
v=vars_ex[nex][mVarIndex];
pos=index-v.firstBoolVar;
eta_rule=eta_temp[v.nRule];
eta_rule[pos][0]=eta_rule[pos][0]+e0;
eta_rule[pos][1]=eta_rule[pos][1]+e1;
res=BChild0+BChild1;
add_node(nodesB,nodekey,res);
position=Cudd_ReadPerm(mgr,index);
position=Cudd_ReadPerm(mgr_ex[nex],index);
position=position+1;
boolVarIndex=Cudd_ReadInvPerm(mgr,position); //Returns the index of the variable currently in the i-th position of the order.
if (position<*boolVars)
boolVarIndex=Cudd_ReadInvPerm(mgr_ex[nex],position);//Returns the index of the variable currently in the i-th position of the order.
if (position<boolVars_ex[nex])
{
sigma[position]=sigma[position]+e0+e1;
}
if(!Cudd_IsConstant(T))
{
index=Cudd_NodeReadIndex(T);
position=Cudd_ReadPerm(mgr,index);
position=Cudd_ReadPerm(mgr_ex[nex],index);
sigma[position]=sigma[position]-e1;
}
if(!Cudd_IsConstant(F))
{
index=Cudd_NodeReadIndex(F);
position=Cudd_ReadPerm(mgr,index);
position=Cudd_ReadPerm(mgr_ex[nex],index);
sigma[position]=sigma[position]-e0;
}
@ -694,29 +669,29 @@ double ProbPath(DdNode *node,int comp_par)
void Forward(DdNode *root)
void Forward(DdNode *root, int nex)
{
int i,j;
if (*boolVars)
if (boolVars_ex[nex])
{
nodesToVisit= (DdNode ***)malloc(sizeof(DdNode **)* *boolVars);
NnodesToVisit= (int *)malloc(sizeof(int)* *boolVars);
nodesToVisit[0]=(DdNode **)malloc(sizeof(DdNode *));
nodesToVisit= (DdNode ***)malloc(sizeof(DdNode **)* boolVars_ex[nex]);
NnodesToVisit= (int *)malloc(sizeof(int)* boolVars_ex[nex]);
nodesToVisit[0]=(DdNode **)malloc(sizeof(DdNode *));
nodesToVisit[0][0]=root;
NnodesToVisit[0]=1;
for(i=1;i<*boolVars;i++)
for(i=1;i<boolVars_ex[nex];i++)
{
nodesToVisit[i]=NULL;
NnodesToVisit[i]=0;
}
add_node(nodesF,Cudd_Regular(root),1);
for(i=0;i<*boolVars;i++)
for(i=0;i<boolVars_ex[nex];i++)
{
for(j=0;j<NnodesToVisit[i];j++)
UpdateForward(nodesToVisit[i][j]);
UpdateForward(nodesToVisit[i][j],nex);
}
for(i=0;i<*boolVars;i++)
for(i=0;i<boolVars_ex[nex];i++)
{
free(nodesToVisit[i]);
}
@ -729,7 +704,7 @@ void Forward(DdNode *root)
}
}
void UpdateForward(DdNode *node)
void UpdateForward(DdNode *node, int nex)
{
int index,position,mVarIndex;
DdNode *T,*E,*nodereg;
@ -743,9 +718,9 @@ void UpdateForward(DdNode *node)
else
{
index=Cudd_NodeReadIndex(node);
mVarIndex=bVar2mVar[index];
v=vars[mVarIndex];
p=probs[index];
mVarIndex=bVar2mVar_ex[nex][index];
v=vars_ex[nex][mVarIndex];
p=probs_ex[nex][index];
nodereg=Cudd_Regular(node);
value_p=get_value(nodesF,nodereg);
if (value_p== NULL)
@ -768,7 +743,7 @@ void UpdateForward(DdNode *node)
{
add_or_replace_node(nodesF,Cudd_Regular(T),*value_p*p);
index=Cudd_NodeReadIndex(T);
position=Cudd_ReadPerm(mgr,index);
position=Cudd_ReadPerm(mgr_ex[nex],index);
nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position],
(NnodesToVisit[position]+1)* sizeof(DdNode *));
nodesToVisit[position][NnodesToVisit[position]]=T;
@ -787,7 +762,7 @@ void UpdateForward(DdNode *node)
{
add_or_replace_node(nodesF,Cudd_Regular(E),*value_p*(1-p));
index=Cudd_NodeReadIndex(E);
position=Cudd_ReadPerm(mgr,index);
position=Cudd_ReadPerm(mgr_ex[nex],index);
nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position],
(NnodesToVisit[position]+1)* sizeof(DdNode *));
nodesToVisit[position][NnodesToVisit[position]]=E;
@ -805,22 +780,22 @@ int indexMvar(DdNode * node)
int index,mVarIndex;
index=Cudd_NodeReadIndex(node);
mVarIndex=bVar2mVar[index];
mVarIndex=bVar2mVar_ex[ex][index];
return mVarIndex;
}
double GetOutsideExpe(DdNode *root,double ex_prob)
double GetOutsideExpe(DdNode *root,double ex_prob, int nex)
{
int i,j,mVarIndex,bVarIndex;
double **eta_rule;
double theta,rootProb, T=0;
sigma=(double *)malloc(*boolVars * sizeof(double));
sigma=(double *)malloc(boolVars_ex[nex] * sizeof(double));
for (j=0; j<*boolVars; j++)
for (j=0; j<boolVars_ex[nex]; j++)
{
sigma[j]=0;
}
@ -832,23 +807,23 @@ double GetOutsideExpe(DdNode *root,double ex_prob)
eta_temp[j][i][1]=0;
}
}
rootProb=ProbPath(root,0);
rootProb=ProbPath(root,0,nex);
if (rootProb>0.0)
{
for (j=0; j<*boolVars; j++)
for (j=0; j<boolVars_ex[nex]; j++)
{
T += sigma[j];
bVarIndex=Cudd_ReadInvPerm(mgr,j);
bVarIndex=Cudd_ReadInvPerm(mgr_ex[nex],j);
if (bVarIndex==-1)
{
bVarIndex=j;
}
mVarIndex=bVar2mVar[bVarIndex];
eta_rule=eta_temp[vars[mVarIndex].nRule];
for (i=0; i<vars[mVarIndex].nVal-1;i++)
mVarIndex=bVar2mVar_ex[nex][bVarIndex];
eta_rule=eta_temp[vars_ex[nex][mVarIndex].nRule];
for (i=0; i<vars_ex[nex][mVarIndex].nVal-1;i++)
{
theta=probs[bVarIndex];
theta=probs_ex[nex][bVarIndex];
eta_rule[i][0]=eta_rule[i][0]+T*(1-theta);
eta_rule[i][1]=eta_rule[i][1]+T*theta;
}
@ -872,7 +847,7 @@ void Maximization(void)
{
int r,i,j,e;
double sum=0;
double *probs_rule,**eta_rule;
double *probs_rule,**eta_rule;
for (r=0;r<nRules;r++)
{
@ -885,23 +860,19 @@ void Maximization(void)
arrayprob[r][i]=0;
}
else
arrayprob[r][i]=eta_rule[i][1]/sum;
arrayprob[r][i]=eta_rule[i][1]/sum;
}
}
for(e=0;e<ex;e++)
{
nVars=nVars_ex+e;
probs=probs_ex[e];
vars=vars_ex[e];
for (j=0;j<*nVars;j++)
for (j=0;j<nVars_ex[e];j++)
{
r=vars[j].nRule;
r=vars_ex[e][j].nRule;
probs_rule=arrayprob[r];
for(i=0;i<rules[r]-1;i++)
{
probs[vars[j].firstBoolVar+i]=probs_rule[i];
probs_ex[e][vars_ex[e][j].firstBoolVar+i]=probs_rule[i];
}
}
}
@ -935,17 +906,14 @@ static int randomize(void)
}
for(e=0;e<ex;e++)
{
nVars=nVars_ex+e;
probs=probs_ex[e];
vars=vars_ex[e];
for (j=0; j<*nVars; j++)
for (j=0; j<nVars_ex[e]; j++)
{
rule=vars[j].nRule;
rule=vars_ex[e][j].nRule;
theta=Theta_rules[rule];
p0=1;
for (i=0; i<vars[j].nVal-1;i++)
for (i=0; i<vars_ex[e][j].nVal-1;i++)
{
probs[vars[j].firstBoolVar+i]=theta[i]/p0;
probs_ex[e][vars_ex[e][j].firstBoolVar+i]=theta[i]/p0;
p0=p0*(1-theta[i]/p0);
}
}
@ -1009,7 +977,7 @@ static int EM(void)
cycle++;
for (r=0;r<nRules;r++)
{
for (i=0;i<rules[r]-1;i++)
for (i=0;i<rules[r]-1;i++)
{
eta_rule=eta[r];
eta_rule[i][0]=0;
@ -1027,13 +995,13 @@ static int EM(void)
{
tail=YAP_TermNil();
p0=1;
for (i=0;i<rules[r]-1;i++)
for (i=0;i<rules[r]-1;i++)
{
p=arrayprob[r][i]*p0;
tail=YAP_MkPairTerm(YAP_MkFloatTerm(p),tail);
p0=p0*(1-arrayprob[r][i]);
p0=p0*(1-arrayprob[r][i]);
}
tail=YAP_MkPairTerm(YAP_MkFloatTerm(p0),tail);
tail=YAP_MkPairTerm(YAP_MkFloatTerm(p0),tail);
ruleTerm=YAP_MkIntTerm(r);
compoundTerm=YAP_MkPairTerm(ruleTerm,YAP_MkPairTerm(tail,YAP_TermNil()));
out2=YAP_MkPairTerm(compoundTerm,out2);
@ -1047,6 +1015,7 @@ static int EM(void)
return (YAP_Unify(out2,arg7));
}
static int Q(void)
{
YAP_Term arg1,arg2,arg3,arg4,out,out1,
@ -1091,14 +1060,14 @@ static int Q(void)
for (r=0; r<nRules; r++)
{
tail=YAP_TermNil();
eta_rule=eta[r];
for (i=0;i<rules[r]-1;i++)
eta_rule=eta[r];
for (i=0;i<rules[r]-1;i++)
{
p0=eta_rule[i][0];
p1=eta_rule[i][1];
term=YAP_MkPairTerm(YAP_MkFloatTerm(p0),
YAP_MkPairTerm(YAP_MkFloatTerm(p1),YAP_TermNil()));
tail=YAP_MkPairTerm(term,tail);
tail=YAP_MkPairTerm(term,tail);
}
ruleTerm=YAP_MkIntTerm(r);

View File

@ -0,0 +1,4 @@
type(_A,type_b):0.5.
type(_A,type_c):0.5.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,151 @@
output(type/2).
input(fibros/2).
input(activity/2).
input(sex/2).
input(action/2).
input(age/2).
input(type/2).
input(got/2).
input(gpt/2).
input(tbil/2).
input(dbil/2).
input(che/2).
input(ttt/2).
input(ztt/2).
input(tcho/2).
input(tp/2).
input(dur/2).
input(b_rel11/2).
input(b_rel12/2).
input(b_rel13/2).
modeh(*,type(+m,type_b)).
modeh(*,type(+m,type_c)).
determination(type/2,sex/2).
determination(type/2,age/2).
determination(type/2,b_rel11/2).
determination(type/2,b_rel12/2).
determination(type/2,b_rel13/2).
determination(type/2,fibros/2).
determination(type/2,activity/2).
determination(type/2,got/2).
determination(type/2,gpt/2).
determination(type/2,tbil/2).
determination(type/2,dbil/2).
determination(type/2,che/2).
determination(type/2,ttt/2).
determination(type/2,ztt/2).
determination(type/2,tcho/2).
determination(type/2,tp/2).
determination(type/2,dur/2).
modeb(*,b_rel11(-b,+m)).
modeb(*,b_rel12(-i,+m)).
modeb(*,b_rel13(-a,+m)).
modeb(*,b_rel11(+b,-m)).
modeb(*,b_rel12(+i,-m)).
modeb(*,b_rel13(+a,-m)).
modeb(*,fibros(+b,fibros_0)).
modeb(*,fibros(+b,fibros_1)).
modeb(*,fibros(+b,fibros_2)).
modeb(*,fibros(+b,fibros_3)).
modeb(*,fibros(+b,fibros_4)).
modeb(*,activity(+b,activity_0)).
modeb(*,activity(+b,activity_1)).
modeb(*,activity(+b,activity_2)).
modeb(*,activity(+b,activity_3)).
modeb(*,activity(+b,activity_false)).
modeb(*,sex(+m,sex_f)).
modeb(*,sex(+m,sex_m)).
modeb(*,age(+m,age_0)).
modeb(*,age(+m,age_1)).
modeb(*,age(+m,age_2)).
modeb(*,age(+m,age_3)).
modeb(*,age(+m,age_4)).
modeb(*,age(+m,age_5)).
modeb(*,age(+m,age_6)).
modeb(*,got(+i,got_1)).
modeb(*,got(+i,got_2)).
modeb(*,got(+i,got_3)).
modeb(*,got(+i,got_4)).
modeb(*,got(+i,got_5)).
modeb(*,gpt(+i,gpt_1)).
modeb(*,gpt(+i,gpt_2)).
modeb(*,gpt(+i,gpt_3)).
modeb(*,gpt(+i,gpt_4)).
modeb(*,tbil(+i,tbil_1)).
modeb(*,tbil(+i,tbil_2)).
modeb(*,dbil(+i,dbil_1)).
modeb(*,dbil(+i,dbil_2)).
modeb(*,che(+i,che_1)).
modeb(*,che(+i,che_2)).
modeb(*,che(+i,che_3)).
modeb(*,che(+i,che_4)).
modeb(*,che(+i,che_5)).
modeb(*,che(+i,che_6)).
modeb(*,che(+i,che_7)).
modeb(*,che(+i,che_8)).
modeb(*,che(+i,che_9)).
modeb(*,che(+i,che_10)).
modeb(*,ttt(+i,ttt_1)).
modeb(*,ttt(+i,ttt_2)).
modeb(*,ttt(+i,ttt_3)).
modeb(*,ttt(+i,ttt_4)).
modeb(*,ttt(+i,ttt_5)).
modeb(*,ttt(+i,ttt_6)).
modeb(*,ztt(+i,ztt_1)).
modeb(*,ztt(+i,ztt_2)).
modeb(*,ztt(+i,ztt_3)).
modeb(*,ztt(+i,ztt_4)).
modeb(*,ztt(+i,ztt_5)).
modeb(*,ztt(+i,ztt_6)).
modeb(*,tcho(+i,tcho_1)).
modeb(*,tcho(+i,tcho_2)).
modeb(*,tcho(+i,tcho_3)).
modeb(*,tcho(+i,tcho_4)).
modeb(*,tp(+i,tp_1)).
modeb(*,tp(+i,tp_2)).
modeb(*,tp(+i,tp_3)).
modeb(*,tp(+i,tp_4)).
modeb(*,dur(+a,dur_0)).
modeb(*,dur(+a,dur_1)).
modeb(*,dur(+a,dur_2)).
modeb(*,dur(+a,dur_3)).
modeb(*,dur(+a,dur_4)).
modeb(*,fibros(+b,-f)).
modeb(*,activity(+b,-a)).
modeb(*,sex(+m,-sex)).
modeb(*,age(+m,-age)).
modeb(*,got(+i,-got)).
modeb(*,gpt(+i,-gpt)).
modeb(*,tbil(+i,-tbil)).
modeb(*,dbil(+i,-dbil)).
modeb(*,che(+i,-che)).
modeb(*,ttt(+i,-ttt)).
modeb(*,ztt(+i,-ztt)).
modeb(*,tcho(+i,-tcho)).
modeb(*,tp(+i,-tp)).
modeb(*,dur(+a,dur)).
lookahead(b_rel11(A,_),[fibros(A,_)]).
lookahead(b_rel11(A,_),[activity(A,_)]).
lookahead(b_rel12(A,_),[got(A,_)]).
lookahead(b_rel11(A,_B),[gpt(A,_)]).
lookahead(b_rel11(A,_B),[tbil(A,_)]).
lookahead(b_rel11(A,_B),[dbil(A,_)]).
lookahead(b_rel11(A,_B),[che(A,_)]).
lookahead(b_rel11(A,_B),[ttt(A,_)]).
lookahead(b_rel11(A,_B),[ztt(A,_)]).
lookahead(b_rel11(A,_B),[tcho(A,_)]).
lookahead(b_rel11(A,_B),[tp(A,_)]).
lookahead(b_rel13(A,_B),[dur(A,_)]).

View File

@ -0,0 +1,40 @@
/* SLIPCASE Final CLL -2.525186
Execution time 45.693000
setting(epsilon_em,0.0001).
setting(epsilon_em_fraction,1.0e-5).
setting(eps,0.0001).
setting(eps_f,1.0e-5).
setting(epsilon_sem,2).
setting(random_restarts_REFnumber,1).
setting(random_restarts_number,1).
setting(iterREF,-1).
setting(iter,-1).
setting(examples,atoms).
setting(group,1).
setting(d,1).
setting(verbosity,1).
setting(logzero,log(1.0e-6)).
setting(initial_clauses_modeh,1).
setting(max_iter,10).
setting(max_var,5).
setting(max_rules,10).
setting(beamsize,20).
setting(epsilon_parsing,1.0e-10).
setting(tabling,off).
setting(bagof,false).
setting(depth_bound,false).
setting(depth,2).
setting(single_var,false).
setting(compiling,off).
*/
type(A,type_b):0.215232.
type(A,type_c):0.513334 :-
b_rel11(B,A),
fibros(B,C),
b_rel11(D,A),
fibros(B,E).
type(A,type_b):0.257763.