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
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
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;
/// \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;
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(); }
/** \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
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 );
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();
/** \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:
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;
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;
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();
/** \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;
//@}
};
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;
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;
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;