index 0fabbfb..79f9daa 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
@@ -29,6 +30,7 @@ namespace dai {
using namespace std;

+/// Calculates the marginal of obj on ns by clamping all variables in ns and calculating logZ for each joined state.
Factor calcMarginal( const InfAlg & obj, const VarSet & ns, bool reInit ) {
Factor Pns (ns);

@@ -73,6 +75,7 @@ Factor calcMarginal( const InfAlg & obj, const VarSet & ns, bool reInit ) {
}

+/// Calculates beliefs of all pairs in ns (by clamping nodes in ns and calculating logZ and the beliefs for each state).
vector<Factor> calcPairBeliefs( const InfAlg & obj, const VarSet& ns, bool reInit ) {
// convert ns to vector<VarSet>
size_t N = ns.size();
@@ -88,7 +91,7 @@ vector<Factor> calcPairBeliefs( const InfAlg & obj, const VarSet& ns, bool reIni
if( j == k )
pairbeliefs.push_back( Factor() );
else
-                pairbeliefs.push_back( Factor( vns[j] | vns[k] ) );
+                pairbeliefs.push_back( Factor( VarSet(vns[j], vns[k]) ) );

InfAlg *clamped = obj.clone();
if( !reInit )
@@ -143,6 +146,7 @@ vector<Factor> calcPairBeliefs( const InfAlg & obj, const VarSet& ns, bool reIni
}

+/// Calculates beliefs of all pairs in ns (by clamping pairs in ns and calculating logZ for each joined state).
Factor calcMarginal2ndO( const InfAlg & obj, const VarSet& ns, bool reInit ) {
// returns a a probability distribution whose 1st order interactions
// are unspecified, whose 2nd order interactions approximate those of
@@ -158,6 +162,7 @@ Factor calcMarginal2ndO( const InfAlg & obj, const VarSet& ns, bool reInit ) {
}

+/// Calculates 2nd order interactions of the marginal of obj on ns.
vector<Factor> calcPairBeliefsNew( const InfAlg & obj, const VarSet& ns, bool reInit ) {
vector<Factor> result;
result.reserve( ns.size() * (ns.size() - 1) / 2 );
@@ -171,7 +176,7 @@ vector<Factor> calcPairBeliefsNew( const InfAlg & obj, const VarSet& ns, bool re
for( long j = 0; j < (long)ns.size() - 1; j++, nj++ ) {
size_t k = 0;
for( VarSet::const_iterator nk = nj; (++nk) != ns.end(); k++ ) {
-            Factor pairbelief( *nj | *nk );
+            Factor pairbelief( VarSet(*nj, *nk) );

// clamp Vars j and k to their possible values
for( size_t j_val = 0; j_val < nj->states(); j_val++ )