libDAI
|
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_decmap_h 00014 #define __defined_libdai_decmap_h 00015 00016 00017 #include <dai/daialg.h> 00018 00019 00020 namespace dai { 00021 00022 00024 00028 class DecMAP : public DAIAlgFG { 00029 private: 00031 std::vector<size_t> _state; 00033 Real _logp; 00035 Real _maxdiff; 00037 size_t _iters; 00038 00039 public: 00041 struct Properties { 00043 size_t verbose; 00044 00046 bool reinit; 00047 00049 std::string ianame; 00050 00052 PropertySet iaopts; 00053 } props; 00054 00055 public: 00057 DecMAP() : DAIAlgFG(), _state(), _logp(), _maxdiff(), _iters(), props() {} 00058 00060 00063 DecMAP( const FactorGraph &fg, const PropertySet &opts ); 00064 00065 00067 00068 virtual DecMAP* clone() const { return new DecMAP(*this); } 00069 virtual DecMAP* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new DecMAP( fg, opts ); } 00070 virtual std::string name() const { return "DECMAP"; } 00071 virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); } 00072 virtual Factor belief( const VarSet &/*vs*/ ) const; 00073 virtual Factor beliefV( size_t i ) const; 00074 virtual Factor beliefF( size_t I ) const { return belief( factor(I).vars() ); } 00075 virtual std::vector<Factor> beliefs() const; 00076 virtual Real logZ() const { return _logp; } 00077 virtual std::vector<size_t> findMaximum() const { return _state; } 00078 virtual void init() { _maxdiff = 0.0; _iters = 0; } 00079 virtual void init( const VarSet &/*ns*/ ) { init(); } 00080 virtual Real run(); 00081 virtual Real maxDiff() const { return _maxdiff; } 00082 virtual size_t Iterations() const { return _iters; } 00083 virtual void setProperties( const PropertySet &opts ); 00084 virtual PropertySet getProperties() const; 00085 virtual std::string printProperties() const; 00087 }; 00088 00089 00090 } // end of namespace dai 00091 00092 00093 #endif