Improved documentation of bipgraph.h and added example_bipgraph.cpp
[libdai.git] / src / lc.cpp
index 3aae934..070d5eb 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
@@ -24,7 +25,6 @@
 #include <map>
 #include <set>
 #include <dai/lc.h>
-#include <dai/diffs.h>
 #include <dai/util.h>
 #include <dai/alldai.h>
 
@@ -135,7 +135,7 @@ double LC::CalcCavityDist (size_t i, const std::string &name, const PropertySet
     double maxdiff = 0;
 
     if( props.verbose >= 2 )
-        cout << "Initing cavity " << var(i) << "(" << delta(i).size() << " vars, " << nrStates(delta(i)) << " states)" << endl;
+        cout << "Initing cavity " << var(i) << "(" << delta(i).size() << " vars, " << delta(i).nrStates() << " states)" << endl;
 
     if( props.cavity == Properties::CavityType::UNIFORM )
         Bi = Factor(delta(i));
@@ -183,7 +183,6 @@ double LC::InitCavityDists( const std::string &name, const PropertySet &opts ) {
         if( md > maxdiff )
             maxdiff = md;
     }
-    init();
 
     if( props.verbose >= 1 ) {
         cout << Name << "::InitCavityDists used " << toc() - tic << " seconds." << endl;
@@ -204,7 +203,6 @@ long LC::SetCavityDists( std::vector<Factor> &Q ) {
         } else
             _cavitydists[i] = Q[i];
     }
-    init();
     return 0;
 }
 
@@ -216,19 +214,6 @@ void LC::init() {
                 _phis[i][I.iter].randomize();
             else
                 _phis[i][I.iter].fill(1.0);
-    for( size_t i = 0; i < nrVars(); i++ ) {
-        _pancakes[i] = _cavitydists[i];
-        
-        foreach( const Neighbor &I, nbV(i) ) {
-            _pancakes[i] *= factor(I);
-            if( props.updates == Properties::UpdateType::SEQRND )
-              _pancakes[i] *= _phis[i][I.iter];
-        }
-        
-        _pancakes[i].normalize();
-
-        CalcBelief(i);
-    }
 }
 
 
@@ -276,6 +261,20 @@ double LC::run() {
     if( md > _maxdiff )
         _maxdiff = md;
 
+    for( size_t i = 0; i < nrVars(); i++ ) {
+        _pancakes[i] = _cavitydists[i];
+        
+        foreach( const Neighbor &I, nbV(i) ) {
+            _pancakes[i] *= factor(I);
+            if( props.updates == Properties::UpdateType::SEQRND )
+              _pancakes[i] *= _phis[i][I.iter];
+        }
+        
+        _pancakes[i].normalize();
+
+        CalcBelief(i);
+    }
+
     vector<Factor> old_beliefs;
     for(size_t i=0; i < nrVars(); i++ )
         old_beliefs.push_back(belief(i));