14 #ifndef __defined_libdai_bp_h
15 #define __defined_libdai_bp_h
62 typedef std::vector<size_t>
ind_t;
75 std::vector<std::vector<EdgeProp> >
_edges;
77 typedef std::multimap<Real, std::pair<std::size_t, std::size_t> >
LutType;
79 std::vector<std::vector<LutType::iterator> >
_edge2lut;
105 DAI_ENUM(UpdateType,SEQFIX,SEQRND,SEQMAX,PARALL);
146 BP() :
DAIAlgFG(),
_edges(),
_edge2lut(),
_lut(),
_maxdiff(0.0),
_iters(0U),
_sentMessages(),
_oldBeliefsV(),
_oldBeliefsF(),
_updateSeq(), props(),
recordSentMessages(false) {}
152 BP(
const FactorGraph &
fg,
const PropertySet &opts ) :
DAIAlgFG(fg),
_edges(),
_maxdiff(0.0),
_iters(0U),
_sentMessages(),
_oldBeliefsV(),
_oldBeliefsF(),
_updateSeq(), props(),
recordSentMessages(false) {
158 BP(
const BP &x ) :
DAIAlgFG(x),
_edges(x.
_edges),
_edge2lut(x.
_edge2lut),
_lut(x.
_lut),
_maxdiff(x.
_maxdiff),
_iters(x.
_iters),
_sentMessages(x.
_sentMessages),
_oldBeliefsV(x.
_oldBeliefsV),
_oldBeliefsF(x.
_oldBeliefsF),
_updateSeq(x.
_updateSeq), props(x.props),
recordSentMessages(x.
recordSentMessages) {
159 for( LutType::iterator l =
_lut.begin(); l !=
_lut.end(); ++l )
160 _edge2lut[l->second.first][l->second.second] = l;
169 for( LutType::iterator l =
_lut.begin(); l !=
_lut.end(); ++l )
170 _edge2lut[l->second.first][l->second.second] = l;
188 virtual std::string
name()
const {
return "BP"; }
193 virtual std::vector<Factor>
beliefs()
const;