Improved documentation of include/dai/cbp.h
[libdai.git] / utils / fginfo.cpp
index f13e84b..612b52c 100644 (file)
@@ -1,6 +1,7 @@
-/*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
-    Radboud University Nijmegen, The Netherlands
-    
+/*  Copyright (C) 2006-2008  Joris Mooij  [joris dot mooij at tuebingen dot mpg dot de]
+    Radboud University Nijmegen, The Netherlands /
+    Max Planck Institute for Biological Cybernetics, Germany
+
     This file is part of libDAI.
 
     libDAI is free software; you can redistribute it and/or modify
@@ -43,7 +44,7 @@ void findLoopClusters( const FactorGraph & fg, std::set<VarSet> &allcl, VarSet n
 
 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++ ) {
+    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 );
@@ -107,13 +108,13 @@ int main( int argc, char *argv[] ) {
             cout << "Treewidth:           " << tw.first << endl;
             cout << "Largest cluster for JTree has " << tw.second << " states " << endl;
         }
-        double stsp = 1.0;
+        long 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;
+        long double cavsum_lcbp = 0.0;
+        long 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++ ) {
@@ -122,10 +123,10 @@ int main( int argc, char *argv[] ) {
                 cavsizes[di.size()]++;
             else
                 cavsizes[di.size()] = 1;
-            size_t Ds = fg.Delta(i).states();
+            size_t Ds = fg.Delta(i).nrStates();
             if( Ds > max_Delta_size )
                 max_Delta_size = Ds;
-            cavsum_lcbp += di.states();
+            cavsum_lcbp += di.nrStates();
             for( VarSet::const_iterator j = di.begin(); j != di.end(); j++ )
                 cavsum_lcbp2 += j->states();
         }
@@ -133,7 +134,7 @@ int main( int argc, char *argv[] ) {
         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++ ) 
+        for( map<size_t,size_t>::const_iterator it = cavsizes.begin(); it != cavsizes.end(); it++ )
             cout << it->first << "(" << it->second << ") ";
         cout << endl;
 
@@ -154,6 +155,19 @@ int main( int argc, char *argv[] ) {
                 cout << "Girth: infinity" << endl;
         }
 
+        map<size_t,size_t> facsizes;
+        for( size_t I = 0; I < fg.nrFactors(); I++ ) {
+            size_t Isize = fg.factor(I).vars().size();
+            if( facsizes.count( Isize ) )
+                facsizes[Isize]++;
+            else
+                facsizes[Isize] = 1;
+        }
+        cout << "Factor sizes: ";
+        for( map<size_t,size_t>::const_iterator it = facsizes.begin(); it != facsizes.end(); it++ )
+            cout << it->first << "(" << it->second << ") ";
+        cout << endl;
+
         return 0;
     }
 }