00001 /* This file is part of libDAI - http://www.libdai.org/ 00002 * 00003 * libDAI is licensed under the terms of the GNU General Public License version 00004 * 2, or (at your option) any later version. libDAI is distributed without any 00005 * warranty. See the file COPYING for more details. 00006 * 00007 * Copyright (C) 2006-2009 Joris Mooij [joris dot mooij at libdai dot org] 00008 * Copyright (C) 2006-2007 Radboud University Nijmegen, The Netherlands 00009 */ 00010 00011 00014 00015 00016 #ifndef __defined_libdai_mf_h 00017 #define __defined_libdai_mf_h 00018 00019 00020 #include <string> 00021 #include <dai/daialg.h> 00022 #include <dai/factorgraph.h> 00023 #include <dai/properties.h> 00024 00025 00026 namespace dai { 00027 00028 00030 00036 class MF : public DAIAlgFG { 00037 private: 00039 std::vector<Factor> _beliefs; 00041 Real _maxdiff; 00043 size_t _iters; 00044 00045 public: 00047 struct Properties { 00049 size_t verbose; 00050 00052 size_t maxiter; 00053 00055 Real tol; 00056 00058 Real damping; 00059 } props; 00060 00062 static const char *Name; 00063 00064 public: 00066 00067 00068 MF() : DAIAlgFG(), _beliefs(), _maxdiff(0.0), _iters(0U), props() {} 00069 00071 00073 MF( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), _beliefs(), _maxdiff(0.0), _iters(0U), props() { 00074 setProperties( opts ); 00075 construct(); 00076 } 00078 00080 00081 virtual MF* clone() const { return new MF(*this); } 00082 virtual std::string identify() const; 00083 virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); } 00084 virtual Factor belief( const VarSet &vs ) const; 00085 virtual Factor beliefV( size_t i ) const; 00086 virtual std::vector<Factor> beliefs() const; 00087 virtual Real logZ() const; 00088 virtual void init(); 00089 virtual void init( const VarSet &ns ); 00090 virtual Real run(); 00091 virtual Real maxDiff() const { return _maxdiff; } 00092 virtual size_t Iterations() const { return _iters; } 00093 virtual void setProperties( const PropertySet &opts ); 00094 virtual PropertySet getProperties() const; 00095 virtual std::string printProperties() const; 00097 00098 private: 00100 void construct(); 00101 00103 Factor calcNewBelief( size_t i ); 00104 }; 00105 00106 00107 } // end of namespace dai 00108 00109 00110 #endif