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
;
48 // default constructor
49 MF() : DAIAlgFG(), _beliefs(), props(), maxdiff(0.0) {}
51 MF( const MF
& x
) : DAIAlgFG(x
), _beliefs(x
._beliefs
), props(x
.props
), maxdiff(x
.maxdiff
) {}
52 MF
* clone() const { return new MF(*this); }
53 /// Create (virtual constructor)
54 virtual MF
* create() const { return new MF(); }
55 // construct MF object from FactorGraph
56 MF( const FactorGraph
& fg
, const PropertySet
&opts
) : DAIAlgFG(fg
), _beliefs(), props(), maxdiff(0.0) {
57 setProperties( opts
);
60 // assignment operator
61 MF
& operator=( const MF
&x
) {
63 DAIAlgFG::operator=( x
);
64 _beliefs
= x
._beliefs
;
71 static const char *Name
;
72 std::string
identify() const;
75 /// Clear messages and beliefs corresponding to the nodes in ns
76 virtual void init( const VarSet
&ns
);
78 Factor
beliefV (size_t i
) const;
79 Factor
belief (const Var
&n
) const;
80 Factor
belief (const VarSet
&ns
) const;
81 std::vector
<Factor
> beliefs() const;
84 void restoreFactors( const VarSet
&ns
) { FactorGraph::restoreFactors(ns
); init(ns
); }
85 void setProperties( const PropertySet
&opts
);
86 PropertySet
getProperties() const;
87 std::string
printProperties() const;
88 double maxDiff() const { return maxdiff
; }
92 } // end of namespace dai