EM bugfix. Convenience methods in Factor, Permute, Properties, EM.
[libdai.git] / include / dai / emalg.h
index 021cf7e..622a25b 100644 (file)
@@ -180,7 +180,7 @@ class SharedParameters {
         /** \param varorders  all the factor orientations for this parameter
          *  \param estimation a pointer to the parameter estimation method
          */ 
-        SharedParameters( const FactorOrientations &varorders, ParameterEstimation *estimation );
+        SharedParameters( const FactorOrientations &varorders, ParameterEstimation *estimation, bool deleteParameterEstimationInDestructor=0);
 
         /// Constructor for making an object from a stream and a factor graph
         SharedParameters( std::istream &is, const FactorGraph &fg_varlookup );
@@ -196,6 +196,8 @@ class SharedParameters {
 
         /// Estimate and set the shared parameters
         void setParameters( FactorGraph &fg );
+
+       void collectParameters( const FactorGraph& fg, std::vector< Real >& outVals, std::vector< Var >& outVarOrder );
 };
 
 
@@ -219,6 +221,16 @@ class MaximizationStep {
 
         /// Using all of the currently added expectations, make new factors with maximized parameters and set them in the FactorGraph.
         void maximize( FactorGraph &fg );
+
+       /// @name iterator interface
+       //@{
+       typedef std::vector< SharedParameters >::iterator iterator;
+       typedef std::vector< SharedParameters >::const_iterator const_iterator;
+       iterator begin() { return _params.begin(); }
+       const_iterator begin() const { return _params.begin(); }
+       iterator end() { return _params.end(); }
+       const_iterator end() const { return _params.end(); }
+       //@}
 };
 
 
@@ -298,9 +310,15 @@ class EMAlg {
          */
         bool hasSatisfiedTermConditions() const;
 
+       /// Return the last calculated log likelihood
+       Real getLogZ() const { return _lastLogZ.back(); }
+
         /// Returns number of iterations done so far
         size_t getCurrentIters() const { return _iters; }
 
+       /// Get the iteration method used
+       const InfAlg& eStep() const { return _estep; }
+
         /// Perform an iteration over all maximization steps
         Real iterate();
 
@@ -309,6 +327,16 @@ class EMAlg {
 
         /// Iterate until termination conditions are satisfied
         void run();
+
+       /// @name iterator interface
+       //@{ !!!
+       typedef std::vector< MaximizationStep >::iterator s_iterator;
+       typedef std::vector< MaximizationStep >::const_iterator const_s_iterator;
+       s_iterator s_begin() { return _msteps.begin(); }
+       const_s_iterator s_begin() const { return _msteps.begin(); }
+       s_iterator s_end() { return _msteps.end(); }
+       const_s_iterator s_end() const { return _msteps.end(); }
+       //@}
 };