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 */ #endif /* TABLING */
op = rtp->opc; op = rtp->opc;
opnum = Yap_op_from_opcode(op); opnum = Yap_op_from_opcode(op);
// fprintf(stderr, "%s\n", Yap_op_names[opnum]);
#ifdef TABLING #ifdef TABLING
} }
if (aux_sg_fr && gc_B == SgFr_gen_cp(aux_sg_fr)) { 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: case _table_answer_resolution:
{ {
CELL *vars_ptr, vars; CELL *vars_ptr, vars;
init_substitution_pointer(gc_B, vars_ptr, CONS_CP(gc_B)->cp_dep_fr); dep_fr_ptr dep_fr = CONS_CP(gc_B)->cp_dep_fr;
vars = *vars_ptr++; ans_node_ptr ans_node = DepFr_last_answer(dep_fr);
while (vars--) { if (TrNode_child(ans_node)) {
mark_external_reference(vars_ptr PASS_REGS); /* unconsumed answers */
vars_ptr++; #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; nargs = 0;
@ -3113,18 +3140,43 @@ sweep_choicepoints(choiceptr gc_B USES_REGS)
case _table_answer_resolution: case _table_answer_resolution:
{ {
CELL *vars_ptr, vars; CELL *vars_ptr, vars;
sweep_environments(gc_B->cp_env, EnvSize(gc_B->cp_cp), EnvBMap(gc_B->cp_cp) PASS_REGS); dep_fr_ptr dep_fr = CONS_CP(gc_B)->cp_dep_fr;
init_substitution_pointer(gc_B, vars_ptr, CONS_CP(gc_B)->cp_dep_fr); ans_node_ptr ans_node = DepFr_last_answer(dep_fr);
vars = *vars_ptr++; if (TrNode_child(ans_node)) {
while (vars--) { /* unconsumed answers */
CELL cp_cell = *vars_ptr; #ifdef MODE_DIRECTED_TABLING
if (MARKED_PTR(vars_ptr)) { if (IS_ANSWER_INVALID_NODE(TrNode_child(ans_node))) {
UNMARK(vars_ptr); ans_node_ptr old_ans_node;
if (HEAP_PTR(cp_cell)) { old_ans_node = ans_node;
into_relocation_chain(vars_ptr, GET_NEXT(cp_cell) PASS_REGS); 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; break;

View File

@ -1,123 +1,123 @@
/* start css.sty */ /* start css.sty */
.cmr-7{font-size:70%;} .cmr-7{font-size:70%;}
.cmmi-7{font-size:70%;font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;}
.cmmi-10{font-style: italic;} .cmmi-10{font-style: italic;}
.cmr-17{font-size:170%;} .cmr-17{font-size:170%;}
.cmtt-12x-x-144{font-size:172%;font-family: monospace;} .cmtt-12x-x-144{font-size:172%;font-family: monospace;}
.cmtt-12x-x-144{font-family: monospace;} .cmtt-12x-x-144{font-family: monospace;}
.cmr-12{font-size:120%;} .cmr-12{font-size:120%;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace;}
.cmbx-10{ font-weight: bold;} .cmbx-10{ font-weight: bold;}
.cmti-10{ font-style: italic;} .cmti-10{ font-style: italic;}
p.noindent { text-indent: 0em } p.noindent { text-indent: 0em }
td p.noindent { text-indent: 0em; margin-top:0em; } td p.noindent { text-indent: 0em; margin-top:0em; }
p.nopar { text-indent: 0em; } p.nopar { text-indent: 0em; }
p.indent{ text-indent: 1.5em } p.indent{ text-indent: 1.5em }
@media print {div.crosslinks {visibility:hidden;}} @media print {div.crosslinks {visibility:hidden;}}
a img { border-top: 0; border-left: 0; border-right: 0; } a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; } center { margin-top:1em; margin-bottom:1em; }
td center { margin-top:0em; margin-bottom:0em; } td center { margin-top:0em; margin-bottom:0em; }
.Canvas { position:relative; } .Canvas { position:relative; }
img.math{vertical-align:middle;} img.math{vertical-align:middle;}
li p.indent { text-indent: 0em } li p.indent { text-indent: 0em }
li p:first-child{ margin-top:0em; } li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; } 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; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
.enumerate1 {list-style-type:decimal;} .enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;} .enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;} .enumerate3 {list-style-type:lower-roman;}
.enumerate4 {list-style-type:upper-alpha;} .enumerate4 {list-style-type:upper-alpha;}
div.newtheorem { margin-bottom: 2em; margin-top: 2em;} div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
.obeylines-h,.obeylines-v {white-space: nowrap; } .obeylines-h,.obeylines-v {white-space: nowrap; }
div.obeylines-v p { margin-top:0; margin-bottom:0; } div.obeylines-v p { margin-top:0; margin-bottom:0; }
.overline{ text-decoration:overline; } .overline{ text-decoration:overline; }
.overline img{ border-top: 1px solid black; } .overline img{ border-top: 1px solid black; }
td.displaylines {text-align:center; white-space:nowrap;} td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;} .centerline {text-align:center;}
.rightline {text-align:right;} .rightline {text-align:right;}
div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } 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; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table} 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.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.minipage{width:100%;}
div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
div.center div {text-align: left;} div.center div {text-align: left;}
div.flushright, div.flushright div.flushright {text-align: right;} div.flushright, div.flushright div.flushright {text-align: right;}
div.flushright div {text-align: left;} div.flushright div {text-align: left;}
div.flushleft {text-align: left;} div.flushleft {text-align: left;}
.underline{ text-decoration:underline; } .underline{ text-decoration:underline; }
.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } .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, .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-c {text-align:center;}
.framebox-l {text-align:left;} .framebox-l {text-align:left;}
.framebox-r {text-align:right;} .framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super } span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } 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; } 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 td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;} table.tabular {margin-left: auto; margin-right: auto;}
td p:first-child{ margin-top:0em; } td p:first-child{ margin-top:0em; }
td p:last-child{ margin-bottom:0em; } td p:last-child{ margin-bottom:0em; }
div.td00{ margin-left:0pt; margin-right:0pt; } div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; } div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; } div.td10{ margin-left:5pt; margin-right:0pt; }
div.td11{ margin-left:5pt; margin-right:5pt; } div.td11{ margin-left:5pt; margin-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
td.td00{ padding-left:0pt; padding-right:0pt; } td.td00{ padding-left:0pt; padding-right:0pt; }
td.td01{ padding-left:0pt; padding-right:5pt; } td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; } td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; } td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 1px; margin:0px; } .hline hr, .cline hr{ height : 1px; margin:0px; }
.tabbing-right {text-align:right;} .tabbing-right {text-align:right;}
span.TEX {letter-spacing: -0.125em; } span.TEX {letter-spacing: -0.125em; }
span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
a span.TEX span.E {text-decoration: none; } 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.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; } span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;} div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;} div.float img {text-align:center;}
div.figure 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 {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;} .marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
table.equation {width:100%;} table.equation {width:100%;}
.equation td{text-align:center; } .equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; } td.equation { margin-top:1em; margin-bottom:1em; }
td.equation-label { width:5%; text-align:center; } td.equation-label { width:5%; text-align:center; }
td.eqnarray4 { width:5%; white-space: normal; } td.eqnarray4 { width:5%; white-space: normal; }
td.eqnarray2 { width:5%; } td.eqnarray2 { width:5%; }
table.eqnarray-star, table.eqnarray {width:100%;} table.eqnarray-star, table.eqnarray {width:100%;}
div.eqnarray{text-align:center;} div.eqnarray{text-align:center;}
div.array {text-align:center;} div.array {text-align:center;}
div.pmatrix {text-align:center;} div.pmatrix {text-align:center;}
table.pmatrix {width:100%;} table.pmatrix {width:100%;}
span.pmatrix img{vertical-align:middle;} span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;} div.pmatrix {text-align:center;}
table.pmatrix {width:100%;} table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;} span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;} img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.index-item, .index-subitem, .index-subsubitem {display:block} .index-item, .index-subitem, .index-subsubitem {display:block}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
div.caption span.id{font-weight: bold; white-space: nowrap; } div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center} h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } 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; } 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;} .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
.subparagraphHead, .likesubparagraphHead { 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;} .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} .verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;} div.maketitle {text-align:center;}
h2.titleHead{text-align:center;} h2.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; } div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;} div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
div.author{white-space: nowrap;} div.author{white-space: nowrap;}
.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } .quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
.abstract p {margin-left:5%; margin-right:5%;} .abstract p {margin-left:5%; margin-right:5%;}
div.abstract {width:100%;} div.abstract {width:100%;}
.figure img.graphics {margin-left:10%;} .figure img.graphics {margin-left:10%;}
/* end css.sty */ /* 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. \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} \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}. \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.4.2.tar.gz}. You can download CUDD from \url{ftp://vlsi.colorado.edu/pub/cudd-2.5.0.tar.gz}.
Compile CUDD: Compile CUDD:
\begin{enumerate} \begin{enumerate}
@ -48,7 +48,7 @@ when compiling Yap following the instruction of the \texttt{INSTALL} file in the
\begin{verbatim} \begin{verbatim}
configure --enable-cplint=DIR configure --enable-cplint=DIR
\end{verbatim} \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\\ Under Windows, you have to use Cygwin (CUDD does not compile under MinGW), so\\
\begin{verbatim} \begin{verbatim}
configure --enable-cplint=DIR --enable-cygwin configure --enable-cplint=DIR --enable-cygwin
@ -114,7 +114,7 @@ average/2
\end{verbatim} \end{verbatim}
that, given a list of numbers, computes its arithmetic mean. 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} \section{Inference}
\texttt{cplint} contains various modules for answering queries. \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{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} \item \texttt{mcintyre.pl}: implements the algorithm MCINTYRE (Monte Carlo INference wiTh Yap REcord) \cite{Rig11-CILC11-NC}
\end{itemize} \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} \end{itemize}
These modules answer queries using the definition of the semantics of LPADs and CP-logic: 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}, 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{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. 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 command
\begin{verbatim} \begin{verbatim}
dotty cpl.dot & dotty cpl.dot &
@ -504,7 +504,7 @@ unseen(<predicate>/<arity>).
\end{verbatim} \end{verbatim}
For SLIPCASE, you have to specify the language bias by means of mode declarations in the style of 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} \begin{verbatim}
modeh(<recall>,<predicate>(<arg1>,...). modeh(<recall>,<predicate>(<arg1>,...).
\end{verbatim} \end{verbatim}
@ -529,6 +529,25 @@ for specifying an output variable of type \texttt{<type>}. or
\end{verbatim} \end{verbatim}
for specifying a constant. 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} \subsection{Parameters}
In order to set the algorithms' parameters, you have to insert in \texttt{<stem>.l} commands of the form In order to set the algorithms' parameters, you have to insert in \texttt{<stem>.l} commands of the form
\begin{verbatim} \begin{verbatim}
@ -601,6 +620,9 @@ and call
\begin{verbatim} \begin{verbatim}
?:- sl(stem). ?:- sl(stem).
\end{verbatim} \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} \section{License}
\label{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. \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} \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} \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: For the use of CUDD, the following license must be accepted:
\vspace{3mm} \vspace{3mm}
@ -654,7 +676,7 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
\texttt{lpad.pl}, \texttt{semlpad.pl} and \texttt{cpl.pl} are based on the SLG system \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. Copyright (C) 1993 Southern Methodist University, 1993 SUNY at Stony Brook, see the file COYPRIGHT\_SLG for detailed information on this copyright.
\bibliographystyle{plain} \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 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/ This package uses the library cudd, see http://vlsi.colorado.edu/~fabio/CUDD/
for the relative license. for the relative license.
@ -41,24 +41,18 @@ typedef struct
tablerow * table; tablerow * table;
static variable * vars;
static variable ** vars_ex; static variable ** vars_ex;
static int * bVar2mVar;
static int ** bVar2mVar_ex; static int ** bVar2mVar_ex;
static double * sigma; static double * sigma;
static double ***eta; static double ***eta;
static double ***eta_temp; static double ***eta_temp;
static double **arrayprob; static double **arrayprob;
static int *rules; static int *rules;
static DdManager *mgr;
static DdManager **mgr_ex; static DdManager **mgr_ex;
static int *nVars;
static int *nVars_ex; static int *nVars_ex;
static int nRules; static int nRules;
double * probs;
double * nodes_probs_ex; double * nodes_probs_ex;
double ** probs_ex; double ** probs_ex;
static int * boolVars;
static int * boolVars_ex; static int * boolVars_ex;
tablerow * nodesB; tablerow * nodesB;
tablerow * nodesF; tablerow * nodesF;
@ -75,13 +69,13 @@ static int init(void);
static int end(void); static int end(void);
static int EM(void); static int EM(void);
static int Q(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); static int rec_deref(void);
int indexMvar(DdNode *node); int indexMvar(DdNode *node);
void Forward(DdNode *node); void Forward(DdNode *node, int nex);
void GetForward(DdNode *node, double ForwProbPath); void GetForward(DdNode *node, double ForwProbPath);
void UpdateForward(DdNode * node); void UpdateForward(DdNode * node, int nex);
double GetOutsideExpe(DdNode *root,double ex_prob); double GetOutsideExpe(DdNode *root,double ex_prob, int nex);
void Maximization(void); void Maximization(void);
static double Expectation(DdNode **nodes_ex, int lenNodes); static double Expectation(DdNode **nodes_ex, int lenNodes);
void init_my_predicates(void); void init_my_predicates(void);
@ -133,33 +127,27 @@ static int init(void)
static int init_bdd(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=(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=(int **) realloc(bVar2mVar_ex, (ex+1)* sizeof(int *));
bVar2mVar_ex[ex]=NULL; bVar2mVar_ex[ex]=NULL;
bVar2mVar=bVar2mVar_ex[ex];
vars_ex=(variable **) realloc(vars_ex, (ex+1)* sizeof(variable *)); vars_ex=(variable **) realloc(vars_ex, (ex+1)* sizeof(variable *));
vars_ex[ex]=NULL; vars_ex[ex]=NULL;
vars=vars_ex[ex];
nVars_ex=(int *) realloc(nVars_ex, (ex+1)* sizeof(int )); nVars_ex=(int *) realloc(nVars_ex, (ex+1)* sizeof(int ));
nVars=nVars_ex+ex; nVars_ex[ex]=0;
*nVars=0;
probs_ex=(double **) realloc(probs_ex, (ex+1)* sizeof(double *)); probs_ex=(double **) realloc(probs_ex, (ex+1)* sizeof(double *));
probs_ex[ex]=NULL; probs_ex[ex]=NULL;
probs=probs_ex[ex];
boolVars_ex=(int *) realloc(boolVars_ex, (ex+1)* sizeof(int )); boolVars_ex=(int *) realloc(boolVars_ex, (ex+1)* sizeof(int ));
boolVars=boolVars_ex+ex; boolVars_ex[ex]=0;
*boolVars=0;
return 1; return 1;
} }
@ -167,9 +155,6 @@ static int init_bdd(void)
static int end_bdd(void) static int end_bdd(void)
{ {
bVar2mVar_ex[ex]=bVar2mVar;
probs_ex[ex]=probs;
vars_ex[ex]=vars;
ex=ex+1; ex=ex+1;
return 1; return 1;
} }
@ -184,33 +169,31 @@ static int init_test(void)
nRules=YAP_IntOfTerm(arg1); nRules=YAP_IntOfTerm(arg1);
mgr=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,0); mgr_ex[ex]=Cudd_Init(0,0,UNIQUE_SLOTS,CACHE_SLOTS,0);
Cudd_AutodynEnable(mgr, CUDD_REORDER_GROUP_SIFT); Cudd_AutodynEnable(mgr_ex[ex], CUDD_REORDER_GROUP_SIFT);
Cudd_SetMaxCacheHard(mgr, 1024*1024*1024); Cudd_SetMaxCacheHard(mgr_ex[ex], 1024*1024*1024);
Cudd_SetLooseUpTo(mgr, 1024*1024*512); Cudd_SetLooseUpTo(mgr_ex[ex], 1024*1024*512);
rules= (int *) malloc(nRules * sizeof(int)); rules= (int *) malloc(nRules * sizeof(int));
bVar2mVar=NULL; bVar2mVar_ex[ex]=NULL;
probs=NULL; probs_ex[ex]=NULL;
vars=NULL; vars_ex[ex]=NULL;
nVars=(int *) malloc(sizeof(int )); nVars_ex[ex]=0;
*nVars=0;
boolVars=(int *) malloc(sizeof(int )); boolVars_ex[ex]=0;
*boolVars=0;
return 1; return 1;
} }
static int end_test(void) static int end_test(void)
{ {
free(bVar2mVar); free(bVar2mVar_ex[ex]);
free(vars); free(vars_ex[ex]);
free(nVars); free(nVars_ex+ex);
free(boolVars); free(boolVars_ex+ex);
Cudd_Quit(mgr); Cudd_Quit(mgr_ex[ex]);
free(probs); free(probs_ex[ex]);
free(rules); free(rules);
return 1; return 1;
} }
@ -221,21 +204,16 @@ static double Expectation(DdNode **nodes_ex,int lenNodes)
{ {
int i; int i;
double rootProb,CLL=0; double rootProb,CLL=0;
for(i=0;i<lenNodes;i++) for(i=0;i<lenNodes;i++)
{ {
if (!Cudd_IsConstant(nodes_ex[i])) if (!Cudd_IsConstant(nodes_ex[i]))
{ {
mgr=mgr_ex[i]; nodesB=init_table(boolVars_ex[i]);
probs=probs_ex[i]; nodesF=init_table(boolVars_ex[i]);
boolVars=boolVars_ex+i;
nodesB=init_table(*boolVars);
nodesF=init_table(*boolVars);
bVar2mVar=bVar2mVar_ex[i];
vars=vars_ex[i];
Forward(nodes_ex[i]); Forward(nodes_ex[i],i);
rootProb=GetOutsideExpe(nodes_ex[i],example_prob[i]); rootProb=GetOutsideExpe(nodes_ex[i],example_prob[i],i);
if (rootProb<=0.0) if (rootProb<=0.0)
CLL = CLL + LOGZERO*example_prob[i]; 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]; CLL = CLL + log(rootProb)*example_prob[i];
nodes_probs_ex[i]=rootProb; nodes_probs_ex[i]=rootProb;
destroy_table(nodesB,*boolVars); destroy_table(nodesB,boolVars_ex[i]);
destroy_table(nodesF,*boolVars); destroy_table(nodesF,boolVars_ex[i]);
} }
else else
if (nodes_ex[i]==Cudd_ReadLogicZero(mgr_ex[i])) if (nodes_ex[i]==Cudd_ReadLogicZero(mgr_ex[i]))
@ -307,13 +285,13 @@ static int ret_prob(void)
if (!Cudd_IsConstant(node)) if (!Cudd_IsConstant(node))
{ {
table=init_table(*boolVars); table=init_table(boolVars_ex[ex]);
out=YAP_MkFloatTerm(Prob(node,0)); out=YAP_MkFloatTerm(Prob(node,0));
destroy_table(table,*boolVars); destroy_table(table,boolVars_ex[ex]);
} }
else else
{ {
if (node==Cudd_ReadOne(mgr)) if (node==Cudd_ReadOne(mgr_ex[ex]))
out=YAP_MkFloatTerm(1.0); out=YAP_MkFloatTerm(1.0);
else else
out=YAP_MkFloatTerm(0.0); out=YAP_MkFloatTerm(0.0);
@ -347,10 +325,6 @@ so that it is not recomputed
else else
{ {
nodekey=Cudd_Regular(node); nodekey=Cudd_Regular(node);
/* if (comp)
nodekey=Cudd_Complement(nodefw);
else
nodekey=nodefw;*/
value_p=get_value(table,nodekey); value_p=get_value(table,nodekey);
if (value_p!=NULL) if (value_p!=NULL)
return *value_p; 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. 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. //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); T = Cudd_T(node);
F = Cudd_E(node); F = Cudd_E(node);
pf=Prob(F,comp); pf=Prob(F,comp);
pt=Prob(T,comp); pt=Prob(T,comp);
BChild0=pf*(1-p); BChild0=pf*(1-p);
BChild1=pt*p; BChild1=pt*p;
mVarIndex=bVar2mVar[index]; mVarIndex=bVar2mVar_ex[ex][index];
v=vars[mVarIndex]; v=vars_ex[ex][mVarIndex];
pos=index-v.firstBoolVar; pos=index-v.firstBoolVar;
res=BChild0+BChild1; res=BChild0+BChild1;
add_node(table,nodekey,res); add_node(table,nodekey,res);
@ -390,29 +364,30 @@ static int add_var(void)
arg2=YAP_ARG2; arg2=YAP_ARG2;
arg3=YAP_ARG3; arg3=YAP_ARG3;
arg4=YAP_ARG4; arg4=YAP_ARG4;
*nVars=*nVars+1; nVars_ex[ex]=nVars_ex[ex]+1;
vars=(variable *) realloc(vars,*nVars * sizeof(variable)); vars_ex[ex]=(variable *) realloc(vars_ex[ex],nVars_ex[ex] * sizeof(variable));
v=&vars[*nVars-1];
v=&vars_ex[ex][nVars_ex[ex]-1];
v->nVal=YAP_IntOfTerm(arg1); v->nVal=YAP_IntOfTerm(arg1);
v->nRule=YAP_IntOfTerm(arg3); v->nRule=YAP_IntOfTerm(arg3);
v->firstBoolVar=*boolVars; v->firstBoolVar=boolVars_ex[ex];
probs=(double *) realloc(probs,(((*boolVars+v->nVal-1)* sizeof(double)))); probs_ex[ex]=(double *) realloc(probs_ex[ex],(((boolVars_ex[ex]+v->nVal-1)* sizeof(double))));
bVar2mVar=(int *) realloc(bVar2mVar,((*boolVars+v->nVal-1)* sizeof(int))); bVar2mVar_ex[ex]=(int *) realloc(bVar2mVar_ex[ex],((boolVars_ex[ex]+v->nVal-1)* sizeof(int)));
probTerm=arg2; probTerm=arg2;
p0=1; p0=1;
for (i=0;i<v->nVal-1;i++) 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)); p=YAP_FloatOfTerm(YAP_HeadOfTerm(probTerm));
bVar2mVar[*boolVars+i]=*nVars-1; bVar2mVar_ex[ex][boolVars_ex[ex]+i]=nVars_ex[ex]-1;
probs[*boolVars+i]=p/p0; probs_ex[ex][boolVars_ex[ex]+i]=p/p0;
probTerm_temp=YAP_TailOfTerm(probTerm); probTerm_temp=YAP_TailOfTerm(probTerm);
probTerm=probTerm_temp; probTerm=probTerm_temp;
p0=p0*(1-p/p0); p0=p0*(1-p/p0);
} }
*boolVars=*boolVars+v->nVal-1; boolVars_ex[ex]=boolVars_ex[ex]+v->nVal-1;
rules[v->nRule]= v->nVal; 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); return YAP_Unify(out,arg4);
} }
@ -425,30 +400,30 @@ static int equality(void)
variable v; variable v;
DdNode * node, * tmp,*var; DdNode * node, * tmp,*var;
arg1=YAP_ARG1; //var arg1=YAP_ARG1;
arg2=YAP_ARG2; //value arg2=YAP_ARG2;
arg3=YAP_ARG3; //node arg3=YAP_ARG3;
varIndex=YAP_IntOfTerm(arg1); varIndex=YAP_IntOfTerm(arg1);
value=YAP_IntOfTerm(arg2); value=YAP_IntOfTerm(arg2);
v=vars[varIndex]; v=vars_ex[ex][varIndex];
i=v.firstBoolVar; i=v.firstBoolVar;
tmp=Cudd_ReadOne(mgr); tmp=Cudd_ReadOne(mgr_ex[ex]);
Cudd_Ref(tmp); Cudd_Ref(tmp);
node=NULL; node=NULL;
for (i=v.firstBoolVar;i<v.firstBoolVar+value;i++) for (i=v.firstBoolVar;i<v.firstBoolVar+value;i++)
{ {
var=Cudd_bddIthVar(mgr,i); var=Cudd_bddIthVar(mgr_ex[ex],i);
node=Cudd_bddAnd(mgr,tmp,Cudd_Not(var)); node=Cudd_bddAnd(mgr_ex[ex],tmp,Cudd_Not(var));
Cudd_Ref(node); Cudd_Ref(node);
Cudd_RecursiveDeref(mgr,tmp); Cudd_RecursiveDeref(mgr_ex[ex],tmp);
tmp=node; tmp=node;
} }
if (!(value==v.nVal-1)) if (!(value==v.nVal-1))
{ {
var=Cudd_bddIthVar(mgr,v.firstBoolVar+value); var=Cudd_bddIthVar(mgr_ex[ex],v.firstBoolVar+value);
node=Cudd_bddAnd(mgr,tmp,var); node=Cudd_bddAnd(mgr_ex[ex],tmp,var);
Cudd_Ref(node); Cudd_Ref(node);
Cudd_RecursiveDeref(mgr,tmp); Cudd_RecursiveDeref(mgr_ex[ex],tmp);
} }
out=YAP_MkIntTerm((YAP_Int) node); out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg3)); return(YAP_Unify(out,arg3));
@ -460,7 +435,7 @@ static int one(void)
DdNode * node; DdNode * node;
arg=YAP_ARG1; arg=YAP_ARG1;
node = Cudd_ReadOne(mgr); node = Cudd_ReadOne(mgr_ex[ex]);
Cudd_Ref(node); Cudd_Ref(node);
out=YAP_MkIntTerm((YAP_Int) node); out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg)); return(YAP_Unify(out,arg));
@ -472,7 +447,7 @@ static int zero(void)
DdNode * node; DdNode * node;
arg=YAP_ARG1; arg=YAP_ARG1;
node = Cudd_ReadLogicZero(mgr); node = Cudd_ReadLogicZero(mgr_ex[ex]);
Cudd_Ref(node); Cudd_Ref(node);
out=YAP_MkIntTerm((YAP_Int) node); out=YAP_MkIntTerm((YAP_Int) node);
return(YAP_Unify(out,arg)); return(YAP_Unify(out,arg));
@ -501,7 +476,7 @@ static int and(void)
arg3=YAP_ARG3; arg3=YAP_ARG3;
node1=(DdNode *)YAP_IntOfTerm(arg1); node1=(DdNode *)YAP_IntOfTerm(arg1);
node2=(DdNode *)YAP_IntOfTerm(arg2); node2=(DdNode *)YAP_IntOfTerm(arg2);
nodeout=Cudd_bddAnd(mgr,node1,node2); nodeout=Cudd_bddAnd(mgr_ex[ex],node1,node2);
Cudd_Ref(nodeout); Cudd_Ref(nodeout);
out=YAP_MkIntTerm((YAP_Int) nodeout); out=YAP_MkIntTerm((YAP_Int) nodeout);
return(YAP_Unify(out,arg3)); return(YAP_Unify(out,arg3));
@ -517,7 +492,7 @@ static int or(void)
arg3=YAP_ARG3; arg3=YAP_ARG3;
node1=(DdNode *)YAP_IntOfTerm(arg1); node1=(DdNode *)YAP_IntOfTerm(arg1);
node2=(DdNode *)YAP_IntOfTerm(arg2); node2=(DdNode *)YAP_IntOfTerm(arg2);
nodeout=Cudd_bddOr(mgr,node1,node2); nodeout=Cudd_bddOr(mgr_ex[ex],node1,node2);
Cudd_Ref(nodeout); Cudd_Ref(nodeout);
out=YAP_MkIntTerm((YAP_Int) nodeout); out=YAP_MkIntTerm((YAP_Int) nodeout);
return(YAP_Unify(out,arg3)); return(YAP_Unify(out,arg3));
@ -531,7 +506,7 @@ static int garbage_collect(void)
arg1=YAP_ARG1; arg1=YAP_ARG1;
arg2=YAP_ARG2; arg2=YAP_ARG2;
clearCache=YAP_IntOfTerm(arg1); clearCache=YAP_IntOfTerm(arg1);
nodes=(YAP_Int)cuddGarbageCollect(mgr,clearCache); nodes=(YAP_Int)cuddGarbageCollect(mgr_ex[ex],clearCache);
out=YAP_MkIntTerm(nodes); out=YAP_MkIntTerm(nodes);
return(YAP_Unify(out,arg2)); return(YAP_Unify(out,arg2));
} }
@ -544,7 +519,7 @@ static int bdd_to_add(void)
arg1=YAP_ARG1; arg1=YAP_ARG1;
arg2=YAP_ARG2; arg2=YAP_ARG2;
node1=(DdNode *)YAP_IntOfTerm(arg1); node1=(DdNode *)YAP_IntOfTerm(arg1);
node2= Cudd_BddToAdd(mgr,node1); node2= Cudd_BddToAdd(mgr_ex[ex],node1);
out=YAP_MkIntTerm((YAP_Int) node2); out=YAP_MkIntTerm((YAP_Int) node2);
return(YAP_Unify(out,arg2)); return(YAP_Unify(out,arg2));
} }
@ -564,11 +539,11 @@ static int create_dot(void)
arg2=YAP_ARG2; arg2=YAP_ARG2;
YAP_StringToBuffer(arg2,filename,1000); YAP_StringToBuffer(arg2,filename,1000);
inames= (char **) malloc(sizeof(char *)*(*boolVars)); inames= (char **) malloc(sizeof(char *)*(boolVars_ex[ex]));
index=0; 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++) for (b=0;b<v.nVal-1;b++)
{ {
inames[b+index]=(char *) malloc(sizeof(char)*20); inames[b+index]=(char *) malloc(sizeof(char)*20);
@ -583,12 +558,12 @@ static int create_dot(void)
} }
array[0]=(DdNode *)YAP_IntOfTerm(arg1); array[0]=(DdNode *)YAP_IntOfTerm(arg1);
file = open_file(filename, "w"); 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); fclose(file);
index=0; 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++) for (b=0;b<v.nVal-1;b++)
{ {
free(inames[b+index]); free(inames[b+index]);
@ -607,13 +582,13 @@ static int rec_deref(void)
arg1=YAP_ARG1; arg1=YAP_ARG1;
node=(DdNode *) YAP_IntOfTerm(arg1); node=(DdNode *) YAP_IntOfTerm(arg1);
Cudd_RecursiveDeref(mgr, node); Cudd_RecursiveDeref(mgr_ex[ex], node);
return 1; 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; int index,mVarIndex,comp,pos,position,boolVarIndex;
variable v; variable v;
@ -622,7 +597,7 @@ double ProbPath(DdNode *node,int comp_par)
double * value_p,** eta_rule; double * value_p,** eta_rule;
DdNode *nodekey,*T,*F; DdNode *nodekey,*T,*F;
comp=Cudd_IsComplement(node); comp=Cudd_IsComplement(node);
comp=(comp && !comp_par) ||(!comp && comp_par); comp=(comp && !comp_par) ||(!comp && comp_par);
if (Cudd_IsConstant(node)) if (Cudd_IsConstant(node))
{ {
@ -647,42 +622,42 @@ double ProbPath(DdNode *node,int comp_par)
else else
{ {
index=Cudd_NodeReadIndex(node); index=Cudd_NodeReadIndex(node);
p=probs[index]; p=probs_ex[nex][index];
T = Cudd_T(node); T = Cudd_T(node);
F = Cudd_E(node); F = Cudd_E(node);
pf=ProbPath(F,comp); pf=ProbPath(F,comp,nex);
pt=ProbPath(T,comp); pt=ProbPath(T,comp,nex);
BChild0=pf*(1-p); BChild0=pf*(1-p);
BChild1=pt*p; BChild1=pt*p;
value_p=get_value(nodesF,nodekey); value_p=get_value(nodesF,nodekey);
e0 = (*value_p)*BChild0; e0 = (*value_p)*BChild0;
e1 = (*value_p)*BChild1; e1 = (*value_p)*BChild1;
mVarIndex=bVar2mVar[index]; mVarIndex=bVar2mVar_ex[nex][index];
v=vars[mVarIndex]; v=vars_ex[nex][mVarIndex];
pos=index-v.firstBoolVar; pos=index-v.firstBoolVar;
eta_rule=eta_temp[v.nRule]; eta_rule=eta_temp[v.nRule];
eta_rule[pos][0]=eta_rule[pos][0]+e0; eta_rule[pos][0]=eta_rule[pos][0]+e0;
eta_rule[pos][1]=eta_rule[pos][1]+e1; eta_rule[pos][1]=eta_rule[pos][1]+e1;
res=BChild0+BChild1; res=BChild0+BChild1;
add_node(nodesB,nodekey,res); add_node(nodesB,nodekey,res);
position=Cudd_ReadPerm(mgr,index); position=Cudd_ReadPerm(mgr_ex[nex],index);
position=position+1; position=position+1;
boolVarIndex=Cudd_ReadInvPerm(mgr,position); //Returns the index of the variable currently in the i-th position of the order. 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) if (position<boolVars_ex[nex])
{ {
sigma[position]=sigma[position]+e0+e1; sigma[position]=sigma[position]+e0+e1;
} }
if(!Cudd_IsConstant(T)) if(!Cudd_IsConstant(T))
{ {
index=Cudd_NodeReadIndex(T); index=Cudd_NodeReadIndex(T);
position=Cudd_ReadPerm(mgr,index); position=Cudd_ReadPerm(mgr_ex[nex],index);
sigma[position]=sigma[position]-e1; sigma[position]=sigma[position]-e1;
} }
if(!Cudd_IsConstant(F)) if(!Cudd_IsConstant(F))
{ {
index=Cudd_NodeReadIndex(F); index=Cudd_NodeReadIndex(F);
position=Cudd_ReadPerm(mgr,index); position=Cudd_ReadPerm(mgr_ex[nex],index);
sigma[position]=sigma[position]-e0; 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; int i,j;
if (*boolVars) if (boolVars_ex[nex])
{ {
nodesToVisit= (DdNode ***)malloc(sizeof(DdNode **)* *boolVars); nodesToVisit= (DdNode ***)malloc(sizeof(DdNode **)* boolVars_ex[nex]);
NnodesToVisit= (int *)malloc(sizeof(int)* *boolVars); NnodesToVisit= (int *)malloc(sizeof(int)* boolVars_ex[nex]);
nodesToVisit[0]=(DdNode **)malloc(sizeof(DdNode *)); nodesToVisit[0]=(DdNode **)malloc(sizeof(DdNode *));
nodesToVisit[0][0]=root; nodesToVisit[0][0]=root;
NnodesToVisit[0]=1; NnodesToVisit[0]=1;
for(i=1;i<*boolVars;i++) for(i=1;i<boolVars_ex[nex];i++)
{ {
nodesToVisit[i]=NULL; nodesToVisit[i]=NULL;
NnodesToVisit[i]=0; NnodesToVisit[i]=0;
} }
add_node(nodesF,Cudd_Regular(root),1); 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++) 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]); 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; int index,position,mVarIndex;
DdNode *T,*E,*nodereg; DdNode *T,*E,*nodereg;
@ -743,9 +718,9 @@ void UpdateForward(DdNode *node)
else else
{ {
index=Cudd_NodeReadIndex(node); index=Cudd_NodeReadIndex(node);
mVarIndex=bVar2mVar[index]; mVarIndex=bVar2mVar_ex[nex][index];
v=vars[mVarIndex]; v=vars_ex[nex][mVarIndex];
p=probs[index]; p=probs_ex[nex][index];
nodereg=Cudd_Regular(node); nodereg=Cudd_Regular(node);
value_p=get_value(nodesF,nodereg); value_p=get_value(nodesF,nodereg);
if (value_p== NULL) if (value_p== NULL)
@ -768,7 +743,7 @@ void UpdateForward(DdNode *node)
{ {
add_or_replace_node(nodesF,Cudd_Regular(T),*value_p*p); add_or_replace_node(nodesF,Cudd_Regular(T),*value_p*p);
index=Cudd_NodeReadIndex(T); index=Cudd_NodeReadIndex(T);
position=Cudd_ReadPerm(mgr,index); position=Cudd_ReadPerm(mgr_ex[nex],index);
nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position], nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position],
(NnodesToVisit[position]+1)* sizeof(DdNode *)); (NnodesToVisit[position]+1)* sizeof(DdNode *));
nodesToVisit[position][NnodesToVisit[position]]=T; 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)); add_or_replace_node(nodesF,Cudd_Regular(E),*value_p*(1-p));
index=Cudd_NodeReadIndex(E); index=Cudd_NodeReadIndex(E);
position=Cudd_ReadPerm(mgr,index); position=Cudd_ReadPerm(mgr_ex[nex],index);
nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position], nodesToVisit[position]=(DdNode **)realloc(nodesToVisit[position],
(NnodesToVisit[position]+1)* sizeof(DdNode *)); (NnodesToVisit[position]+1)* sizeof(DdNode *));
nodesToVisit[position][NnodesToVisit[position]]=E; nodesToVisit[position][NnodesToVisit[position]]=E;
@ -805,22 +780,22 @@ int indexMvar(DdNode * node)
int index,mVarIndex; int index,mVarIndex;
index=Cudd_NodeReadIndex(node); index=Cudd_NodeReadIndex(node);
mVarIndex=bVar2mVar[index]; mVarIndex=bVar2mVar_ex[ex][index];
return mVarIndex; return mVarIndex;
} }
double GetOutsideExpe(DdNode *root,double ex_prob) double GetOutsideExpe(DdNode *root,double ex_prob, int nex)
{ {
int i,j,mVarIndex,bVarIndex; int i,j,mVarIndex,bVarIndex;
double **eta_rule; double **eta_rule;
double theta,rootProb, T=0; 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; sigma[j]=0;
} }
@ -832,23 +807,23 @@ double GetOutsideExpe(DdNode *root,double ex_prob)
eta_temp[j][i][1]=0; eta_temp[j][i][1]=0;
} }
} }
rootProb=ProbPath(root,0); rootProb=ProbPath(root,0,nex);
if (rootProb>0.0) if (rootProb>0.0)
{ {
for (j=0; j<*boolVars; j++) for (j=0; j<boolVars_ex[nex]; j++)
{ {
T += sigma[j]; T += sigma[j];
bVarIndex=Cudd_ReadInvPerm(mgr,j); bVarIndex=Cudd_ReadInvPerm(mgr_ex[nex],j);
if (bVarIndex==-1) if (bVarIndex==-1)
{ {
bVarIndex=j; bVarIndex=j;
} }
mVarIndex=bVar2mVar[bVarIndex]; mVarIndex=bVar2mVar_ex[nex][bVarIndex];
eta_rule=eta_temp[vars[mVarIndex].nRule]; eta_rule=eta_temp[vars_ex[nex][mVarIndex].nRule];
for (i=0; i<vars[mVarIndex].nVal-1;i++) 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][0]=eta_rule[i][0]+T*(1-theta);
eta_rule[i][1]=eta_rule[i][1]+T*theta; eta_rule[i][1]=eta_rule[i][1]+T*theta;
} }
@ -872,7 +847,7 @@ void Maximization(void)
{ {
int r,i,j,e; int r,i,j,e;
double sum=0; double sum=0;
double *probs_rule,**eta_rule; double *probs_rule,**eta_rule;
for (r=0;r<nRules;r++) for (r=0;r<nRules;r++)
{ {
@ -885,23 +860,19 @@ void Maximization(void)
arrayprob[r][i]=0; arrayprob[r][i]=0;
} }
else else
arrayprob[r][i]=eta_rule[i][1]/sum; arrayprob[r][i]=eta_rule[i][1]/sum;
} }
} }
for(e=0;e<ex;e++) for(e=0;e<ex;e++)
{ {
nVars=nVars_ex+e; for (j=0;j<nVars_ex[e];j++)
probs=probs_ex[e];
vars=vars_ex[e];
for (j=0;j<*nVars;j++)
{ {
r=vars[j].nRule; r=vars_ex[e][j].nRule;
probs_rule=arrayprob[r]; probs_rule=arrayprob[r];
for(i=0;i<rules[r]-1;i++) 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++) for(e=0;e<ex;e++)
{ {
nVars=nVars_ex+e; for (j=0; j<nVars_ex[e]; j++)
probs=probs_ex[e];
vars=vars_ex[e];
for (j=0; j<*nVars; j++)
{ {
rule=vars[j].nRule; rule=vars_ex[e][j].nRule;
theta=Theta_rules[rule]; theta=Theta_rules[rule];
p0=1; 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); p0=p0*(1-theta[i]/p0);
} }
} }
@ -1009,7 +977,7 @@ static int EM(void)
cycle++; cycle++;
for (r=0;r<nRules;r++) 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=eta[r];
eta_rule[i][0]=0; eta_rule[i][0]=0;
@ -1027,13 +995,13 @@ static int EM(void)
{ {
tail=YAP_TermNil(); tail=YAP_TermNil();
p0=1; p0=1;
for (i=0;i<rules[r]-1;i++) for (i=0;i<rules[r]-1;i++)
{ {
p=arrayprob[r][i]*p0; p=arrayprob[r][i]*p0;
tail=YAP_MkPairTerm(YAP_MkFloatTerm(p),tail); 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); ruleTerm=YAP_MkIntTerm(r);
compoundTerm=YAP_MkPairTerm(ruleTerm,YAP_MkPairTerm(tail,YAP_TermNil())); compoundTerm=YAP_MkPairTerm(ruleTerm,YAP_MkPairTerm(tail,YAP_TermNil()));
out2=YAP_MkPairTerm(compoundTerm,out2); out2=YAP_MkPairTerm(compoundTerm,out2);
@ -1047,6 +1015,7 @@ static int EM(void)
return (YAP_Unify(out2,arg7)); return (YAP_Unify(out2,arg7));
} }
static int Q(void) static int Q(void)
{ {
YAP_Term arg1,arg2,arg3,arg4,out,out1, YAP_Term arg1,arg2,arg3,arg4,out,out1,
@ -1091,14 +1060,14 @@ static int Q(void)
for (r=0; r<nRules; r++) for (r=0; r<nRules; r++)
{ {
tail=YAP_TermNil(); tail=YAP_TermNil();
eta_rule=eta[r]; eta_rule=eta[r];
for (i=0;i<rules[r]-1;i++) for (i=0;i<rules[r]-1;i++)
{ {
p0=eta_rule[i][0]; p0=eta_rule[i][0];
p1=eta_rule[i][1]; p1=eta_rule[i][1];
term=YAP_MkPairTerm(YAP_MkFloatTerm(p0), term=YAP_MkPairTerm(YAP_MkFloatTerm(p0),
YAP_MkPairTerm(YAP_MkFloatTerm(p1),YAP_TermNil())); YAP_MkPairTerm(YAP_MkFloatTerm(p1),YAP_TermNil()));
tail=YAP_MkPairTerm(term,tail); tail=YAP_MkPairTerm(term,tail);
} }
ruleTerm=YAP_MkIntTerm(r); 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.