Replaced some FactorGraph functionality in InfAlg by a function
authorJoris Mooij <jorism@osun.tuebingen.mpg.de>
Fri, 19 Sep 2008 10:58:32 +0000 (12:58 +0200)
committerJoris Mooij <jorism@osun.tuebingen.mpg.de>
Fri, 19 Sep 2008 10:58:32 +0000 (12:58 +0200)
that returns a reference to a FactorGraph.

Makefile.win
include/dai/daialg.h
src/lc.cpp
tests/test.cpp

index 3eecc01..8edf18d 100755 (executable)
@@ -135,7 +135,7 @@ doc : $(INC)/*.h $(SRC)/*.cpp doxygen.conf
        doxygen doxygen.conf\r
 \r
 clean :\r
-       del *.obj example.exe matlab\*.$(MEXEXT) matlab\*.obj tests\test.exe utils\fg2dot.exe utils\createfg.exe utils\remove_short_loops.exe utils\fginfo.exe $(LIB)\libdai.lib\r
+       del *.obj *.ilk *.pdb *.exe matlab\*.$(MEXEXT) matlab\*.obj tests\test.exe tests\*.pdb tests\*.ilk utils\*.exe utils\*.pdb utils\*.ilk $(LIB)\libdai.lib\r
 \r
 \r
 bipgraph.obj : $(SRC)/bipgraph.cpp $(HEADERS)\r
index 97d0dc0..32c1ece 100644 (file)
@@ -153,39 +153,18 @@ class InfAlg {
         /// Clamp variable n to value i (i.e. multiply with a Kronecker delta \f$\delta_{x_n, i}\f$)
         virtual void clamp( const Var & n, size_t i ) = 0;
 
-        /// Return all variables that interact with var(i)
-        virtual VarSet delta( size_t i ) const = 0;
-
         /// Set all factors interacting with var(i) to 1
         virtual void makeCavity( size_t i ) = 0;
 
-        /// Get index of variable n
-        virtual size_t findVar( const Var & n ) const = 0;
-
-        /// Get index of first factor involving ns
-        virtual size_t findFactor( const VarSet &ns ) const = 0;
-
-        /// Get number of variables
-        virtual size_t nrVars() const = 0;
-
-        /// Get number of factors
-        virtual size_t nrFactors() const = 0;
-
-        /// Get const reference to variable i
-        virtual const Var & var(size_t i) const = 0;
-
-        /// Get reference to variable i
-        virtual Var & var(size_t i) = 0;
-
-        /// Get const reference to factor I
-        virtual const Factor & factor( size_t I ) const = 0;
-
-        /// Get reference to factor I
-        virtual Factor & factor( size_t I ) = 0;
-
         /// Factor I has been updated
         virtual void updatedFactor( size_t I ) = 0;
 
+        /// Get reference to underlying FactorGraph
+        virtual FactorGraph &fg() = 0;
+
+        /// Get const reference to underlying FactorGraph
+        virtual const FactorGraph &fg() const = 0;
+
         /// Checks whether all necessary properties have been set
         /// and casts string-valued properties to other values if necessary
         virtual bool checkProperties() = 0;
@@ -220,38 +199,17 @@ class DAIAlg : public InfAlg, public T {
         /// Clamp variable n to value i (i.e. multiply with a Kronecker delta \f$\delta_{x_n, i}\f$) (using T::clamp)
         void clamp( const Var & n, size_t i ) { T::clamp( n, i ); }
 
-        /// Return all variables that interact with var(i) (using T::delta)
-        VarSet delta( size_t i ) const { return T::delta( i ); }
-
         /// Set all factors interacting with var(i) to 1 (using T::makeCavity)
         void makeCavity( size_t i ) { T::makeCavity( i ); }
 
-        /// Get index of variable n (using T::findVar)
-        size_t findVar( const Var & n ) const { return T::findVar(n); }
-
-        /// Get index of first factor involving ns (using T::findFactor)
-        size_t findFactor( const VarSet &ns ) const { return T::findFactor(ns); }
-
-        /// Get number of variables (using T::nrFactors)
-        size_t nrVars() const { return T::nrVars(); }
-
-        /// Get number of factors (using T::nrFactors)
-        size_t nrFactors() const { return T::nrFactors(); }
-
-        /// Get const reference to variable i (using T::var)
-        const Var & var( size_t i ) const { return T::var(i); }
-
-        /// Get reference to variable i (using T::var)
-        Var & var(size_t i) { return T::var(i); }
-
-        /// Get const reference to factor I (using T::factor)
-        const Factor & factor( size_t I ) const { return T::factor(I); }
-
-        /// Get reference to factor I (using T::factor)
-        Factor & factor( size_t I ) { return T::factor(I); }
-
         /// Factor I has been updated (using T::updatedFactor)
         void updatedFactor( size_t I ) { T::updatedFactor(I); }
+
+        /// Get reference to underlying FactorGraph
+        FactorGraph &fg() { return (FactorGraph &)(*this); }
+
+        /// Get const reference to underlying FactorGraph
+        const FactorGraph &fg() const { return (const FactorGraph &)(*this); }
 };
 
 
index e3349ce..f0eb649 100644 (file)
@@ -119,15 +119,15 @@ double LC::CalcCavityDist (size_t i, const std::string &name, const Properties &
         cav->makeCavity( i );
 
         if( Cavity() == CavityType::FULL )
-            Bi = calcMarginal( *cav, cav->delta(i), reInit() );
+            Bi = calcMarginal( *cav, cav->fg().delta(i), reInit() );
         else if( Cavity() == CavityType::PAIR )
-            Bi = calcMarginal2ndO( *cav, cav->delta(i), reInit() );
+            Bi = calcMarginal2ndO( *cav, cav->fg().delta(i), reInit() );
         else if( Cavity() == CavityType::PAIR2 ) {
-            vector<Factor> pairbeliefs = calcPairBeliefsNew( *cav, cav->delta(i), reInit() );
+            vector<Factor> pairbeliefs = calcPairBeliefsNew( *cav, cav->fg().delta(i), reInit() );
             for( size_t ij = 0; ij < pairbeliefs.size(); ij++ )
                 Bi *= pairbeliefs[ij];
         } else if( Cavity() == CavityType::PAIRINT ) {
-            Bi = calcMarginal( *cav, cav->delta(i), reInit() );
+            Bi = calcMarginal( *cav, cav->fg().delta(i), reInit() );
             
             // Set interactions of order > 2 to zero
             size_t N = delta(i).size();
@@ -139,7 +139,7 @@ double LC::CalcCavityDist (size_t i, const std::string &name, const Properties &
 //            x2x::logpnorm (N, p);
             x2x::logp2p (N, p);
         } else if( Cavity() == CavityType::PAIRCUM ) {
-            Bi = calcMarginal( *cav, cav->delta(i), reInit() );
+            Bi = calcMarginal( *cav, cav->fg().delta(i), reInit() );
             
             // Set cumulants of order > 2 to zero
             size_t N = delta(i).size();
index eb96814..54294ed 100644 (file)
@@ -92,8 +92,8 @@ class TestAI {
 
         vector<Factor> allBeliefs() {
             vector<Factor> result;
-            for( size_t i = 0; i < obj->nrVars(); i++ )
-                result.push_back( obj->belief( obj->var(i) ) );
+            for( size_t i = 0; i < obj->fg().nrVars(); i++ )
+                result.push_back( obj->belief( obj->fg().var(i) ) );
             return result;
         }