1 /* Copyright (C) 2006-2008 Joris Mooij [j dot mooij at science dot ru dot nl]
2 Radboud University Nijmegen, The Netherlands
4 This file is part of libDAI.
6 libDAI is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 libDAI is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with libDAI; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #ifndef __defined_libdai_mf_h
23 #define __defined_libdai_mf_h
27 #include <dai/daialg.h>
28 #include <dai/factorgraph.h>
29 #include <dai/properties.h>
35 class MF
: public DAIAlgFG
{
37 std::vector
<Factor
> _beliefs
;
38 /// Maximum difference encountered so far
40 /// Number of iterations needed
50 static const char *Name
;
53 /// Default constructor
54 MF() : DAIAlgFG(), _beliefs(), _maxdiff(0.0), _iters(0U), props() {}
56 /// Construct from FactorGraph fg and PropertySet opts
57 MF( const FactorGraph
&fg
, const PropertySet
&opts
) : DAIAlgFG(fg
), _beliefs(), _maxdiff(0.0), _iters(0U), props() {
58 setProperties( opts
);
63 MF( const MF
&x
) : DAIAlgFG(x
), _beliefs(x
._beliefs
), _maxdiff(x
._maxdiff
), _iters(x
._iters
), props(x
.props
) {}
65 /// Clone *this (virtual copy constructor)
66 virtual MF
* clone() const { return new MF(*this); }
68 /// Create (virtual default constructor)
69 virtual MF
* create() const { return new MF(); }
71 /// Assignment operator
72 MF
& operator=( const MF
&x
) {
74 DAIAlgFG::operator=( x
);
75 _beliefs
= x
._beliefs
;
76 _maxdiff
= x
._maxdiff
;
83 /// Identifies itself for logging purposes
84 virtual std::string
identify() const;
86 /// Get single node belief
87 virtual Factor
belief( const Var
&n
) const;
89 /// Get general belief
90 virtual Factor
belief( const VarSet
&ns
) const;
93 virtual std::vector
<Factor
> beliefs() const;
95 /// Get log partition sum
96 virtual Real
logZ() const;
98 /// Clear messages and beliefs
101 /// Clear messages and beliefs corresponding to the nodes in ns
102 virtual void init( const VarSet
&ns
);
104 /// The actual approximate inference algorithm
105 virtual double run();
107 /// Return maximum difference between single node beliefs in the last pass
108 virtual double maxDiff() const { return _maxdiff
; }
110 /// Return number of passes over the factorgraph
111 virtual size_t Iterations() const { return _iters
; }
116 void setProperties( const PropertySet
&opts
);
117 PropertySet
getProperties() const;
118 std::string
printProperties() const;
120 Factor
beliefV( size_t i
) const;
124 } // end of namespace dai