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) 2010 Joris Mooij [joris dot mooij at libdai dot org] 00008 */ 00009 00010 00013 00014 00015 #ifndef __defined_libdai_decmap_h 00016 #define __defined_libdai_decmap_h 00017 00018 00019 #include <dai/daialg.h> 00020 00021 00022 namespace dai { 00023 00024 00026 00030 class DecMAP : public DAIAlgFG { 00031 private: 00033 std::vector<size_t> _state; 00035 Real _logp; 00037 Real _maxdiff; 00039 size_t _iters; 00040 00041 public: 00043 struct Properties { 00045 size_t verbose; 00046 00048 bool reinit; 00049 00051 std::string ianame; 00052 00054 PropertySet iaopts; 00055 } props; 00056 00058 static const char *Name; 00059 00060 public: 00062 DecMAP() : DAIAlgFG(), _state(), _logp(), _maxdiff(), _iters(), props() {} 00063 00065 00068 DecMAP( const FactorGraph &fg, const PropertySet &opts ); 00069 00070 00072 00073 virtual DecMAP* clone() const { return new DecMAP(*this); } 00074 virtual std::string identify() const; 00075 virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); } 00076 virtual Factor belief( const VarSet &/*vs*/ ) const; 00077 virtual Factor beliefV( size_t i ) const; 00078 virtual Factor beliefF( size_t I ) const { return belief( factor(I).vars() ); } 00079 virtual std::vector<Factor> beliefs() const; 00080 virtual Real logZ() const { return _logp; } 00081 virtual std::vector<size_t> findMaximum() const { return _state; } 00082 virtual void init() { _maxdiff = 0.0; _iters = 0; } 00083 virtual void init( const VarSet &/*ns*/ ) { init(); } 00084 virtual Real run(); 00085 virtual Real maxDiff() const { return _maxdiff; } 00086 virtual size_t Iterations() const { return _iters; } 00087 virtual void setProperties( const PropertySet &opts ); 00088 virtual PropertySet getProperties() const; 00089 virtual std::string printProperties() const; 00091 }; 00092 00093 00094 } // end of namespace dai 00095 00096 00097 #endif