index f5199ef..3cff7eb 100644 (file)
@@ -1,12 +1,8 @@
/*  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) 2006-2011, The libDAI authors. All rights reserved.
*
- *  Copyright (C) 2006-2009  Joris Mooij  [joris dot mooij at libdai dot org]
- *  Copyright (C) 2008       Christian Wojek
+ *  Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
*/

@@ -207,8 +203,8 @@ std::istream& operator>> ( std::istream& is, FactorGraph &fg ) {
VarSet FactorGraph::Delta( size_t i ) const {
// calculate Markov Blanket
VarSet Del;
-    foreach( const Neighbor &I, nbV(i) ) // for all neighboring factors I of i
-        foreach( const Neighbor &j, nbF(I) ) // for all neighboring variables j of I
+    bforeach( const Neighbor &I, nbV(i) ) // for all neighboring factors I of i
+        bforeach( const Neighbor &j, nbF(I) ) // for all neighboring variables j of I
Del |= var(j);

return Del;
@@ -223,15 +219,34 @@ VarSet FactorGraph::Delta( const VarSet &ns ) const {
}

+SmallSet<size_t> FactorGraph::Deltai( size_t i ) const {
+    // calculate Markov Blanket
+    SmallSet<size_t> Del;
+    bforeach( const Neighbor &I, nbV(i) ) // for all neighboring factors I of i
+        bforeach( const Neighbor &j, nbF(I) ) // for all neighboring variables j of I
+            Del |= j;
+
+    return Del;
+}
+
+
void FactorGraph::makeCavity( size_t i, bool backup ) {
// fills all Factors that include var(i) with ones
map<size_t,Factor> newFacs;
-    foreach( const Neighbor &I, nbV(i) ) // for all neighboring factors I of i
+    bforeach( const Neighbor &I, nbV(i) ) // for all neighboring factors I of i
newFacs[I] = Factor( factor(I).vars(), (Real)1 );
setFactors( newFacs, backup );
}

+void FactorGraph::makeRegionCavity( std::vector<size_t> facInds, bool backup ) {
+    map<size_t,Factor> newFacs;
+    for( size_t I = 0; I < facInds.size(); I++ )
+       newFacs[facInds[I]] = Factor(factor(facInds[I]).vars(), (Real)1);
+    setFactors( newFacs, backup );
+}
+
+
void FactorGraph::ReadFromFile( const char *filename ) {
ifstream infile;
infile.open( filename );
@@ -264,7 +279,7 @@ void FactorGraph::printDot( std::ostream &os ) const {
for( size_t I = 0; I < nrFactors(); I++ )
os << "\tf" << I << ";" << endl;
for( size_t i = 0; i < nrVars(); i++ )
-        foreach( const Neighbor &I, nbV(i) )  // for all neighboring factors I of i
+        bforeach( const Neighbor &I, nbV(i) )  // for all neighboring factors I of i
os << "\tv" << var(i).label() << " -- f" << I << ";" << endl;
os << "}" << endl;
}
@@ -273,8 +288,8 @@ void FactorGraph::printDot( std::ostream &os ) const {
GraphAL FactorGraph::MarkovGraph() const {
GraphAL G( nrVars() );
for( size_t i = 0; i < nrVars(); i++ )
-        foreach( const Neighbor &I, nbV(i) )
-            foreach( const Neighbor &j, nbF(I) )
+        bforeach( const Neighbor &I, nbV(i) )
+            bforeach( const Neighbor &j, nbF(I) )
if( i < j )
return G;
@@ -292,8 +307,8 @@ bool FactorGraph::isMaximal( size_t I ) const {
return false;
return true;
} else {
-        foreach( const Neighbor& i, nbF(I) ) {
-            foreach( const Neighbor& J, nbV(i) ) {
+        bforeach( const Neighbor& i, nbF(I) ) {
+            bforeach( const Neighbor& J, nbV(i) ) {
if( J != I )
if( (factor(J).vars() >> I_vars) && (factor(J).vars().size() != I_size) )
return false;
@@ -315,8 +330,8 @@ size_t FactorGraph::maximalFactor( size_t I ) const {
return maximalFactor( J );
return I;
} else {
-        foreach( const Neighbor& i, nbF(I) ) {
-            foreach( const Neighbor& J, nbV(i) ) {
+        bforeach( const Neighbor& i, nbF(I) ) {
+            bforeach( const Neighbor& J, nbV(i) ) {
if( J != I )
if( (factor(J).vars() >> I_vars) && (factor(J).vars().size() != I_size) )
return maximalFactor( J );
@@ -352,7 +367,7 @@ Real FactorGraph::logScore( const std::vector<size_t>& statevec ) const {
// by summing the log factor entries of the factors that correspond to this joint configuration
Real lS = 0.0;
for( size_t I = 0; I < nrFactors(); I++ )
-        lS += dai::log( factor(I)[S(factor(I).vars())] );
+        lS += dai::log( factor(I)[BigInt_size_t(S(factor(I).vars()))] );
return lS;
}

@@ -363,7 +378,7 @@ void FactorGraph::clamp( size_t i, size_t x, bool backup ) {

map<size_t, Factor> newFacs;
-    foreach( const Neighbor &I, nbV(i) )
+    bforeach( const Neighbor &I, nbV(i) )
setFactors( newFacs, backup );

@@ -375,13 +390,13 @@ void FactorGraph::clampVar( size_t i, const vector<size_t> &is, bool backup ) {
Var n = var(i);

-    foreach( size_t i, is ) {
+    bforeach( size_t i, is ) {
DAI_ASSERT( i <= n.states() );
}

map<size_t, Factor> newFacs;
-    foreach( const Neighbor &I, nbV(i) )
+    bforeach( const Neighbor &I, nbV(i) )