libDAI
include/dai/mf.h
Go to the documentation of this file.
00001 /*  This file is part of libDAI - http://www.libdai.org/
00002  *
00003  *  Copyright (c) 2006-2011, The libDAI authors. All rights reserved.
00004  *
00005  *  Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
00006  */
00007 
00008 
00011 
00012 
00013 #ifndef __defined_libdai_mf_h
00014 #define __defined_libdai_mf_h
00015 
00016 
00017 #include <string>
00018 #include <dai/enum.h>
00019 #include <dai/daialg.h>
00020 #include <dai/factorgraph.h>
00021 #include <dai/properties.h>
00022 
00023 
00024 namespace dai {
00025 
00026 
00028 
00037 class MF : public DAIAlgFG {
00038     private:
00040         std::vector<Factor>  _beliefs;
00042         Real _maxdiff;
00044         size_t _iters;
00045 
00046     public:
00048         struct Properties {
00050             DAI_ENUM(InitType,UNIFORM,RANDOM);
00051 
00053             DAI_ENUM(UpdateType,NAIVE,HARDSPIN);
00054 
00056             size_t verbose;
00057 
00059             size_t maxiter;
00060 
00062             Real tol;
00063 
00065             Real damping;
00066             
00068             InitType init;
00069 
00071             UpdateType updates;
00072         } props;
00073 
00074     public:
00076 
00077 
00078         MF() : DAIAlgFG(), _beliefs(), _maxdiff(0.0), _iters(0U), props() {}
00079 
00081 
00084         MF( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), _beliefs(), _maxdiff(0.0), _iters(0U), props() {
00085             setProperties( opts );
00086             construct();
00087         }
00089 
00091 
00092         virtual MF* clone() const { return new MF(*this); }
00093         virtual MF* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new MF( fg, opts ); }
00094         virtual std::string name() const { return "MF"; }
00095         virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
00096         virtual Factor belief( const VarSet &vs ) const;
00097         virtual Factor beliefV( size_t i ) const;
00098         virtual std::vector<Factor> beliefs() const;
00099         virtual Real logZ() const;
00100         virtual void init();
00101         virtual void init( const VarSet &ns );
00102         virtual Real run();
00103         virtual Real maxDiff() const { return _maxdiff; }
00104         virtual size_t Iterations() const { return _iters; }
00105         virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
00106         virtual void setProperties( const PropertySet &opts );
00107         virtual PropertySet getProperties() const;
00108         virtual std::string printProperties() const;
00110 
00111     private:
00113         void construct();
00114 
00116         Factor calcNewBelief( size_t i );
00117 };
00118 
00119 
00120 } // end of namespace dai
00121 
00122 
00123 #endif