Merged tests/*, matlab/*, utils/* from SVN head...
authorJoris Mooij <jorism@osun.tuebingen.mpg.de>
Fri, 26 Sep 2008 11:24:07 +0000 (13:24 +0200)
committerJoris Mooij <jorism@osun.tuebingen.mpg.de>
Fri, 26 Sep 2008 11:24:07 +0000 (13:24 +0200)
...and:
- removed LC::Properties::CavityType::PAIRINT and PAIRCUM
- added LDPC method to tests/test

19 files changed:
STATUS
include/dai/jtree.h
include/dai/lc.h
matlab/dai.cpp
matlab/dai_potstrength.cpp
matlab/dai_readfg.cpp
matlab/dai_writefg.cpp
matlab/matlab.cpp
matlab/matlab.h
src/jtree.cpp
src/lc.cpp
tests/alarm.fg
tests/aliases.conf
tests/test.cpp
tests/testall
tests/testall.bat
tests/testfast.out
utils/fg2dot.cpp
utils/fginfo.cpp

diff --git a/STATUS b/STATUS
index a532b03..a05c444 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -22,8 +22,10 @@ template arguments or something similar?
 - Can the FactorGraph constructors be optimized further?
 - Remove x2x?
 - Add iterations (like maxdiff, but counts iterations) to some algorithms
 - Can the FactorGraph constructors be optimized further?
 - Remove x2x?
 - Add iterations (like maxdiff, but counts iterations) to some algorithms
+  Idea: use a PropertySet as output of a DAIAlg
 - A DAIAlg<T> should not inherit from a FactorGraph/RegionGraph, but should store a
 reference to it
 - A DAIAlg<T> should not inherit from a FactorGraph/RegionGraph, but should store a
 reference to it
+- limit???
 
 TODO FOR RELEASE:
 - Test Visual C++ compatibility
 
 TODO FOR RELEASE:
 - Test Visual C++ compatibility
@@ -66,6 +68,34 @@ regiongraph.h
 regiongraph.cpp
 daialg.h
 daialg.cpp
 regiongraph.cpp
 daialg.h
 daialg.cpp
+matlab/
+       dai.cpp
+       dai.m
+       dai_potstrength.cpp
+       dai_potstrength.m
+       dai_readfg.cpp
+       dai_readfg.m
+       dai_writefg.cpp
+       dai_writefg.m
+       matlab.cpp
+       matlab.h
+
+utils/
+       fg2dot.cpp
+       fginfo.cpp
+       createfg.cpp
+       viewfg
+tests/
+       alarm.fg
+       hoi1.fg
+       hoi2.fg
+       hoi3.fg
+       hoi4.fg
+       testfast.fg
+       aliases.conf
+       testall
+       testregression
+       test.cpp
 
 FILES IN SVN HEAD THAT ARE STILL RELEVANT:
 ChangeLog
 
 FILES IN SVN HEAD THAT ARE STILL RELEVANT:
 ChangeLog
@@ -87,10 +117,14 @@ mr.cpp
 treeep.h
 treeep.cpp
 
 treeep.h
 treeep.cpp
 
-matlab/*
-tests/*
-utils/*
 
 
+FILES IN SVN HEAD RELEVANT FOR A LATER RELEASE:
+       matlab/dai_potstrength.*
+       matlab/dai_bpconvbound.*
+       utils/fg2dot.cpp
+       utils/viewfg
+       tests/aliases.conf
+       tests/testall
 
 DOCUMENTATION READY:
 - bipgraph.h, bipgraph.cpp
 
 DOCUMENTATION READY:
 - bipgraph.h, bipgraph.cpp
index 20c9dd5..4cfb7e0 100644 (file)
@@ -101,6 +101,9 @@ class JTree : public DAIAlgRG {
 };
 
 
 };
 
 
+std::pair<size_t,size_t> treewidth( const FactorGraph & fg );
+
+
 } // end of namespace dai
 
 
 } // end of namespace dai
 
 
index 86034f7..3ec9d30 100644 (file)
@@ -49,7 +49,7 @@ class LC : public DAIAlgFG {
             size_t verbose;
             size_t maxiter;
             double tol;
             size_t verbose;
             size_t maxiter;
             double tol;
-            DAI_ENUM(CavityType,FULL,PAIR,PAIR2,PAIRINT,PAIRCUM,UNIFORM)
+            DAI_ENUM(CavityType,FULL,PAIR,PAIR2,UNIFORM)
             CavityType cavity;
             DAI_ENUM(UpdateType,SEQFIX,SEQRND,NONE)
             UpdateType updates;
             CavityType cavity;
             DAI_ENUM(UpdateType,SEQFIX,SEQRND,NONE)
             UpdateType updates;
index 7ad11b8..70530d0 100644 (file)
 
 
 #include <iostream>
 
 
 #include <iostream>
-#include "matlab.h"
+#include <dai/matlab/matlab.h>
 #include "mex.h"
 #include "mex.h"
-#include "alldai.h"
+#include <dai/alldai.h>
 
 
 using namespace std;
 
 
 using namespace std;
+using namespace dai;
 
 
 /* Input Arguments */
 
 
 /* Input Arguments */
index 383c0f9..ab83201 100644 (file)
 
 #include <iostream>
 #include "mex.h"
 
 #include <iostream>
 #include "mex.h"
-#include "matlab.h"
-#include "../factor.h"
+#include <dai/matlab/matlab.h>
+#include <dai/factor.h>
 
 
 using namespace std;
 
 
 using namespace std;
+using namespace dai;
 
 
 /* Input Arguments */
 
 
 /* Input Arguments */
@@ -96,6 +97,5 @@ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] )
     N_OUT = mxCreateDoubleMatrix(1,1,mxREAL);
     *(mxGetPr(N_OUT)) = N;
     
     N_OUT = mxCreateDoubleMatrix(1,1,mxREAL);
     *(mxGetPr(N_OUT)) = N;
     
-    
     return;
 }
     return;
 }
index 8ae625f..d6c6adc 100644 (file)
 
 #include <iostream>
 #include "mex.h"
 
 #include <iostream>
 #include "mex.h"
-#include "matlab.h"
-#include "factorgraph.h"
+#include <dai/matlab/matlab.h>
+#include <dai/factorgraph.h>
 
 
 using namespace std;
 
 
 using namespace std;
+using namespace dai;
 
 
 /* Input Arguments */
 
 
 /* Input Arguments */
@@ -74,8 +75,10 @@ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] )
 
     // Read factorgraph
     FactorGraph fg;
 
     // Read factorgraph
     FactorGraph fg;
-    if( fg.ReadFromFile( filename ) ) {
-        mexErrMsgTxt("dai_readfg: error reading file\n");
+    try {
+        fg.ReadFromFile( filename );
+    } catch( std::exception &e ) {
+        mexErrMsgTxt( e.what() );
     }
 
 
     }
 
 
index 8bf5fe7..1a44577 100644 (file)
 
 #include <iostream>
 #include "mex.h"
 
 #include <iostream>
 #include "mex.h"
-#include "matlab.h"
-#include "factorgraph.h"
+#include <dai/matlab/matlab.h>
+#include <dai/factorgraph.h>
 
 
 using namespace std;
 
 
 using namespace std;
+using namespace dai;
 
 
 /* Input Arguments */
 
 
 /* Input Arguments */
@@ -77,8 +78,10 @@ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] )
     long nr_v = fg.nrVars();
     long nr_f = fg.nrFactors();
 
     long nr_v = fg.nrVars();
     long nr_f = fg.nrFactors();
 
-    if( fg.WriteToFile( filename ) ) {
-        mexErrMsgTxt("dai_writefg: error reading file\n");
+    try {
+        fg.WriteToFile( filename );
+    } catch( std::exception &e ) {
+        mexErrMsgTxt( e.what() );
     }
 
     return;
     }
 
     return;
index 30eac37..9e9bf25 100644 (file)
 
 
 #include <iostream>
 
 
 #include <iostream>
-#include "matlab.h"
+#include <dai/matlab/matlab.h>
+
+
+namespace dai {
 
 
 using namespace std;
 
 
 using namespace std;
@@ -44,12 +47,11 @@ mxArray *Factors2mx(const vector<Factor> &Ps) {
         double *BiMember_data = mxGetPr(BiMember);
         size_t i = 0;
         vector<mwSize> dims;
         double *BiMember_data = mxGetPr(BiMember);
         size_t i = 0;
         vector<mwSize> dims;
-        for( VarSet::iterator j = I->vars().begin(); j != I->vars().end(); j++,i++ ) {
+        for( VarSet::const_iterator j = I->vars().begin(); j != I->vars().end(); j++,i++ ) {
             BiMember_data[i] = j->label();
             dims.push_back( j->states() );
         }
 
             BiMember_data[i] = j->label();
             dims.push_back( j->states() );
         }
 
-        //      mxArray *BiP = mxCreateDoubleMatrix(I->states(),1,mxREAL);
         mxArray *BiP = mxCreateNumericArray(I->vars().size(), &(*(dims.begin())), mxDOUBLE_CLASS, mxREAL);
         double *BiP_data = mxGetPr(BiP);
         for( size_t j = 0; j < I->states(); j++ )
         mxArray *BiP = mxCreateNumericArray(I->vars().size(), &(*(dims.begin())), mxDOUBLE_CLASS, mxREAL);
         double *BiP_data = mxGetPr(BiP);
         for( size_t j = 0; j < I->states(); j++ )
@@ -98,7 +100,7 @@ vector<Factor> mx2Factors(const mxArray *psi, long verbose) {
             if( verbose >= 3 )
                 cout << labels[mi] << "(" << dims[mi] << ") ";
             vars.insert( Var(labels[mi], dims[mi]) );
             if( verbose >= 3 )
                 cout << labels[mi] << "(" << dims[mi] << ") ";
             vars.insert( Var(labels[mi], dims[mi]) );
-            factorvars.insert( Var(labels[mi], dims[mi]) );
+            factorvars |= Var(labels[mi], dims[mi]);
         }
         factors.push_back(Factor(factorvars));
 
         }
         factors.push_back(Factor(factorvars));
 
@@ -152,7 +154,7 @@ Factor mx2Factor(const mxArray *psi) {
     vector<long> labels(nr_mem,0);
     for( size_t mi = 0; mi < nr_mem; mi++ ) {
         labels[mi] = (long)members[mi];
     vector<long> labels(nr_mem,0);
     for( size_t mi = 0; mi < nr_mem; mi++ ) {
         labels[mi] = (long)members[mi];
-        vars.insert( Var(labels[mi], dims[mi]) );
+        vars |= Var(labels[mi], dims[mi]);
     }
     Factor factor(vars);
 
     }
     Factor factor(vars);
 
@@ -178,3 +180,6 @@ Factor mx2Factor(const mxArray *psi) {
 
     return( factor );
 }
 
     return( factor );
 }
+
+
+}
index 48a4b78..04abe8f 100644 (file)
 */
 
 
 */
 
 
+#ifndef __defined_libdai_matlab_h
+#define __defined_libdai_matlab_h
+
+
 #include "mex.h"
 #include "mex.h"
-#include "../factor.h"
+#include <dai/factor.h>
+
+
+namespace dai {
+
 
 
+#ifdef SMALLMEM
+    typedef int mwSize;
+    typedef int mwIndex;
+#endif
 
 
-/* Convert vector<Factor> structure to a cell vector of CPTAB-like structs */
+
+/// Convert vector<Factor> structure to a cell vector of CPTAB-like structs
 mxArray *Factors2mx(const std::vector<Factor> &Ps);
 
 mxArray *Factors2mx(const std::vector<Factor> &Ps);
 
-/* Convert cell vector of CPTAB-like structs to vector<Factor> */
+/// Convert cell vector of CPTAB-like structs to vector<Factor>
 std::vector<Factor> mx2Factors(const mxArray *psi, long verbose);
 
 std::vector<Factor> mx2Factors(const mxArray *psi, long verbose);
 
-/* Convert CPTAB-like struct to Factor */
+/// Convert CPTAB-like struct to Factor
 Factor mx2Factor(const mxArray *psi);
 Factor mx2Factor(const mxArray *psi);
+
+
+} // end of namespace dai
+
+
+#endif
index 7de6a36..147772e 100644 (file)
@@ -518,4 +518,33 @@ Factor JTree::calcMarginal( const VarSet& ns ) {
 }
 
 
 }
 
 
