Implemented various heuristics for choosing a variable elimination sequence in JTree
[libdai.git] / src / bp_dual.cpp
index 8e67da9..d282d2d 100644 (file)
@@ -1,21 +1,11 @@
-/*  Copyright (C) 2009  Frederik Eaton [frederik at ofb dot net]
-
-    This file is part of libDAI.
-
-    libDAI is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    libDAI is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with libDAI; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+/*  This file is part of libDAI - http://www.libdai.org/
+ *
+ *  libDAI is licensed under the terms of the GNU General Public License version
+ *  2, or (at your option) any later version. libDAI is distributed without any
+ *  warranty. See the file COPYING for more details.
+ *
+ *  Copyright (C) 2009  Frederik Eaton [frederik at ofb dot net]
+ */
 
 
 #include <iostream>
@@ -102,14 +92,14 @@ void BP_dual::calcNewM( size_t i, size_t _I ) {
         if( j != i ) { // for all j in I \ i
             Prob &n = msgN(j,j.dual);
             IndexFor ind( fg().var(j), fg().factor(I).vars() );
-            for( size_t x = 0; ind >= 0; x++, ++ind )
+            for( size_t x = 0; ind.valid(); x++, ++ind )
                 prod[x] *= n[ind];
         }
     // Marginalize onto i
     Prob marg( fg().var(i).states(), 0.0 );
     // ind is the precalculated Index(i,I) i.e. to x_I == k corresponds x_i == ind[k]
     IndexFor ind( fg().var(i), fg().factor(I).vars() );
-    for( size_t x = 0; ind >= 0; x++, ++ind )
+    for( size_t x = 0; ind.valid(); x++, ++ind )
         marg[ind] += prod[x];
 
     _msgs.Zm[i][_I] = marg.normalize();
@@ -151,7 +141,7 @@ void BP_dual::calcBeliefF( size_t I ) {
     foreach( const Neighbor &j, fg().nbF(I) ) {
         IndexFor ind( fg().var(j), fg().factor(I).vars() );
         Prob n( msgN(j,j.dual) );
-        for( size_t x = 0; ind >= 0; x++, ++ind )
+        for( size_t x = 0; ind.valid(); x++, ++ind )
             prod[x] *= n[ind];
     }
     _beliefs.Zb2[I] = prod.normalize();