Fixed example_imagesegmentation by adding InfAlg::setMaxIter(size_t)
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Thu, 5 Aug 2010 15:28:30 +0000 (17:28 +0200)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Thu, 5 Aug 2010 15:28:30 +0000 (17:28 +0200)
13 files changed:
ChangeLog
examples/example_imagesegmentation.cpp
include/dai/bp.h
include/dai/cbp.h
include/dai/daialg.h
include/dai/decmap.h
include/dai/exactinf.h
include/dai/gibbs.h
include/dai/hak.h
include/dai/jtree.h
include/dai/lc.h
include/dai/mf.h
include/dai/treeep.h

index d85b07a..1688e21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 git HEAD
 --------
+* Added InfAlg::setMaxIter(size_t) in order to fix a regression in the
+  image segmentation example caused by the 'maxtime' properties
 * Image segmentation example now has a build flag for the version of CImg
 * Deprecated Graph::Neighbor, BipartiteGraph::Neighbor and DAG::Neighbor
   and replaced them by a globally defined Neighbor structure
index 712feff..460e49a 100644 (file)
@@ -179,8 +179,8 @@ double doInference( FactorGraph& fg, string algOpts, size_t maxIter, double tol,
         disp = image;
 #endif
 
-        // Perform the requested inference algorithm
-        // (which could be limited to perform only 1 iteration)
+        // Perform the requested inference algorithm for only one step
+        ia->setMaxIter( iter + 1 );
         maxDiff = ia->run();
 
         // Output progress
index 635ae4c..deb4fee 100644 (file)
@@ -197,11 +197,15 @@ class BP : public DAIAlgFG {
         virtual Factor beliefF( size_t I ) const;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const;
+        /** \pre Assumes that run() has been called and that \a props.inference == \c MAXPROD
+         */
+        std::vector<std::size_t> findMaximum() const;
         virtual void init();
         virtual void init( const VarSet &ns );
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;
@@ -209,11 +213,6 @@ class BP : public DAIAlgFG {
 
     /// \name Additional interface specific for BP
     //@{
-        /// Calculates the joint state of all variables that has maximum probability
-        /** \pre Assumes that run() has been called and that \a props.inference == \c MAXPROD
-         */
-        std::vector<std::size_t> findMaximum() const;
-
         /// Returns history of which messages have been updated
         const std::vector<std::pair<std::size_t, std::size_t> >& getSentMessages() const {
             return _sentMessages;
index a7de51c..f9052b9 100644 (file)
@@ -87,6 +87,7 @@ class CBP : public DAIAlgFG {
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts ) { props.set( opts ); }
         virtual PropertySet getProperties() const { return props.get(); }
         virtual std::string printProperties() const { return props.toString(); }
index 249172f..df88c1f 100644 (file)
@@ -126,6 +126,11 @@ class InfAlg {
         /** \throw NOT_IMPLEMENTED if not implemented/supported
          */
         virtual size_t Iterations() const { DAI_THROW(NOT_IMPLEMENTED); };
+
+        /// Sets maximum number of iterations (one iteration passes over the complete factorgraph).
+        /** \throw NOT_IMPLEMENTED if not implemented/supported
+         */
+        virtual void setMaxIter( size_t /*maxiter*/ ) { DAI_THROW(NOT_IMPLEMENTED); }
     //@}
 
     /// \name Changing the factor graph
index 4229aa5..190b002 100644 (file)
@@ -78,10 +78,10 @@ class DecMAP : public DAIAlgFG {
         virtual Factor beliefF( size_t I ) const { return belief( factor(I).vars() ); }
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const { return _logp; }
+        virtual std::vector<size_t> findMaximum() const { return _state; }
         virtual void init() { _maxdiff = 0.0; _iters = 0; }
         virtual void init( const VarSet &/*ns*/ ) { init(); }
         virtual Real run();
-        virtual std::vector<size_t> findMaximum() const { return _state; }
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
         virtual void setProperties( const PropertySet &opts );
index cf9c411..7757f85 100644 (file)
@@ -77,6 +77,9 @@ class ExactInf : public DAIAlgFG {
         virtual Factor beliefF( size_t I ) const { return _beliefsF[I]; }
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const { return _logZ; }
+        /** \note The complexity of this calculation is exponential in the number of variables.
+         */
+        std::vector<std::size_t> findMaximum() const;
         virtual void init();
         virtual void init( const VarSet &/*ns*/ ) {}
         virtual Real run();
@@ -93,11 +96,6 @@ class ExactInf : public DAIAlgFG {
         /** \note The complexity of this calculation is exponential in the number of variables.
          */
         Factor calcMarginal( const VarSet &vs ) const;
-
-        /// Calculates the joint state of all variables that has maximum probability
-        /** \note The complexity of this calculation is exponential in the number of variables.
-         */
-        std::vector<std::size_t> findMaximum() const;
     //@}
 
     private:
index d89e305..fb0a5b7 100644 (file)
@@ -94,12 +94,13 @@ class Gibbs : public DAIAlgFG {
         virtual Factor beliefF( size_t I ) const;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
+        std::vector<std::size_t> findMaximum() const { return _max_state; }
         virtual void init();
         virtual void init( const VarSet &/*ns*/ ) { init(); }
         virtual Real run();
         virtual Real maxDiff() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
         virtual size_t Iterations() const { return _iters; }
-        std::vector<std::size_t> findMaximum() const { return _max_state; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;
index bf37618..99927f8 100644 (file)
@@ -122,6 +122,7 @@ class HAK : public DAIAlgRG {
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;
index 96ef98a..5ec7f9c 100644 (file)
@@ -128,6 +128,9 @@ class JTree : public DAIAlgRG {
         virtual Factor belief( const VarSet &vs ) const;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const;
+        /** \pre Assumes that run() has been called and that \a props.inference == \c MAXPROD
+         */
+        std::vector<std::size_t> findMaximum() const;
         virtual void init() {}
         virtual void init( const VarSet &/*ns*/ ) {}
         virtual Real run();
@@ -192,11 +195,6 @@ class JTree : public DAIAlgRG {
         /** \pre assumes that run() has been called already
          */
         Factor calcMarginal( const VarSet& vs );
-
-        /// Calculates the joint state of all variables that has maximum probability
-        /** \pre Assumes that run() has been called and that \a props.inference == \c MAXPROD
-         */
-        std::vector<std::size_t> findMaximum() const;
     //@}
 };
 
index 04b2f1b..3231b8a 100644 (file)
@@ -119,6 +119,7 @@ class LC : public DAIAlgFG {
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;
index 0f16815..7f9ba63 100644 (file)
@@ -107,6 +107,7 @@ class MF : public DAIAlgFG {
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;
index f6a0250..5577c82 100644 (file)
@@ -192,6 +192,7 @@ class TreeEP : public JTree {
         virtual Real run();
         virtual Real maxDiff() const { return _maxdiff; }
         virtual size_t Iterations() const { return _iters; }
+        virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
         virtual void setProperties( const PropertySet &opts );
         virtual PropertySet getProperties() const;
         virtual std::string printProperties() const;