+// first return value is treewidth
+// second return value is number of states in largest clique
+pair<size_t,size_t> treewidth( const FactorGraph & fg ) {
+    ClusterGraph _cg;
+
+    // Copy factors
+    for( size_t I = 0; I < fg.nrFactors(); I++ )
+        _cg.insert( fg.factor(I).vars() );
+
+    // Retain only maximal clusters
+    _cg.eraseNonMaximal();
+
+    // Obtain elimination sequence
+    vector<VarSet> ElimVec = _cg.VarElim_MinFill().eraseNonMaximal().toVector();
+
+    // Calculate treewidth
+    size_t treewidth = 0;
+    size_t nrstates = 0;
+    for( size_t i = 0; i < ElimVec.size(); i++ ) {
+        if( ElimVec[i].size() > treewidth )
+            treewidth = ElimVec[i].size();
+        if( ElimVec[i].states() > nrstates )
+            nrstates = ElimVec[i].states();
+    }
+
+    return pair<size_t,size_t>(treewidth, nrstates);
+}
+
+
 } // end of namespace dai
 } // end of namespace dai
index 7e6996c..fc63e6b 100644 (file)
@@ -145,29 +145,6 @@ double LC::CalcCavityDist (size_t i, const std::string &name, const PropertySet
             vector<Factor> pairbeliefs = calcPairBeliefsNew( *cav, cav->fg().delta(i), props.reinit );
             for( size_t ij = 0; ij < pairbeliefs.size(); ij++ )
                 Bi *= pairbeliefs[ij];
             vector<Factor> pairbeliefs = calcPairBeliefsNew( *cav, cav->fg().delta(i), props.reinit );
             for( size_t ij = 0; ij < pairbeliefs.size(); ij++ )
                 Bi *= pairbeliefs[ij];
-        } else if( props.cavity == Properties::CavityType::PAIRINT ) {
-            Bi = calcMarginal( *cav, cav->fg().delta(i), props.reinit );
-            
-            // Set interactions of order > 2 to zero
-            size_t N = delta(i).size();
-            Real *p = &(*Bi.p().p().begin());
-            x2x::p2logp (N, p);
-            x2x::logp2w (N, p);
-            x2x::fill (N, p, 2, 0.0);
-            x2x::w2logp (N, p);
-//            x2x::logpnorm (N, p);
-            x2x::logp2p (N, p);
-        } else if( props.cavity == Properties::CavityType::PAIRCUM ) {
-            Bi = calcMarginal( *cav, cav->fg().delta(i), props.reinit );
-            
-            // Set cumulants of order > 2 to zero
-            size_t N = delta(i).size();
-            Real *p = &(*Bi.p().p().begin());
-            x2x::p2m (N, p);
-            x2x::m2c (N, p, N);
-            x2x::fill (N, p, 2, 0.0);
-            x2x::c2m (N, p, N);
-            x2x::m2p (N, p);
         }
         maxdiff = cav->maxDiff();
         delete cav;
         }
         maxdiff = cav->maxDiff();
         delete cav;
index 5f5f561..40fbb6f 100644 (file)
@@ -3,7 +3,7 @@
 37
 
 2
 37
 
 2
-1 6 
+0 5 
 2 2 
 4
 0                0.9
 2 2 
 4
 0                0.9
@@ -12,7 +12,7 @@
 3               0.99
 
 2
 3               0.99
 
 2
-2 5 
+1 4 
 3 3 
 9
 0               0.95
 3 3 
 9
 0               0.95
@@ -26,7 +26,7 @@
 8                0.7
 
 2
 8                0.7
 
 2
-3 5 
+2 4 
 3 3 
 9
 0               0.95
 3 3 
 9
 0               0.95
 8               0.95
 
 1
 8               0.95
 
 1
-4 
+3 
 2 
 2
 0                0.2
 1                0.8
 
 3
 2 
 2
 0                0.2
 1                0.8
 
 3
-4 5 6 
+3 4 5 
 2 3 2 
 12
 0               0.95
 2 3 2 
 12
 0               0.95
 11               0.05
 
 1
 11               0.05
 
 1
-6 
+5 
 2 
 2
 0               0.05
 1               0.95
 
 3
 2 
 2
 0               0.05
 1               0.95
 
 3
-4 6 7 
+3 5 6 
 2 2 3 
 12
 0               0.98
 2 2 3 
 12
 0               0.98
 11               0.05
 
 1
 11               0.05
 
 1
-8 
+7 
 2 
 2
 0               0.05
 1               0.95
 
 3
 2 
 2
 0               0.05
 1               0.95
 
 3
-8 9 35 
+7 8 34 
 2 3 3 
 18
 0               0.98
 2 3 3 
 18
 0               0.98
 17               0.98
 
 3
 17               0.98
 
 3
-10 11 35 
+9 10 34 
 3 2 3 
 18
 0              0.333
 3 2 3 
 18
 0              0.333
 17               0.98
 
 1
 17               0.98
 
 1
-11 
+10 
 2 
 2
 0                0.1
 1                0.9
 
 3
 2 
 2
 0                0.1
 1                0.9
 
 3
-11 12 35 
+10 11 34 
 2 3 3 
 18
 0              0.333
 2 3 3 
 18
 0              0.333
 17               0.98
 
 1
 17               0.98
 
 1
-13 
+12 
 2 
 2
 0                0.1
 1                0.9
 
 1
 2 
 2
 0                0.1
 1                0.9
 
 1
-14 
+13 
 2 
 2
 0               0.01
 1               0.99
 
 2
 2 
 2
 0               0.01
 1               0.99
 
 2
-14 15 
+13 14 
 2 3 
 6
 0               0.98
 2 3 
 6
 0               0.98
 5                0.3
 
 3
 5                0.3
 
 3
-16 31 33 
+15 30 32 
 4 4 3 
 48
 0               0.97
 4 4 3 
 48
 0               0.97
 47               0.97
 
 1
 47               0.97
 
 1
-17 
+16 
 2 
 2
 0               0.04
 1               0.96
 
 3
 2 
 2
 0               0.04
 1               0.96
 
 3
-18 25 31 
+17 24 30 
 4 3 4 
 48
 0               0.97
 4 3 4 
 48
 0               0.97
 47               0.97
 
 1
 47               0.97
 
 1
-19 
+18 
 2 
 2
 0               0.05
 1               0.95
 
 3
 2 
 2
 0               0.05
 1               0.95
 
 3
-19 20 32 
+18 19 31 
 2 3 4 
 19
 0                  1
 2 3 4 
 19
 0                  1
 23               0.98
 
 3
 23               0.98
 
 3
-20 21 24 
+19 20 23 
 3 3 2 
 18
 0               0.98
 3 3 2 
 18
 0               0.98
 17               0.01
 
 2
 17               0.01
 
 2
-22 23 
+21 22 
 3 2 
 6
 0               0.01
 3 2 
 6
 0               0.01
 5               0.05
 
 1
 5               0.05
 
 1
-23 
+22 
 2 
 2
 0               0.01
 1               0.99
 
 3
 2 
 2
 0               0.01
 1               0.99
 
 3
-23 24 25 
+22 23 24 
 2 2 3 
 12
 0                0.1
 2 2 3 
 12
 0                0.1
 11               0.95
 
 1
 11               0.95
 
 1
-25 
+24 
 3 
 3
 0               0.92
 3 
 3
 0               0.92
 2               0.05
 
 4
 2               0.05
 
 4
-17 25 26 30 
+16 24 25 29 
 2 3 4 4 
 96
 0               0.97
 2 3 4 4 
 96
 0               0.97
 95               0.97
 
 1
 95               0.97
 
 1
-27 
+26 
 2 
 2
 0                0.1
 1                0.9
 
 1
 2 
 2
 0                0.1
 1                0.9
 
 1
-28 
+27 
 3 
 3
 0               0.05
 3 
 3
 0               0.05
 2               0.05
 
 2
 2               0.05
 
 2
-28 29 
+27 28 
 3 4 
 12
 0               0.05
 3 4 
 12
 0               0.05
 11               0.93
 
 3
 11               0.93
 
 3
-27 29 30 
+26 28 29 
 2 4 4 
 32
 0               0.97
 2 4 4 
 32
 0               0.97
 31               0.97
 
 4
 31               0.97
 
 4
-17 25 30 31 
+16 24 29 30 
 2 3 4 4 
 96
 0               0.97
 2 3 4 4 
 96
 0               0.97
 95               0.97
 
 3
 95               0.97
 
 3
-25 31 32 
+24 30 31 
 3 4 4 
 48
 0               0.97
 3 4 4 
 48
 0               0.97
 47               0.01
 
 2
 47               0.01
 
 2
-32 33 
+31 32 
 4 3 
 12
 0               0.01
 4 3 
 12
 0               0.01
 11               0.01
 
 5
 11               0.01
 
 5
-13 15 21 33 34 
+12 14 20 32 33 
 2 3 3 3 2 
 108
 0               0.01
 2 3 3 3 2 
 108
 0               0.01
 107                0.7
 
 2
 107                0.7
 
 2
-34 35 
+33 34 
 2 3 
 6
 0               0.05
 2 3 
 6
 0               0.05
 5                0.9
 
 3
 5                0.9
 
 3
-7 35 36 
+6 34 35 
 3 3 3 
 27
 0               0.98
 3 3 3 
 27
 0               0.98
 26               0.98
 
 3
 26               0.98
 
 3
-15 36 37 
+14 35 36 
 3 3 3 
 27
 0               0.98
 3 3 3 
 27
 0               0.98
index 1078c40..3152123 100644 (file)
@@ -1,3 +1,5 @@
+# --- BP ----------------------
+
 BP_SEQFIX:                      BP[updates=SEQFIX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
 BP_SEQRND:                      BP[updates=SEQRND,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
 BP_SEQMAX:                      BP[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
 BP_SEQFIX:                      BP[updates=SEQFIX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
 BP_SEQRND:                      BP[updates=SEQRND,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
 BP_SEQMAX:                      BP[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0]
@@ -7,15 +9,23 @@ BP_SEQRND_LOG:                  BP[updates=SEQRND,tol=1e-9,maxiter=10000,verbose
 BP_SEQMAX_LOG:                  BP[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=1]
 BP_PARALL_LOG:                  BP[updates=PARALL,tol=1e-9,maxiter=10000,verbose=0,logdomain=1]
 
 BP_SEQMAX_LOG:                  BP[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=1]
 BP_PARALL_LOG:                  BP[updates=PARALL,tol=1e-9,maxiter=10000,verbose=0,logdomain=1]
 
+# --- JTREE -------------------
+
 JTREE_HUGIN:                    JTREE[updates=HUGIN,verbose=0]
 JTREE_SHSH:                     JTREE[updates=SHSH,verbose=0]
 
 JTREE_HUGIN:                    JTREE[updates=HUGIN,verbose=0]
 JTREE_SHSH:                     JTREE[updates=SHSH,verbose=0]
 
+# --- MF ----------------------
+
 MF_SEQRND:                      MF[tol=1e-9,maxiter=10000,verbose=0]
 
 MF_SEQRND:                      MF[tol=1e-9,maxiter=10000,verbose=0]
 
+# --- TREEEP ------------------
+
 TREEEP:                         TREEEP[type=ORG,tol=1e-9,maxiter=10000,verbose=0]
 TREEEPWC:                       TREEEP[type=ALT,tol=1e-9,maxiter=10000,verbose=0]
 
 TREEEP:                         TREEEP[type=ORG,tol=1e-9,maxiter=10000,verbose=0]
 TREEEPWC:                       TREEEP[type=ALT,tol=1e-9,maxiter=10000,verbose=0]
 
-MR:                             MR[updates=FULL,inits=RESPPROP,verbose=0,tol=1e-9]
+# --- MR ----------------------
+
+MR_DEFAULT:                     MR[updates=FULL,inits=RESPPROP,verbose=0,tol=1e-9]
 MR_RESPPROP_FULL:               MR[updates=FULL,inits=RESPPROP,verbose=0,tol=1e-9]
 MR_RESPPROP_LINEAR:             MR[updates=LINEAR,inits=RESPPROP,verbose=0,tol=1e-9]
 MR_CLAMPING_FULL:               MR[updates=FULL,inits=CLAMPING,verbose=0,tol=1e-9]
 MR_RESPPROP_FULL:               MR[updates=FULL,inits=RESPPROP,verbose=0,tol=1e-9]
 MR_RESPPROP_LINEAR:             MR[updates=LINEAR,inits=RESPPROP,verbose=0,tol=1e-9]
 MR_CLAMPING_FULL:               MR[updates=FULL,inits=CLAMPING,verbose=0,tol=1e-9]
@@ -23,6 +33,28 @@ MR_CLAMPING_LINEAR:             MR[updates=LINEAR,inits=CLAMPING,verbose=0,tol=1
 MR_EXACT_FULL:                  MR[updates=FULL,inits=EXACT,verbose=0,tol=1e-9]
 MR_EXACT_LINEAR:                MR[updates=LINEAR,inits=EXACT,verbose=0,tol=1e-9]
 
 MR_EXACT_FULL:                  MR[updates=FULL,inits=EXACT,verbose=0,tol=1e-9]
 MR_EXACT_LINEAR:                MR[updates=LINEAR,inits=EXACT,verbose=0,tol=1e-9]
 
+# --- HAK ---------------------
+
+GBP_MIN:                        HAK[doubleloop=0,clusters=MIN,tol=1e-9,maxiter=10000,verbose=0]
+GBP_DELTA:                      HAK[doubleloop=0,clusters=DELTA,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP3:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=3,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP4:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=4,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP5:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=5,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP6:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=6,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP7:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=7,tol=1e-9,maxiter=10000,verbose=0]
+GBP_LOOP8:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=8,tol=1e-9,maxiter=10000,verbose=0]
+
+HAK_MIN:                        HAK[doubleloop=1,clusters=MIN,tol=1e-9,maxiter=10000,verbose=0]
+HAK_DELTA:                      HAK[doubleloop=1,clusters=DELTA,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP3:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=3,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP4:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=4,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP5:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=5,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP6:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=6,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP7:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=7,tol=1e-9,maxiter=10000,verbose=0]
+HAK_LOOP8:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=8,tol=1e-9,maxiter=10000,verbose=0]
+
+# --- LC ----------------------
+
 LCBP_FULLCAVin_SEQFIX:          LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_FULLCAVin_SEQRND:          LC[cavity=FULL,reinit=1,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_FULLCAVin_NONE:            LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_FULLCAVin_SEQFIX:          LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_FULLCAVin_SEQRND:          LC[cavity=FULL,reinit=1,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_FULLCAVin_NONE:            LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
@@ -35,25 +67,14 @@ LCBP_PAIRCAVin_NONE:            LC[cavity=PAIR,reinit=1,updates=SEQFIX,maxiter=0
 LCBP_PAIRCAV_SEQFIX:            LC[cavity=PAIR,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_PAIRCAV_SEQRND:            LC[cavity=PAIR,reinit=0,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_PAIRCAV_NONE:              LC[cavity=PAIR,reinit=0,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_PAIRCAV_SEQFIX:            LC[cavity=PAIR,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_PAIRCAV_SEQRND:            LC[cavity=PAIR,reinit=0,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_PAIRCAV_NONE:              LC[cavity=PAIR,reinit=0,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAVin_SEQFIX:         LC[cavity=PAIR2,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAVin_SEQRND:         LC[cavity=PAIR2,reinit=1,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAVin_NONE:           LC[cavity=PAIR2,reinit=1,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAV_SEQFIX:           LC[cavity=PAIR2,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAV_SEQRND:           LC[cavity=PAIR2,reinit=0,updates=SEQRND,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
+LCBP_PAIR2CAV_NONE:             LC[cavity=PAIR2,reinit=0,updates=SEQFIX,maxiter=0,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCBP_UNICAV_SEQFIX:             LC[cavity=UNIFORM,updates=SEQFIX,maxiter=10000,tol=1e-9,verbose=0,cavaiopts=[],cavainame=NONE]
 LCBP_UNICAV_SEQRND:             LC[cavity=UNIFORM,updates=SEQRND,maxiter=10000,tol=1e-9,verbose=0,cavaiopts=[],cavainame=NONE]
 LCBP_UNICAV_SEQFIX:             LC[cavity=UNIFORM,updates=SEQFIX,maxiter=10000,tol=1e-9,verbose=0,cavaiopts=[],cavainame=NONE]
 LCBP_UNICAV_SEQRND:             LC[cavity=UNIFORM,updates=SEQRND,maxiter=10000,tol=1e-9,verbose=0,cavaiopts=[],cavainame=NONE]
-LCBP_PAIR2CAV_SEQFIX:           LC[cavity=PAIR2,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
-LCBP_PAIRINTCAV_SEQFIX:         LC[cavity=PAIRINT,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
-LCBP_PAIRCUMCAV_SEQFIX:         LC[cavity=PAIRCUM,reinit=0,updates=SEQFIX,maxiter=10000,cavainame=BP,cavaiopts=[updates=SEQMAX,tol=1e-9,maxiter=10000,verbose=0,logdomain=0],tol=1e-9,verbose=0]
 LCTREEEP:                       LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=TREEEP,cavaiopts=[type=ORG,tol=1e-9,maxiter=10000,verbose=0],tol=1e-9,verbose=0]
 LCMF:                           LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=MF,cavaiopts=[tol=1e-9,maxiter=10000,verbose=0],tol=1e-9,verbose=0]
 
 LCTREEEP:                       LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=TREEEP,cavaiopts=[type=ORG,tol=1e-9,maxiter=10000,verbose=0],tol=1e-9,verbose=0]
 LCMF:                           LC[cavity=FULL,reinit=1,updates=SEQFIX,maxiter=10000,cavainame=MF,cavaiopts=[tol=1e-9,maxiter=10000,verbose=0],tol=1e-9,verbose=0]
 
-GBP_MIN:                        HAK[doubleloop=0,clusters=MIN,tol=1e-9,maxiter=10000,verbose=0]
-GBP_DELTA:                      HAK[doubleloop=0,clusters=DELTA,tol=1e-9,maxiter=10000,verbose=0]
-GBP_LOOP3:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=3,tol=1e-9,maxiter=10000,verbose=0]
-GBP_LOOP4:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=4,tol=1e-9,maxiter=10000,verbose=0]
-GBP_LOOP6:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=6,tol=1e-9,maxiter=10000,verbose=0]
-GBP_LOOP8:                      HAK[doubleloop=0,clusters=LOOP,loopdepth=8,tol=1e-9,maxiter=10000,verbose=0]
-
-HAK_MIN:                        HAK[doubleloop=1,clusters=MIN,tol=1e-9,maxiter=10000,verbose=0]
-HAK_DELTA:                      HAK[doubleloop=1,clusters=DELTA,tol=1e-9,maxiter=10000,verbose=0]
-HAK_LOOP3:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=3,tol=1e-9,maxiter=10000,verbose=0]
-HAK_LOOP4:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=4,tol=1e-9,maxiter=10000,verbose=0]
-HAK_LOOP5:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=5,tol=1e-9,maxiter=10000,verbose=0]
-HAK_LOOP6:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=6,tol=1e-9,maxiter=10000,verbose=0]
-HAK_LOOP8:                      HAK[doubleloop=1,clusters=LOOP,loopdepth=8,tol=1e-9,maxiter=10000,verbose=0]
index 507201e..a4bdcc7 100644 (file)
@@ -36,7 +36,7 @@ using namespace dai;
 namespace po = boost::program_options;
 
 
 namespace po = boost::program_options;
 
 
-class TestAI {
+class TestDAI {
     protected:
         InfAlg          *obj;
         string          name;
     protected:
         InfAlg          *obj;
         string          name;
@@ -47,16 +47,27 @@ class TestAI {
         double          logZ;
         double          maxdiff;
         double          time;
         double          logZ;
         double          maxdiff;
         double          time;
+        size_t          iters;
         bool            has_logZ;
         bool            has_maxdiff;
         bool            has_logZ;
         bool            has_maxdiff;
+        bool            has_iters;
 
 
-        TestAI( const FactorGraph &fg, const string &_name, const PropertySet &opts ) : obj(NULL), name(_name), err(), q(), logZ(0.0), maxdiff(0.0), time(0), has_logZ(true) {
+        TestDAI( const FactorGraph &fg, const string &_name, const PropertySet &opts ) : obj(NULL), name(_name), err(), q(), logZ(0.0), maxdiff(0.0), time(0), iters(0U), has_logZ(false), has_maxdiff(false), has_iters(false) {
             double tic = toc();
             double tic = toc();
-            obj = newInfAlg( name, fg, opts );
+            if( name == "LDPC" ) {
+                double zero[2] = {1.0, 0.0};
+                q.clear();
+                for( size_t i = 0; i < fg.nrVars(); i++ )
+                    q.push_back( Factor(Var(i,2), zero) );
+                logZ = NAN;
+                maxdiff = 0.0;
+                iters = 1;
+            } else
+                obj = newInfAlg( name, fg, opts );
             time += toc() - tic;
         }
 
             time += toc() - tic;
         }
 
-        ~TestAI() { 
+        ~TestDAI() { 
             if( obj != NULL )
                 delete obj;
         }
             if( obj != NULL )
                 delete obj;
         }
@@ -75,7 +86,7 @@ class TestAI {
             return result;
         }
 
             return result;
         }
 
-        void doAI() {
+        void doDAI() {
             double tic = toc();
             if( obj != NULL ) {
                 obj->init();
             double tic = toc();
             if( obj != NULL ) {
                 obj->init();
@@ -93,11 +104,13 @@ class TestAI {
                 } catch( Exception &e ) {
                     has_maxdiff = false;
                 }
                 } catch( Exception &e ) {
                     has_maxdiff = false;
                 }
+                has_iters = false;
+                iters = 0;
                 q = allBeliefs();
             };
         }
 
                 q = allBeliefs();
             };
         }
 
-        void calcErrs( const TestAI &x ) {
+        void calcErrs( const TestDAI &x ) {
             err.clear();
             err.reserve( q.size() );
             for( size_t i = 0; i < q.size(); i++ )
             err.clear();
             err.reserve( q.size() );
             for( size_t i = 0; i < q.size(); i++ )
@@ -122,24 +135,40 @@ class TestAI {
 
 
 pair<string, PropertySet> parseMethod( const string &_s, const map<string,string> & aliases ) {
 
 
 pair<string, PropertySet> parseMethod( const string &_s, const map<string,string> & aliases ) {
-    string s = _s;
-    if( aliases.find(_s) != aliases.end() )
-        s = aliases.find(_s)->second;
+    // s = first part of _s, until '['
+    string::size_type pos = _s.find_first_of('[');
+    string s;
+    if( pos == string::npos )
+        s = _s;
+    else
+        s = _s.substr(0,pos);
+
+    // if the first part is an alias, substitute
+    if( aliases.find(s) != aliases.end() )
+        s = aliases.find(s)->second;
+
+    // attach second part, merging properties if necessary
+    if( pos != string::npos ) {
+        if( s.at(s.length()-1) == ']' ) {
+            s = s.erase(s.length()-1,1) + ',' + _s.substr(pos+1);
+        } else
+            s = s + _s.substr(pos);
+    }
 
     pair<string, PropertySet> result;
     string & name = result.first;
     PropertySet & opts = result.second;
 
 
     pair<string, PropertySet> result;
     string & name = result.first;
     PropertySet & opts = result.second;
 
-    string::size_type pos = s.find_first_of('[');
-    name = s.substr( 0, pos );
+    pos = s.find_first_of('[');
     if( pos == string::npos )
         throw "Malformed method";
     if( pos == string::npos )
         throw "Malformed method";
+    name = s.substr( 0, pos );
     size_t n = 0;
     for( ; strlen( DAINames[n] ) != 0; n++ )
         if( name == DAINames[n] )
             break;
     size_t n = 0;
     for( ; strlen( DAINames[n] ) != 0; n++ )
         if( name == DAINames[n] )
             break;
-    if( strlen( DAINames[n] ) == 0 )
-        throw "Unknown inference algorithm";
+    if( strlen( DAINames[n] ) == 0 && (name != "LDPC") )
+        DAI_THROW(UNKNOWN_DAI_ALGORITHM);
 
     stringstream ss;
     ss << s.substr(pos,s.length());
 
     stringstream ss;
     ss << s.substr(pos,s.length());
@@ -171,7 +200,7 @@ int main( int argc, char *argv[] ) {
         po::options_description opts_required("Required options");
         opts_required.add_options()
             ("filename", po::value< string >(&filename), "Filename of FactorGraph")
         po::options_description opts_required("Required options");
         opts_required.add_options()
             ("filename", po::value< string >(&filename), "Filename of FactorGraph")
-            ("methods", po::value< vector<string> >(&methods)->multitoken(), "AI methods to test")
+            ("methods", po::value< vector<string> >(&methods)->multitoken(), "DAI methods to test")
         ;
 
         po::options_description opts_optional("Allowed options");
         ;
 
         po::options_description opts_optional("Allowed options");
@@ -231,7 +260,7 @@ int main( int argc, char *argv[] ) {
         }
 
         FactorGraph fg;
         }
 
         FactorGraph fg;
-        fg.ReadFromFile(filename.c_str());
+        fg.ReadFromFile( filename.c_str() );
 
         vector<Factor> q0;
         double logZ0 = 0.0;
 
         vector<Factor> q0;
         double logZ0 = 0.0;
@@ -250,7 +279,9 @@ int main( int argc, char *argv[] ) {
         cout.width( 10 );
         cout << "LOGZ ERROR" << "  ";
         cout.width( 10 );
         cout.width( 10 );
         cout << "LOGZ ERROR" << "  ";
         cout.width( 10 );
-        cout << "MAXDIFF" << endl;
+        cout << "MAXDIFF" << "  ";
+        cout.width( 10 );
+        cout << "ITERS" << endl;
 
         for( size_t m = 0; m < methods.size(); m++ ) {
             pair<string, PropertySet> meth = parseMethod( methods[m], Aliases );
 
         for( size_t m = 0; m < methods.size(); m++ ) {
             pair<string, PropertySet> meth = parseMethod( methods[m], Aliases );
@@ -261,8 +292,8 @@ int main( int argc, char *argv[] ) {
                 meth.second.Set("maxiter",maxiter);
             if( vm.count("verbose") )
                 meth.second.Set("verbose",verbose);
                 meth.second.Set("maxiter",maxiter);
             if( vm.count("verbose") )
                 meth.second.Set("verbose",verbose);
-            TestAI piet(fg, meth.first, meth.second );
-            piet.doAI();
+            TestDAI piet(fg, meth.first, meth.second );
+            piet.doDAI();
             if( m == 0 ) {
                 q0 = piet.q;
                 logZ0 = piet.logZ;
             if( m == 0 ) {
                 q0 = piet.q;
                 logZ0 = piet.logZ;
@@ -300,12 +331,18 @@ int main( int argc, char *argv[] ) {
                         md = me;
                     if( isnan( ae ) )
                         md = ae;
                         md = me;
                     if( isnan( ae ) )
                         md = ae;
-                    cout << md << endl;
+                    cout << md << "  ";
                 } else {
                 } else {
-                    cout << "N/A       ";
+                    cout << "N/A         ";
                 }
                 }
-            } else
-                cout << endl;
+                cout.width( 10 );
+                if( piet.has_iters ) {
+                    cout << piet.iters << "  " << endl;
+                } else {
+                    cout << "N/A         ";
+                }
+            }
+            cout << endl;
 
             if( marginals ) {
                 for( size_t i = 0; i < piet.q.size(); i++ )
 
             if( marginals ) {
                 for( size_t i = 0; i < piet.q.size(); i++ )
index 9fae84a..8e8b9b7 100755 (executable)
@@ -1,2 +1,2 @@
 #!/bin/bash
 #!/bin/bash
-./test --report-time false --aliases aliases.conf --filename $1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
+./test --report-time false --marginals true --aliases aliases.conf --filename $1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
index 70a9460..9cc3229 100755 (executable)
@@ -1 +1 @@
-test --report-time false --aliases aliases.conf --filename %1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
+test --report-time false --marginals true --aliases aliases.conf --filename %1 --methods EXACT[verbose=0] JTREE_HUGIN JTREE_SHSH BP_SEQFIX BP_SEQRND BP_SEQMAX BP_PARALL BP_SEQFIX_LOG BP_SEQRND_LOG BP_SEQMAX_LOG BP_PARALL_LOG MF_SEQRND TREEEP TREEEPWC GBP_MIN GBP_DELTA GBP_LOOP3 GBP_LOOP4 GBP_LOOP5 GBP_LOOP6 GBP_LOOP7 HAK_MIN HAK_DELTA HAK_LOOP3 HAK_LOOP4 HAK_LOOP5 MR_RESPPROP_FULL MR_CLAMPING_FULL MR_EXACT_FULL MR_RESPPROP_LINEAR MR_CLAMPING_LINEAR MR_EXACT_LINEAR LCBP_FULLCAV_SEQFIX LCBP_FULLCAVin_SEQFIX LCBP_FULLCAV_SEQRND LCBP_FULLCAVin_SEQRND LCBP_FULLCAV_NONE LCBP_FULLCAVin_NONE LCBP_PAIRCAV_SEQFIX LCBP_PAIRCAVin_SEQFIX LCBP_PAIRCAV_SEQRND LCBP_PAIRCAVin_SEQRND LCBP_PAIRCAV_NONE LCBP_PAIRCAVin_NONE LCBP_PAIR2CAV_SEQFIX LCBP_PAIR2CAVin_SEQFIX LCBP_PAIR2CAV_SEQRND LCBP_PAIR2CAVin_SEQRND LCBP_PAIR2CAV_NONE LCBP_PAIR2CAVin_NONE LCBP_UNICAV_SEQFIX LCBP_UNICAV_SEQRND
index fa0b4e0..9587ee1 100644 (file)
 # testfast.fg
 # testfast.fg
-# METHOD                                  MAX ERROR   AVG ERROR   LOGZ ERROR  MAXDIFF   
+# METHOD                                  MAX ERROR   AVG ERROR   LOGZ ERROR  MAXDIFF     ITERS     
 EXACT[verbose=0]                          
 EXACT[verbose=0]                          
-JTREE_HUGIN                               1.000e-09   1.000e-09   1.000e-09   1.000e-09 
-JTREE_SHSH                                1.000e-09   1.000e-09   1.000e-09   1.000e-09 
-BP_SEQFIX                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_SEQRND                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_SEQMAX                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_PARALL                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_SEQFIX_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_SEQRND_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_SEQMAX_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-BP_PARALL_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-MF_SEQRND                                 3.607e-01   1.904e-01   -9.409e-02  1.000e-09 
-TREEEP                                    3.268e-02   8.023e-03   6.340e-04   1.000e-09 
-TREEEPWC                                  2.356e-02   1.026e-02   4.876e-03   1.000e-09 
-GBP_MIN                                   9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-GBP_DELTA                                 6.291e-01   3.350e-01   -3.303e-01  1.000e-09 
-GBP_LOOP3                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-GBP_LOOP4                                 7.893e-01   3.569e-01   -3.781e-01  1.000e-09 
-HAK_MIN                                   9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-HAK_DELTA                                 3.684e-01   1.892e-01   9.675e-01   1.000e-09 
-HAK_LOOP3                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09 
-HAK_LOOP4                                 4.970e-03   1.486e-03   -2.503e-04  1.000e-09 
-MR_RESPPROP_FULL                          1.676e-02   4.933e-03   N/A         1.000e-09 
-MR_CLAMPING_FULL                          8.359e-03   2.508e-03   N/A         1.000e-09 
-MR_EXACT_FULL                             3.527e-03   1.038e-03   N/A         1.000e-09 
-MR_RESPPROP_LINEAR                        1.932e-02   5.506e-03   N/A         1.000e-09 
-MR_CLAMPING_LINEAR                        1.089e-02   3.076e-03   N/A         1.000e-09 
-MR_EXACT_LINEAR                           5.617e-03   1.742e-03   N/A         1.000e-09 
-LCBP_FULLCAV_SEQFIX                       1.225e-03   5.589e-04   N/A         1.000e-09 
-LCBP_FULLCAVin_SEQFIX                     1.225e-03   5.589e-04   N/A         1.000e-09 
-LCBP_FULLCAV_SEQRND                       1.225e-03   5.589e-04   N/A         1.000e-09 
-LCBP_FULLCAVin_SEQRND                     1.225e-03   5.589e-04   N/A         1.000e-09 
-LCBP_FULLCAV_NONE                         1.318e-02   2.644e-03   N/A         1.000e+00 
-LCBP_FULLCAVin_NONE                       1.318e-02   2.644e-03   N/A         1.000e+00 
-LCBP_PAIRCAV_SEQFIX                       1.564e-02   5.284e-03   N/A         1.000e-09 
-LCBP_PAIRCAVin_SEQFIX                     1.564e-02   5.284e-03   N/A         1.000e-09 
-LCBP_PAIRCAV_SEQRND                       1.564e-02   5.284e-03   N/A         1.000e-09 
-LCBP_PAIRCAVin_SEQRND                     1.564e-02   5.284e-03   N/A         1.000e-09 
-LCBP_PAIRCAV_NONE                         1.869e-01   6.816e-02   N/A         1.000e+00 
-LCBP_PAIRCAVin_NONE                       1.869e-01   6.816e-02   N/A         1.000e+00 
-LCBP_UNICAV_SEQFIX                        9.483e-02   3.078e-02   N/A         1.000e-09 
-LCBP_UNICAV_SEQRND                        9.483e-02   3.078e-02   N/A         1.000e-09 
+# ([0] <0.388774 0.611226 >)
+# ([1] <0.555571 0.444429 >)
+# ([2] <0.458706 0.541294 >)
+# ([3] <0.54801 0.45199 >)
+# ([4] <0.666005 0.333995 >)
+# ([5] <0.210731 0.789269 >)
+# ([6] <0.81782 0.18218 >)
+# ([7] <0.232711 0.767289 >)
+# ([8] <0.217101 0.782899 >)
+# ([9] <0.205196 0.794804 >)
+# ([10] <0.766453 0.233547 >)
+# ([11] <0.121723 0.878277 >)
+# ([12] <0.421411 0.578589 >)
+# ([13] <0.534838 0.465162 >)
+# ([14] <0.62914 0.37086 >)
+# ([15] <0.135686 0.864314 >)
+JTREE_HUGIN                               1.000e-09   1.000e-09   1.000e-09   1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.556e-01 4.444e-01 >)
+# ([2] <4.587e-01 5.413e-01 >)
+# ([3] <5.480e-01 4.520e-01 >)
+# ([4] <6.660e-01 3.340e-01 >)
+# ([5] <2.107e-01 7.893e-01 >)
+# ([6] <8.178e-01 1.822e-01 >)
+# ([7] <2.327e-01 7.673e-01 >)
+# ([8] <2.171e-01 7.829e-01 >)
+# ([9] <2.052e-01 7.948e-01 >)
+# ([10] <7.665e-01 2.335e-01 >)
+# ([11] <1.217e-01 8.783e-01 >)
+# ([12] <4.214e-01 5.786e-01 >)
+# ([13] <5.348e-01 4.652e-01 >)
+# ([14] <6.291e-01 3.709e-01 >)
+# ([15] <1.357e-01 8.643e-01 >)
+JTREE_SHSH                                1.000e-09   1.000e-09   1.000e-09   1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.556e-01 4.444e-01 >)
+# ([2] <4.587e-01 5.413e-01 >)
+# ([3] <5.480e-01 4.520e-01 >)
+# ([4] <6.660e-01 3.340e-01 >)
+# ([5] <2.107e-01 7.893e-01 >)
+# ([6] <8.178e-01 1.822e-01 >)
+# ([7] <2.327e-01 7.673e-01 >)
+# ([8] <2.171e-01 7.829e-01 >)
+# ([9] <2.052e-01 7.948e-01 >)
+# ([10] <7.665e-01 2.335e-01 >)
+# ([11] <1.217e-01 8.783e-01 >)
+# ([12] <4.214e-01 5.786e-01 >)
+# ([13] <5.348e-01 4.652e-01 >)
+# ([14] <6.291e-01 3.709e-01 >)
+# ([15] <1.357e-01 8.643e-01 >)
+BP_SEQFIX                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_SEQRND                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_SEQMAX                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_PARALL                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_SEQFIX_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_SEQRND_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_SEQMAX_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+BP_PARALL_LOG                             9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+MF_SEQRND                                 3.607e-01   1.904e-01   -9.409e-02  1.000e-09   N/A         
+# ([0] <2.053e-01 7.947e-01 >)
+# ([1] <9.163e-01 8.373e-02 >)
+# ([2] <1.579e-01 8.421e-01 >)
+# ([3] <6.986e-01 3.014e-01 >)
+# ([4] <8.982e-01 1.018e-01 >)
+# ([5] <1.830e-01 8.170e-01 >)
+# ([6] <9.597e-01 4.033e-02 >)
+# ([7] <1.841e-01 8.159e-01 >)
+# ([8] <4.385e-03 9.956e-01 >)
+# ([9] <5.075e-02 9.492e-01 >)
+# ([10] <9.685e-01 3.149e-02 >)
+# ([11] <2.957e-02 9.704e-01 >)
+# ([12] <9.632e-02 9.037e-01 >)
+# ([13] <8.148e-01 1.852e-01 >)
+# ([14] <8.338e-01 1.662e-01 >)
+# ([15] <5.661e-03 9.943e-01 >)
+TREEEP                                    3.268e-02   8.023e-03   6.340e-04   1.000e-09   N/A         
+# ([0] <3.980e-01 6.020e-01 >)
+# ([1] <5.520e-01 4.480e-01 >)
+# ([2] <4.620e-01 5.380e-01 >)
+# ([3] <5.472e-01 4.528e-01 >)
+# ([4] <6.643e-01 3.357e-01 >)
+# ([5] <1.781e-01 8.219e-01 >)
+# ([6] <8.442e-01 1.558e-01 >)
+# ([7] <2.224e-01 7.776e-01 >)
+# ([8] <2.154e-01 7.846e-01 >)
+# ([9] <2.067e-01 7.933e-01 >)
+# ([10] <7.742e-01 2.258e-01 >)
+# ([11] <1.207e-01 8.793e-01 >)
+# ([12] <4.318e-01 5.682e-01 >)
+# ([13] <5.293e-01 4.707e-01 >)
+# ([14] <6.409e-01 3.591e-01 >)
+# ([15] <1.364e-01 8.636e-01 >)
+TREEEPWC                                  2.356e-02   1.026e-02   4.876e-03   1.000e-09   N/A         
+# ([0] <4.091e-01 5.909e-01 >)
+# ([1] <5.429e-01 4.571e-01 >)
+# ([2] <4.697e-01 5.303e-01 >)
+# ([3] <5.451e-01 4.549e-01 >)
+# ([4] <6.509e-01 3.491e-01 >)
+# ([5] <1.890e-01 8.110e-01 >)
+# ([6] <8.298e-01 1.702e-01 >)
+# ([7] <2.273e-01 7.727e-01 >)
+# ([8] <2.407e-01 7.593e-01 >)
+# ([9] <2.153e-01 7.847e-01 >)
+# ([10] <7.660e-01 2.340e-01 >)
+# ([11] <1.252e-01 8.748e-01 >)
+# ([12] <4.383e-01 5.617e-01 >)
+# ([13] <5.298e-01 4.702e-01 >)
+# ([14] <6.299e-01 3.701e-01 >)
+# ([15] <1.384e-01 8.616e-01 >)
+GBP_MIN                                   9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+GBP_DELTA                                 6.291e-01   3.350e-01   -3.303e-01  1.000e-09   N/A         
+# ([0] <0.000e+00 1.000e+00 >)
+# ([1] <1.000e+00 0.000e+00 >)
+# ([2] <0.000e+00 1.000e+00 >)
+# ([3] <1.000e+00 0.000e+00 >)
+# ([4] <1.000e+00 0.000e+00 >)
+# ([5] <0.000e+00 1.000e+00 >)
+# ([6] <1.000e+00 0.000e+00 >)
+# ([7] <0.000e+00 1.000e+00 >)
+# ([8] <0.000e+00 1.000e+00 >)
+# ([9] <0.000e+00 1.000e+00 >)
+# ([10] <1.000e+00 0.000e+00 >)
+# ([11] <0.000e+00 1.000e+00 >)
+# ([12] <1.000e+00 0.000e+00 >)
+# ([13] <0.000e+00 1.000e+00 >)
+# ([14] <0.000e+00 1.000e+00 >)
+# ([15] <0.000e+00 1.000e+00 >)
+GBP_LOOP3                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+GBP_LOOP4                                 7.893e-01   3.569e-01   -3.781e-01  1.000e-09   N/A         
+# ([0] <0.000e+00 1.000e+00 >)
+# ([1] <1.000e+00 0.000e+00 >)
+# ([2] <0.000e+00 1.000e+00 >)
+# ([3] <1.000e+00 4.777e-212 >)
+# ([4] <1.000e+00 0.000e+00 >)
+# ([5] <1.000e+00 7.579e-78 >)
+# ([6] <1.000e+00 0.000e+00 >)
+# ([7] <0.000e+00 1.000e+00 >)
+# ([8] <0.000e+00 1.000e+00 >)
+# ([9] <0.000e+00 1.000e+00 >)
+# ([10] <1.000e+00 0.000e+00 >)
+# ([11] <0.000e+00 1.000e+00 >)
+# ([12] <1.338e-115 1.000e+00 >)
+# ([13] <1.000e+00 3.283e-118 >)
+# ([14] <0.000e+00 1.000e+00 >)
+# ([15] <0.000e+00 1.000e+00 >)
+GBP_LOOP5                                 7.893e-01   3.569e-01   -3.781e-01  1.000e-09   N/A         
+# ([0] <0.000e+00 1.000e+00 >)
+# ([1] <1.000e+00 0.000e+00 >)
+# ([2] <0.000e+00 1.000e+00 >)
+# ([3] <1.000e+00 4.777e-212 >)
+# ([4] <1.000e+00 0.000e+00 >)
+# ([5] <1.000e+00 7.579e-78 >)
+# ([6] <1.000e+00 0.000e+00 >)
+# ([7] <0.000e+00 1.000e+00 >)
+# ([8] <0.000e+00 1.000e+00 >)
+# ([9] <0.000e+00 1.000e+00 >)
+# ([10] <1.000e+00 0.000e+00 >)
+# ([11] <0.000e+00 1.000e+00 >)
+# ([12] <1.338e-115 1.000e+00 >)
+# ([13] <1.000e+00 3.283e-118 >)
+# ([14] <0.000e+00 1.000e+00 >)
+# ([15] <0.000e+00 1.000e+00 >)
+GBP_LOOP6                                 7.948e-01   4.458e-01   -4.096e-01  1.000e-09   N/A         
+# ([0] <1.000e+00 0.000e+00 >)
+# ([1] <0.000e+00 1.000e+00 >)
+# ([2] <1.000e+00 0.000e+00 >)
+# ([3] <0.000e+00 1.000e+00 >)
+# ([4] <0.000e+00 1.000e+00 >)
+# ([5] <0.000e+00 1.000e+00 >)
+# ([6] <1.000e+00 0.000e+00 >)
+# ([7] <0.000e+00 1.000e+00 >)
+# ([8] <1.000e+00 0.000e+00 >)
+# ([9] <1.000e+00 0.000e+00 >)
+# ([10] <1.000e+00 0.000e+00 >)
+# ([11] <0.000e+00 1.000e+00 >)
+# ([12] <0.000e+00 1.000e+00 >)
+# ([13] <1.000e+00 0.000e+00 >)
+# ([14] <0.000e+00 1.000e+00 >)
+# ([15] <0.000e+00 1.000e+00 >)
+GBP_LOOP7                                 7.948e-01   4.458e-01   -4.096e-01  1.000e-09   N/A         
+# ([0] <1.000e+00 0.000e+00 >)
+# ([1] <0.000e+00 1.000e+00 >)
+# ([2] <1.000e+00 0.000e+00 >)
+# ([3] <0.000e+00 1.000e+00 >)
+# ([4] <0.000e+00 1.000e+00 >)
+# ([5] <0.000e+00 1.000e+00 >)
+# ([6] <1.000e+00 0.000e+00 >)
+# ([7] <0.000e+00 1.000e+00 >)
+# ([8] <1.000e+00 0.000e+00 >)
+# ([9] <1.000e+00 0.000e+00 >)
+# ([10] <1.000e+00 0.000e+00 >)
+# ([11] <0.000e+00 1.000e+00 >)
+# ([12] <0.000e+00 1.000e+00 >)
+# ([13] <1.000e+00 0.000e+00 >)
+# ([14] <0.000e+00 1.000e+00 >)
+# ([15] <0.000e+00 1.000e+00 >)
+HAK_MIN                                   9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+HAK_DELTA                                 3.684e-01   1.892e-01   9.675e-01   1.000e-09   N/A         
+# ([0] <4.902e-01 5.098e-01 >)
+# ([1] <5.098e-01 4.902e-01 >)
+# ([2] <4.902e-01 5.098e-01 >)
+# ([3] <5.098e-01 4.902e-01 >)
+# ([4] <5.098e-01 4.902e-01 >)
+# ([5] <5.098e-01 4.902e-01 >)
+# ([6] <4.902e-01 5.098e-01 >)
+# ([7] <5.098e-01 4.902e-01 >)
+# ([8] <4.902e-01 5.098e-01 >)
+# ([9] <4.902e-01 5.098e-01 >)
+# ([10] <5.098e-01 4.902e-01 >)
+# ([11] <4.902e-01 5.098e-01 >)
+# ([12] <4.902e-01 5.098e-01 >)
+# ([13] <5.098e-01 4.902e-01 >)
+# ([14] <5.098e-01 4.902e-01 >)
+# ([15] <4.902e-01 5.098e-01 >)
+HAK_LOOP3                                 9.483e-02   3.078e-02   1.737e-02   1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+HAK_LOOP4                                 4.970e-03   1.486e-03   -2.503e-04  1.000e-09   N/A         
+# ([0] <3.909e-01 6.091e-01 >)
+# ([1] <5.556e-01 4.444e-01 >)
+# ([2] <4.585e-01 5.415e-01 >)
+# ([3] <5.490e-01 4.510e-01 >)
+# ([4] <6.663e-01 3.337e-01 >)
+# ([5] <2.089e-01 7.911e-01 >)
+# ([6] <8.197e-01 1.803e-01 >)
+# ([7] <2.321e-01 7.679e-01 >)
+# ([8] <2.160e-01 7.840e-01 >)
+# ([9] <2.054e-01 7.946e-01 >)
+# ([10] <7.685e-01 2.315e-01 >)
+# ([11] <1.182e-01 8.818e-01 >)
+# ([12] <4.206e-01 5.794e-01 >)
+# ([13] <5.351e-01 4.649e-01 >)
+# ([14] <6.319e-01 3.681e-01 >)
+# ([15] <1.307e-01 8.693e-01 >)
+HAK_LOOP5                                 4.970e-03   1.486e-03   -2.503e-04  1.000e-09   N/A         
+# ([0] <3.909e-01 6.091e-01 >)
+# ([1] <5.556e-01 4.444e-01 >)
+# ([2] <4.585e-01 5.415e-01 >)
+# ([3] <5.490e-01 4.510e-01 >)
+# ([4] <6.663e-01 3.337e-01 >)
+# ([5] <2.089e-01 7.911e-01 >)
+# ([6] <8.197e-01 1.803e-01 >)
+# ([7] <2.321e-01 7.679e-01 >)
+# ([8] <2.160e-01 7.840e-01 >)
+# ([9] <2.054e-01 7.946e-01 >)
+# ([10] <7.685e-01 2.315e-01 >)
+# ([11] <1.182e-01 8.818e-01 >)
+# ([12] <4.206e-01 5.794e-01 >)
+# ([13] <5.351e-01 4.649e-01 >)
+# ([14] <6.319e-01 3.681e-01 >)
+# ([15] <1.307e-01 8.693e-01 >)
+MR_RESPPROP_FULL                          1.676e-02   4.933e-03   N/A         1.000e-09   N/A         
+# ([0] <3.941e-01 6.059e-01 >)
+# ([1] <5.534e-01 4.466e-01 >)
+# ([2] <4.602e-01 5.398e-01 >)
+# ([3] <5.477e-01 4.523e-01 >)
+# ([4] <6.557e-01 3.443e-01 >)
+# ([5] <2.084e-01 7.916e-01 >)
+# ([6] <8.163e-01 1.837e-01 >)
+# ([7] <2.332e-01 7.668e-01 >)
+# ([8] <2.334e-01 7.666e-01 >)
+# ([9] <2.220e-01 7.780e-01 >)
+# ([10] <7.583e-01 2.417e-01 >)
+# ([11] <1.221e-01 8.779e-01 >)
+# ([12] <4.190e-01 5.810e-01 >)
+# ([13] <5.407e-01 4.593e-01 >)
+# ([14] <6.252e-01 3.748e-01 >)
+# ([15] <1.346e-01 8.654e-01 >)
+MR_CLAMPING_FULL                          8.359e-03   2.508e-03   N/A         1.000e-09   N/A         
+# ([0] <3.900e-01 6.100e-01 >)
+# ([1] <5.560e-01 4.440e-01 >)
+# ([2] <4.589e-01 5.411e-01 >)
+# ([3] <5.480e-01 4.520e-01 >)
+# ([4] <6.626e-01 3.374e-01 >)
+# ([5] <2.105e-01 7.895e-01 >)
+# ([6] <8.168e-01 1.832e-01 >)
+# ([7] <2.332e-01 7.668e-01 >)
+# ([8] <2.242e-01 7.758e-01 >)
+# ([9] <2.136e-01 7.864e-01 >)
+# ([10] <7.621e-01 2.379e-01 >)
+# ([11] <1.206e-01 8.794e-01 >)
+# ([12] <4.180e-01 5.820e-01 >)
+# ([13] <5.404e-01 4.596e-01 >)
+# ([14] <6.273e-01 3.727e-01 >)
+# ([15] <1.344e-01 8.656e-01 >)
+MR_EXACT_FULL                             3.527e-03   1.038e-03   N/A         1.000e-09   N/A         
+# ([0] <3.867e-01 6.133e-01 >)
+# ([1] <5.572e-01 4.428e-01 >)
+# ([2] <4.585e-01 5.415e-01 >)
+# ([3] <5.478e-01 4.522e-01 >)
+# ([4] <6.681e-01 3.319e-01 >)
+# ([5] <2.101e-01 7.899e-01 >)
+# ([6] <8.179e-01 1.821e-01 >)
+# ([7] <2.329e-01 7.671e-01 >)
+# ([8] <2.166e-01 7.834e-01 >)
+# ([9] <2.053e-01 7.947e-01 >)
+# ([10] <7.666e-01 2.334e-01 >)
+# ([11] <1.201e-01 8.799e-01 >)
+# ([12] <4.194e-01 5.806e-01 >)
+# ([13] <5.384e-01 4.616e-01 >)
+# ([14] <6.296e-01 3.704e-01 >)
+# ([15] <1.344e-01 8.656e-01 >)
+MR_RESPPROP_LINEAR                        1.932e-02   5.506e-03   N/A         1.000e-09   N/A         
+# ([0] <3.923e-01 6.077e-01 >)
+# ([1] <5.529e-01 4.471e-01 >)
+# ([2] <4.608e-01 5.392e-01 >)
+# ([3] <5.467e-01 4.533e-01 >)
+# ([4] <6.546e-01 3.454e-01 >)
+# ([5] <2.071e-01 7.929e-01 >)
+# ([6] <8.175e-01 1.825e-01 >)
+# ([7] <2.325e-01 7.675e-01 >)
+# ([8] <2.364e-01 7.636e-01 >)
+# ([9] <2.228e-01 7.772e-01 >)
+# ([10] <7.577e-01 2.423e-01 >)
+# ([11] <1.240e-01 8.760e-01 >)
+# ([12] <4.258e-01 5.742e-01 >)
+# ([13] <5.388e-01 4.612e-01 >)
+# ([14] <6.239e-01 3.761e-01 >)
+# ([15] <1.369e-01 8.631e-01 >)
+MR_CLAMPING_LINEAR                        1.089e-02   3.076e-03   N/A         1.000e-09   N/A         
+# ([0] <3.884e-01 6.116e-01 >)
+# ([1] <5.551e-01 4.449e-01 >)
+# ([2] <4.598e-01 5.402e-01 >)
+# ([3] <5.469e-01 4.531e-01 >)
+# ([4] <6.610e-01 3.390e-01 >)
+# ([5] <2.089e-01 7.911e-01 >)
+# ([6] <8.182e-01 1.818e-01 >)
+# ([7] <2.325e-01 7.675e-01 >)
+# ([8] <2.280e-01 7.720e-01 >)
+# ([9] <2.148e-01 7.852e-01 >)
+# ([10] <7.613e-01 2.387e-01 >)
+# ([11] <1.228e-01 8.772e-01 >)
+# ([12] <4.254e-01 5.746e-01 >)
+# ([13] <5.383e-01 4.617e-01 >)
+# ([14] <6.257e-01 3.743e-01 >)
+# ([15] <1.370e-01 8.630e-01 >)
+MR_EXACT_LINEAR                           5.617e-03   1.742e-03   N/A         1.000e-09   N/A         
+# ([0] <3.853e-01 6.147e-01 >)
+# ([1] <5.560e-01 4.440e-01 >)
+# ([2] <4.596e-01 5.404e-01 >)
+# ([3] <5.466e-01 4.534e-01 >)
+# ([4] <6.661e-01 3.339e-01 >)
+# ([5] <2.083e-01 7.917e-01 >)
+# ([6] <8.194e-01 1.806e-01 >)
+# ([7] <2.320e-01 7.680e-01 >)
+# ([8] <2.210e-01 7.790e-01 >)
+# ([9] <2.069e-01 7.931e-01 >)
+# ([10] <7.657e-01 2.343e-01 >)
+# ([11] <1.225e-01 8.775e-01 >)
+# ([12] <4.270e-01 5.730e-01 >)
+# ([13] <5.362e-01 4.638e-01 >)
+# ([14] <6.279e-01 3.721e-01 >)
+# ([15] <1.372e-01 8.628e-01 >)
+LCBP_FULLCAV_SEQFIX                       1.225e-03   5.589e-04   N/A         1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.559e-01 4.441e-01 >)
+# ([2] <4.583e-01 5.417e-01 >)
+# ([3] <5.482e-01 4.518e-01 >)
+# ([4] <6.657e-01 3.343e-01 >)
+# ([5] <2.113e-01 7.887e-01 >)
+# ([6] <8.172e-01 1.828e-01 >)
+# ([7] <2.329e-01 7.671e-01 >)
+# ([8] <2.182e-01 7.818e-01 >)
+# ([9] <2.062e-01 7.938e-01 >)
+# ([10] <7.652e-01 2.348e-01 >)
+# ([11] <1.214e-01 8.786e-01 >)
+# ([12] <4.205e-01 5.795e-01 >)
+# ([13] <5.358e-01 4.642e-01 >)
+# ([14] <6.285e-01 3.715e-01 >)
+# ([15] <1.359e-01 8.641e-01 >)
+LCBP_FULLCAVin_SEQFIX                     1.225e-03   5.589e-04   N/A         1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.559e-01 4.441e-01 >)
+# ([2] <4.583e-01 5.417e-01 >)
+# ([3] <5.482e-01 4.518e-01 >)
+# ([4] <6.657e-01 3.343e-01 >)
+# ([5] <2.113e-01 7.887e-01 >)
+# ([6] <8.172e-01 1.828e-01 >)
+# ([7] <2.329e-01 7.671e-01 >)
+# ([8] <2.182e-01 7.818e-01 >)
+# ([9] <2.062e-01 7.938e-01 >)
+# ([10] <7.652e-01 2.348e-01 >)
+# ([11] <1.214e-01 8.786e-01 >)
+# ([12] <4.205e-01 5.795e-01 >)
+# ([13] <5.358e-01 4.642e-01 >)
+# ([14] <6.285e-01 3.715e-01 >)
+# ([15] <1.359e-01 8.641e-01 >)
+LCBP_FULLCAV_SEQRND                       1.225e-03   5.589e-04   N/A         1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.559e-01 4.441e-01 >)
+# ([2] <4.583e-01 5.417e-01 >)
+# ([3] <5.482e-01 4.518e-01 >)
+# ([4] <6.657e-01 3.343e-01 >)
+# ([5] <2.113e-01 7.887e-01 >)
+# ([6] <8.172e-01 1.828e-01 >)
+# ([7] <2.329e-01 7.671e-01 >)
+# ([8] <2.182e-01 7.818e-01 >)
+# ([9] <2.062e-01 7.938e-01 >)
+# ([10] <7.652e-01 2.348e-01 >)
+# ([11] <1.214e-01 8.786e-01 >)
+# ([12] <4.205e-01 5.795e-01 >)
+# ([13] <5.358e-01 4.642e-01 >)
+# ([14] <6.285e-01 3.715e-01 >)
+# ([15] <1.359e-01 8.641e-01 >)
+LCBP_FULLCAVin_SEQRND                     1.225e-03   5.589e-04   N/A         1.000e-09   N/A         
+# ([0] <3.888e-01 6.112e-01 >)
+# ([1] <5.559e-01 4.441e-01 >)
+# ([2] <4.583e-01 5.417e-01 >)
+# ([3] <5.482e-01 4.518e-01 >)
+# ([4] <6.657e-01 3.343e-01 >)
+# ([5] <2.113e-01 7.887e-01 >)
+# ([6] <8.172e-01 1.828e-01 >)
+# ([7] <2.329e-01 7.671e-01 >)
+# ([8] <2.182e-01 7.818e-01 >)
+# ([9] <2.062e-01 7.938e-01 >)
+# ([10] <7.652e-01 2.348e-01 >)
+# ([11] <1.214e-01 8.786e-01 >)
+# ([12] <4.205e-01 5.795e-01 >)
+# ([13] <5.358e-01 4.642e-01 >)
+# ([14] <6.285e-01 3.715e-01 >)
+# ([15] <1.359e-01 8.641e-01 >)
+LCBP_FULLCAV_NONE                         1.318e-02   2.644e-03   N/A         1.000e+00   N/A         
+# ([0] <3.859e-01 6.141e-01 >)
+# ([1] <5.569e-01 4.431e-01 >)
+# ([2] <4.719e-01 5.281e-01 >)
+# ([3] <5.491e-01 4.509e-01 >)
+# ([4] <6.629e-01 3.371e-01 >)
+# ([5] <2.119e-01 7.881e-01 >)
+# ([6] <8.245e-01 1.755e-01 >)
+# ([7] <2.313e-01 7.687e-01 >)
+# ([8] <2.191e-01 7.809e-01 >)
+# ([9] <2.058e-01 7.942e-01 >)
+# ([10] <7.698e-01 2.302e-01 >)
+# ([11] <1.207e-01 8.793e-01 >)
+# ([12] <4.179e-01 5.821e-01 >)
+# ([13] <5.350e-01 4.650e-01 >)
+# ([14] <6.290e-01 3.710e-01 >)
+# ([15] <1.364e-01 8.636e-01 >)
+LCBP_FULLCAVin_NONE                       1.318e-02   2.644e-03   N/A         1.000e+00   N/A         
+# ([0] <3.859e-01 6.141e-01 >)
+# ([1] <5.569e-01 4.431e-01 >)
+# ([2] <4.719e-01 5.281e-01 >)
+# ([3] <5.491e-01 4.509e-01 >)
+# ([4] <6.629e-01 3.371e-01 >)
+# ([5] <2.119e-01 7.881e-01 >)
+# ([6] <8.245e-01 1.755e-01 >)
+# ([7] <2.313e-01 7.687e-01 >)
+# ([8] <2.191e-01 7.809e-01 >)
+# ([9] <2.058e-01 7.942e-01 >)
+# ([10] <7.698e-01 2.302e-01 >)
+# ([11] <1.207e-01 8.793e-01 >)
+# ([12] <4.179e-01 5.821e-01 >)
+# ([13] <5.350e-01 4.650e-01 >)
+# ([14] <6.290e-01 3.710e-01 >)
+# ([15] <1.364e-01 8.636e-01 >)
+LCBP_PAIRCAV_SEQFIX                       1.564e-02   5.284e-03   N/A         1.000e-09   N/A         
+# ([0] <3.872e-01 6.128e-01 >)
+# ([1] <5.540e-01 4.460e-01 >)
+# ([2] <4.596e-01 5.404e-01 >)
+# ([3] <5.460e-01 4.540e-01 >)
+# ([4] <6.601e-01 3.399e-01 >)
+# ([5] <2.050e-01 7.950e-01 >)
+# ([6] <8.200e-01 1.800e-01 >)
+# ([7] <2.314e-01 7.686e-01 >)
+# ([8] <2.327e-01 7.673e-01 >)
+# ([9] <2.095e-01 7.905e-01 >)
+# ([10] <7.621e-01 2.379e-01 >)
+# ([11] <1.283e-01 8.717e-01 >)
+# ([12] <4.367e-01 5.633e-01 >)
+# ([13] <5.282e-01 4.718e-01 >)
+# ([14] <6.240e-01 3.760e-01 >)
+# ([15] <1.409e-01 8.591e-01 >)
+LCBP_PAIRCAVin_SEQFIX                     1.564e-02   5.284e-03   N/A         1.000e-09   N/A         
+# ([0] <3.872e-01 6.128e-01 >)
+# ([1] <5.540e-01 4.460e-01 >)
+# ([2] <4.596e-01 5.404e-01 >)
+# ([3] <5.460e-01 4.540e-01 >)
+# ([4] <6.601e-01 3.399e-01 >)
+# ([5] <2.050e-01 7.950e-01 >)
+# ([6] <8.200e-01 1.800e-01 >)
+# ([7] <2.314e-01 7.686e-01 >)
+# ([8] <2.327e-01 7.673e-01 >)
+# ([9] <2.095e-01 7.905e-01 >)
+# ([10] <7.621e-01 2.379e-01 >)
+# ([11] <1.283e-01 8.717e-01 >)
+# ([12] <4.367e-01 5.633e-01 >)
+# ([13] <5.282e-01 4.718e-01 >)
+# ([14] <6.240e-01 3.760e-01 >)
+# ([15] <1.409e-01 8.591e-01 >)
+LCBP_PAIRCAV_SEQRND                       1.564e-02   5.284e-03   N/A         1.000e-09   N/A         
+# ([0] <3.872e-01 6.128e-01 >)
+# ([1] <5.540e-01 4.460e-01 >)
+# ([2] <4.596e-01 5.404e-01 >)
+# ([3] <5.460e-01 4.540e-01 >)
+# ([4] <6.601e-01 3.399e-01 >)
+# ([5] <2.050e-01 7.950e-01 >)
+# ([6] <8.200e-01 1.800e-01 >)
+# ([7] <2.314e-01 7.686e-01 >)
+# ([8] <2.327e-01 7.673e-01 >)
+# ([9] <2.095e-01 7.905e-01 >)
+# ([10] <7.621e-01 2.379e-01 >)
+# ([11] <1.283e-01 8.717e-01 >)
+# ([12] <4.367e-01 5.633e-01 >)
+# ([13] <5.282e-01 4.718e-01 >)
+# ([14] <6.240e-01 3.760e-01 >)
+# ([15] <1.409e-01 8.591e-01 >)
+LCBP_PAIRCAVin_SEQRND                     1.564e-02   5.284e-03   N/A         1.000e-09   N/A         
+# ([0] <3.872e-01 6.128e-01 >)
+# ([1] <5.540e-01 4.460e-01 >)
+# ([2] <4.596e-01 5.404e-01 >)
+# ([3] <5.460e-01 4.540e-01 >)
+# ([4] <6.601e-01 3.399e-01 >)
+# ([5] <2.050e-01 7.950e-01 >)
+# ([6] <8.200e-01 1.800e-01 >)
+# ([7] <2.314e-01 7.686e-01 >)
+# ([8] <2.327e-01 7.673e-01 >)
+# ([9] <2.095e-01 7.905e-01 >)
+# ([10] <7.621e-01 2.379e-01 >)
+# ([11] <1.283e-01 8.717e-01 >)
+# ([12] <4.367e-01 5.633e-01 >)
+# ([13] <5.282e-01 4.718e-01 >)
+# ([14] <6.240e-01 3.760e-01 >)
+# ([15] <1.409e-01 8.591e-01 >)
+LCBP_PAIRCAV_NONE                         1.869e-01   6.816e-02   N/A         1.000e+00   N/A         
+# ([0] <3.558e-01 6.442e-01 >)
+# ([1] <5.320e-01 4.680e-01 >)
+# ([2] <4.581e-01 5.419e-01 >)
+# ([3] <5.768e-01 4.232e-01 >)
+# ([4] <7.724e-01 2.276e-01 >)
+# ([5] <2.314e-01 7.686e-01 >)
+# ([6] <9.366e-01 6.343e-02 >)
+# ([7] <1.862e-01 8.138e-01 >)
+# ([8] <1.145e-01 8.855e-01 >)
+# ([9] <1.196e-01 8.804e-01 >)
+# ([10] <8.803e-01 1.197e-01 >)
+# ([11] <5.173e-02 9.483e-01 >)
+# ([12] <4.454e-01 5.546e-01 >)
+# ([13] <6.323e-01 3.677e-01 >)
+# ([14] <8.161e-01 1.839e-01 >)
+# ([15] <1.676e-01 8.324e-01 >)
+LCBP_PAIRCAVin_NONE                       1.869e-01   6.816e-02   N/A         1.000e+00   N/A         
+# ([0] <3.558e-01 6.442e-01 >)
+# ([1] <5.320e-01 4.680e-01 >)
+# ([2] <4.581e-01 5.419e-01 >)
+# ([3] <5.768e-01 4.232e-01 >)
+# ([4] <7.724e-01 2.276e-01 >)
+# ([5] <2.314e-01 7.686e-01 >)
+# ([6] <9.366e-01 6.343e-02 >)
+# ([7] <1.862e-01 8.138e-01 >)
+# ([8] <1.145e-01 8.855e-01 >)
+# ([9] <1.196e-01 8.804e-01 >)
+# ([10] <8.803e-01 1.197e-01 >)
+# ([11] <5.173e-02 9.483e-01 >)
+# ([12] <4.454e-01 5.546e-01 >)
+# ([13] <6.323e-01 3.677e-01 >)
+# ([14] <8.161e-01 1.839e-01 >)
+# ([15] <1.676e-01 8.324e-01 >)
+LCBP_PAIR2CAV_SEQFIX                      1.535e-02   4.445e-03   N/A         1.000e-09   N/A         
+# ([0] <3.844e-01 6.156e-01 >)
+# ([1] <5.557e-01 4.443e-01 >)
+# ([2] <4.588e-01 5.412e-01 >)
+# ([3] <5.461e-01 4.539e-01 >)
+# ([4] <6.648e-01 3.352e-01 >)
+# ([5] <2.057e-01 7.943e-01 >)
+# ([6] <8.205e-01 1.795e-01 >)
+# ([7] <2.312e-01 7.688e-01 >)
+# ([8] <2.282e-01 7.718e-01 >)
+# ([9] <2.029e-01 7.971e-01 >)
+# ([10] <7.643e-01 2.357e-01 >)
+# ([11] <1.286e-01 8.714e-01 >)
+# ([12] <4.368e-01 5.632e-01 >)
+# ([13] <5.280e-01 4.720e-01 >)
+# ([14] <6.250e-01 3.750e-01 >)
+# ([15] <1.411e-01 8.589e-01 >)
+LCBP_PAIR2CAVin_SEQFIX                    1.535e-02   4.445e-03   N/A         1.000e-09   N/A         
+# ([0] <3.844e-01 6.156e-01 >)
+# ([1] <5.557e-01 4.443e-01 >)
+# ([2] <4.588e-01 5.412e-01 >)
+# ([3] <5.461e-01 4.539e-01 >)
+# ([4] <6.648e-01 3.352e-01 >)
+# ([5] <2.057e-01 7.943e-01 >)
+# ([6] <8.205e-01 1.795e-01 >)
+# ([7] <2.312e-01 7.688e-01 >)
+# ([8] <2.282e-01 7.718e-01 >)
+# ([9] <2.029e-01 7.971e-01 >)
+# ([10] <7.643e-01 2.357e-01 >)
+# ([11] <1.286e-01 8.714e-01 >)
+# ([12] <4.368e-01 5.632e-01 >)
+# ([13] <5.280e-01 4.720e-01 >)
+# ([14] <6.250e-01 3.750e-01 >)
+# ([15] <1.411e-01 8.589e-01 >)
+LCBP_PAIR2CAV_SEQRND                      1.535e-02   4.445e-03   N/A         1.000e-09   N/A         
+# ([0] <3.844e-01 6.156e-01 >)
+# ([1] <5.557e-01 4.443e-01 >)
+# ([2] <4.588e-01 5.412e-01 >)
+# ([3] <5.461e-01 4.539e-01 >)
+# ([4] <6.648e-01 3.352e-01 >)
+# ([5] <2.057e-01 7.943e-01 >)
+# ([6] <8.205e-01 1.795e-01 >)
+# ([7] <2.312e-01 7.688e-01 >)
+# ([8] <2.282e-01 7.718e-01 >)
+# ([9] <2.029e-01 7.971e-01 >)
+# ([10] <7.643e-01 2.357e-01 >)
+# ([11] <1.286e-01 8.714e-01 >)
+# ([12] <4.368e-01 5.632e-01 >)
+# ([13] <5.280e-01 4.720e-01 >)
+# ([14] <6.250e-01 3.750e-01 >)
+# ([15] <1.411e-01 8.589e-01 >)
+LCBP_PAIR2CAVin_SEQRND                    1.535e-02   4.445e-03   N/A         1.000e-09   N/A         
+# ([0] <3.844e-01 6.156e-01 >)
+# ([1] <5.557e-01 4.443e-01 >)
+# ([2] <4.588e-01 5.412e-01 >)
+# ([3] <5.461e-01 4.539e-01 >)
+# ([4] <6.648e-01 3.352e-01 >)
+# ([5] <2.057e-01 7.943e-01 >)
+# ([6] <8.205e-01 1.795e-01 >)
+# ([7] <2.312e-01 7.688e-01 >)
+# ([8] <2.282e-01 7.718e-01 >)
+# ([9] <2.029e-01 7.971e-01 >)
+# ([10] <7.643e-01 2.357e-01 >)
+# ([11] <1.286e-01 8.714e-01 >)
+# ([12] <4.368e-01 5.632e-01 >)
+# ([13] <5.280e-01 4.720e-01 >)
+# ([14] <6.250e-01 3.750e-01 >)
+# ([15] <1.411e-01 8.589e-01 >)
+LCBP_PAIR2CAV_NONE                        1.894e-01   7.196e-02   N/A         1.000e+00   N/A         
+# ([0] <3.525e-01 6.475e-01 >)
+# ([1] <5.395e-01 4.605e-01 >)
+# ([2] <4.567e-01 5.433e-01 >)
+# ([3] <5.786e-01 4.214e-01 >)
+# ([4] <7.797e-01 2.203e-01 >)
+# ([5] <2.350e-01 7.650e-01 >)
+# ([6] <9.358e-01 6.415e-02 >)
+# ([7] <1.860e-01 8.140e-01 >)
+# ([8] <1.133e-01 8.867e-01 >)
+# ([9] <1.167e-01 8.833e-01 >)
+# ([10] <8.886e-01 1.114e-01 >)
+# ([11] <4.668e-02 9.533e-01 >)
+# ([12] <4.484e-01 5.516e-01 >)
+# ([13] <6.444e-01 3.556e-01 >)
+# ([14] <8.185e-01 1.815e-01 >)
+# ([15] <1.841e-01 8.159e-01 >)
+LCBP_PAIR2CAVin_NONE                      1.894e-01   7.196e-02   N/A         1.000e+00   N/A         
+# ([0] <3.525e-01 6.475e-01 >)
+# ([1] <5.395e-01 4.605e-01 >)
+# ([2] <4.567e-01 5.433e-01 >)
+# ([3] <5.786e-01 4.214e-01 >)
+# ([4] <7.797e-01 2.203e-01 >)
+# ([5] <2.350e-01 7.650e-01 >)
+# ([6] <9.358e-01 6.415e-02 >)
+# ([7] <1.860e-01 8.140e-01 >)
+# ([8] <1.133e-01 8.867e-01 >)
+# ([9] <1.167e-01 8.833e-01 >)
+# ([10] <8.886e-01 1.114e-01 >)
+# ([11] <4.668e-02 9.533e-01 >)
+# ([12] <4.484e-01 5.516e-01 >)
+# ([13] <6.444e-01 3.556e-01 >)
+# ([14] <8.185e-01 1.815e-01 >)
+# ([15] <1.841e-01 8.159e-01 >)
+LCBP_UNICAV_SEQFIX                        9.483e-02   3.078e-02   N/A         1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
+LCBP_UNICAV_SEQRND                        9.483e-02   3.078e-02   N/A         1.000e-09   N/A         
+# ([0] <4.233e-01 5.767e-01 >)
+# ([1] <5.422e-01 4.578e-01 >)
+# ([2] <4.662e-01 5.338e-01 >)
+# ([3] <5.424e-01 4.576e-01 >)
+# ([4] <6.042e-01 3.958e-01 >)
+# ([5] <1.845e-01 8.155e-01 >)
+# ([6] <8.203e-01 1.797e-01 >)
+# ([7] <2.292e-01 7.708e-01 >)
+# ([8] <3.119e-01 6.881e-01 >)
+# ([9] <2.975e-01 7.025e-01 >)
+# ([10] <7.268e-01 2.732e-01 >)
+# ([11] <1.485e-01 8.515e-01 >)
+# ([12] <4.512e-01 5.488e-01 >)
+# ([13] <5.266e-01 4.734e-01 >)
+# ([14] <6.033e-01 3.967e-01 >)
+# ([15] <1.558e-01 8.442e-01 >)
index c0c7cc2..b84b1da 100644 (file)
@@ -33,8 +33,9 @@ using namespace std;
 int main( int argc, char *argv[] ) {
     if( argc != 3 ) {
         cout << "Usage: " << argv[0] << " <in.fg> <out.dot>" << endl << endl;
 int main( int argc, char *argv[] ) {
     if( argc != 3 ) {
         cout << "Usage: " << argv[0] << " <in.fg> <out.dot>" << endl << endl;
-        cout << "Converts a .fg (FactorGraph) file to a .dot (GraphViz) file for visualization." << endl;
-        cout << "The .dot file can be converted to .ps (PostScript by 'neato -T ps out.dot > out.ps'" << endl;
+        cout << "Converts a .fg (FactorGraph) file to a .dot (GraphViz) file for" << endl;
+        cout << "visualization. The .dot file can be converted to .ps (PostScript) by" << endl;
+        cout << "'neato -T ps out.dot > out.ps' or by 'dot -T ps out.dot > out.ps'" << endl << endl;
         return 1;
     } else {
         // Read factorgraph
         return 1;
     } else {
         // Read factorgraph
@@ -59,4 +60,3 @@ int main( int argc, char *argv[] ) {
         return 0;
     }
 }
         return 0;
     }
 }
-
index 78bb85e..f13e84b 100644 (file)
 #include <iostream>
 #include <cstdlib>
 #include <dai/factorgraph.h>
 #include <iostream>
 #include <cstdlib>
 #include <dai/factorgraph.h>
+#include <dai/jtree.h>
 
 
 
 
-using namespace dai;
 using namespace std;
 using namespace std;
+using namespace dai;
+
+
+void findLoopClusters( const FactorGraph & fg, std::set<VarSet> &allcl, VarSet newcl, const Var & root, size_t length, VarSet vars ) {
+    for( VarSet::const_iterator in = vars.begin(); in != vars.end(); in++ ) {
+        VarSet ind = fg.delta( *in );
+        if( (newcl.size()) >= 2 && ind.contains( root ) ) {
+            allcl.insert( newcl | *in );
+        }
+        else if( length > 1 )
+            findLoopClusters( fg, allcl, newcl | *in, root, length - 1, ind / newcl );
+    }
+}
+
+
+size_t countLoops( const FactorGraph & fg, size_t loopdepth ) {
+    set<VarSet> loops;
+    for( vector<Var>::const_iterator i0 = fg.vars.begin(); i0 != fg.vars.end(); i0++ ) {
+        VarSet i0d = fg.delta(*i0);
+        if( loopdepth > 1 )
+            findLoopClusters( fg, loops, *i0, *i0, loopdepth - 1, i0d );
+    }
+    return loops.size();
+}
+
+
+bool hasShortLoops( const std::vector<Factor> &P ) {
+    bool found = false;
+    vector<Factor>::const_iterator I, J;
+    for( I = P.begin(); I != P.end(); I++ ) {
+        J = I;
+        J++;
+        for( ; J != P.end(); J++ )
+            if( (I->vars() & J->vars()).size() >= 2 ) {
+                found = true;
+                break;
+            }
+        if( found )
+            break;
+    }
+    return found;
+}
+
+
+bool hasNegatives( const std::vector<Factor> &P ) {
+    bool found = false;
+    for( size_t I = 0; I < P.size(); I++ )
+        if( P[I].hasNegatives() ) {
+            found = true;
+            break;
+        }
+    return found;
+}
 
 
 int main( int argc, char *argv[] ) {
 
 
 int main( int argc, char *argv[] ) {
-    if( argc != 2 ) {
-        cout << "Usage: " << argv[0] << " <in.fg>" << endl << endl;
+    if( argc != 3 ) {
+        cout << "Usage: " << argv[0] << " <in.fg> <tw>" << endl << endl;
         cout << "Reports some characteristics of the .fg network." << endl;
         cout << "Reports some characteristics of the .fg network." << endl;
+        cout << "Also calculates treewidth (which may take some time) unless <tw> == 0." << endl;
         return 1;
     } else {
         // Read factorgraph
         FactorGraph fg;
         char *infile = argv[1];
         return 1;
     } else {
         // Read factorgraph
         FactorGraph fg;
         char *infile = argv[1];
-
+        int calc_tw = atoi(argv[2]);
         fg.ReadFromFile( infile );
         fg.ReadFromFile( infile );
+
         cout << "Number of variables:   " << fg.nrVars() << endl;
         cout << "Number of factors:     " << fg.nrFactors() << endl;
         cout << "Connected:             " << fg.isConnected() << endl;
         cout << "Number of variables:   " << fg.nrVars() << endl;
         cout << "Number of factors:     " << fg.nrFactors() << endl;
         cout << "Connected:             " << fg.isConnected() << endl;
+        cout << "Tree:                  " << fg.isTree() << endl;
+        cout << "Has short loops:       " << hasShortLoops(fg.factors()) << endl;
+        cout << "Has negatives:         " << hasNegatives(fg.factors()) << endl;
         cout << "Binary variables?      " << fg.isBinary() << endl;
         cout << "Pairwise interactions? " << fg.isPairwise() << endl;
         cout << "Binary variables?      " << fg.isBinary() << endl;
         cout << "Pairwise interactions? " << fg.isPairwise() << endl;
-//          cout << "Treewidth:           " << endl;
+        if( calc_tw ) {
+            std::pair<size_t,size_t> tw = treewidth(fg);
+            cout << "Treewidth:           " << tw.first << endl;
+            cout << "Largest cluster for JTree has " << tw.second << " states " << endl;
+        }
+        double stsp = 1.0;
+        for( size_t i = 0; i < fg.nrVars(); i++ )
+            stsp *= fg.var(i).states();
+        cout << "Total state space:   " << stsp << endl;
 
         double cavsum_lcbp = 0.0;
         double cavsum_lcbp2 = 0.0;
         size_t max_Delta_size = 0;
 
         double cavsum_lcbp = 0.0;
         double cavsum_lcbp2 = 0.0;
         size_t max_Delta_size = 0;
+        map<size_t,size_t> cavsizes;
         for( size_t i = 0; i < fg.nrVars(); i++ ) {
             VarSet di = fg.delta(i);
         for( size_t i = 0; i < fg.nrVars(); i++ ) {
             VarSet di = fg.delta(i);
+            if( cavsizes.count(di.size()) )
+                cavsizes[di.size()]++;
+            else
+                cavsizes[di.size()] = 1;
             size_t Ds = fg.Delta(i).states();
             if( Ds > max_Delta_size )
                 max_Delta_size = Ds;
             size_t Ds = fg.Delta(i).states();
             if( Ds > max_Delta_size )
                 max_Delta_size = Ds;
@@ -61,8 +132,28 @@ int main( int argc, char *argv[] ) {
         cout << "Maximum pancake has " << max_Delta_size << " states" << endl;
         cout << "LCBP with full cavities needs " << cavsum_lcbp << " BP runs" << endl;
         cout << "LCBP with only pairinteractions needs " << cavsum_lcbp2 << " BP runs" << endl;
         cout << "Maximum pancake has " << max_Delta_size << " states" << endl;
         cout << "LCBP with full cavities needs " << cavsum_lcbp << " BP runs" << endl;
         cout << "LCBP with only pairinteractions needs " << cavsum_lcbp2 << " BP runs" << endl;
+        cout << "Cavity sizes: ";
+        for( map<size_t,size_t>::const_iterator it = cavsizes.begin(); it != cavsizes.end(); it++ ) 
+            cout << it->first << "(" << it->second << ") ";
+        cout << endl;
+
+        cout << "Type: " << (fg.isPairwise() ? "pairwise" : "higher order") << " interactions, " << (fg.isBinary() ? "binary" : "nonbinary") << " variables" << endl;
+
+        if( fg.isPairwise() ) {
+            bool girth_reached = false;
+            size_t loopdepth;
+            for( loopdepth = 2; loopdepth <= fg.nrVars() && !girth_reached; loopdepth++ ) {
+                size_t nr_loops = countLoops( fg, loopdepth );
+                cout << "Loops up to " << loopdepth << " variables: " << nr_loops << endl;
+                if( nr_loops > 0 )
+                    girth_reached = true;
+            }
+            if( girth_reached )
+                cout << "Girth: " << loopdepth-1 << endl;
+            else
+                cout << "Girth: infinity" << endl;
+        }
 
         return 0;
     }
 }
 
         return 0;
     }
 }
-