25 template<
class DERIVED,
class FACTORGRAPH>
29 conditional_ = eliminationResult.first;
33 template<
class DERIVED,
class FACTORGRAPH>
35 const DERIVED& other,
double tol)
const 37 return (!conditional_ && !other.conditional())
38 || conditional_->equals(*other.conditional(), tol);
42 template<
class DERIVED,
class FACTORGRAPH>
46 KeySet p_F_S_parents(this->conditional()->beginParents(), this->conditional()->endParents());
47 KeySet indicesB(B->conditional()->begin(), B->conditional()->end());
49 std::set_difference(p_F_S_parents.begin(), p_F_S_parents.end(),
50 indicesB.begin(), indicesB.end(), back_inserter(S_setminus_B));
55 template<
class DERIVED,
class FACTORGRAPH>
59 gttic(shortcut_indices);
61 KeySet indicesB(B->conditional()->begin(), B->conditional()->end());
62 KeyVector S_setminus_B = separator_setminus_B(B);
65 std::set_intersection(S_setminus_B.begin(), S_setminus_B.end(),
66 allKeys.begin(), allKeys.end(), back_inserter(keep));
68 std::set_intersection(indicesB.begin(), indicesB.end(),
69 allKeys.begin(), allKeys.end(), back_inserter(keep));
74 template<
class DERIVED,
class FACTORGRAPH>
76 const std::string& s,
const KeyFormatter& keyFormatter)
const 78 conditional_->print(s, keyFormatter);
82 template<
class DERIVED,
class FACTORGRAPH>
85 for(
const derived_ptr& child: children)
86 size += child->treeSize();
91 template<
class DERIVED,
class FACTORGRAPH>
94 if (!cachedSeparatorMarginal_)
97 size_t subtree_count = 1;
98 for(
const derived_ptr& child: children)
99 subtree_count += child->numCachedSeparatorMarginals();
101 return subtree_count;
109 template<
class DERIVED,
class FACTORGRAPH>
110 typename BayesTreeCliqueBase<DERIVED, FACTORGRAPH>::BayesNetType
113 gttic(BayesTreeCliqueBase_shortcut);
116 KeyVector S_setminus_B = separator_setminus_B(B);
117 if (!parent_.expired() && !S_setminus_B.empty())
120 derived_ptr parent(parent_.lock());
121 gttoc(BayesTreeCliqueBase_shortcut);
123 gttic(BayesTreeCliqueBase_shortcut);
124 p_Cp_B += parent->conditional_;
127 KeyVector keep = shortcut_indices(B, p_Cp_B);
130 boost::shared_ptr<FactorGraphType> p_S_B = p_Cp_B.marginal(keep,
function);
131 return *p_S_B->eliminatePartialSequential(S_setminus_B,
function).first;
143 template<
class DERIVED,
class FACTORGRAPH>
144 typename BayesTreeCliqueBase<DERIVED, FACTORGRAPH>::FactorGraphType
147 gttic(BayesTreeCliqueBase_separatorMarginal);
149 if (!cachedSeparatorMarginal_)
151 gttic(BayesTreeCliqueBase_separatorMarginal_cachemiss);
153 if (parent_.expired() )
157 cachedSeparatorMarginal_ = empty;
163 derived_ptr parent(parent_.lock());
164 gttoc(BayesTreeCliqueBase_separatorMarginal_cachemiss);
165 gttoc(BayesTreeCliqueBase_separatorMarginal);
167 gttic(BayesTreeCliqueBase_separatorMarginal);
168 gttic(BayesTreeCliqueBase_separatorMarginal_cachemiss);
170 p_Cp += parent->conditional_;
173 KeyVector indicesS(this->conditional()->beginParents(), this->conditional()->endParents());
174 cachedSeparatorMarginal_ = *p_Cp.marginalMultifrontalBayesNet(
Ordering(indicesS), boost::none,
function);
179 return *cachedSeparatorMarginal_;
186 template<
class DERIVED,
class FACTORGRAPH>
187 typename BayesTreeCliqueBase<DERIVED, FACTORGRAPH>::FactorGraphType
190 gttic(BayesTreeCliqueBase_marginal2);
194 p_C += boost::shared_ptr<FactorType>(this->conditional_);
199 template<
class DERIVED,
class FACTORGRAPH>
205 if (cachedSeparatorMarginal_) {
206 for(derived_ptr& child: children) {
207 child->deleteCachedShortcuts();
211 cachedSeparatorMarginal_ = boost::none;
FactorGraphType marginal2(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(C) of the clique, using marginal caching
Definition: BayesTreeCliqueBase-inst.h:188
Symbolic Bayes Net.
Definition: SymbolicBayesNet.h:30
Symbolic Factor Graph.
Definition: SymbolicFactorGraph.h:55
std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< _FactorType > > EliminationResult
The pair of conditional and remaining factor produced by a single dense elimination step on a subgrap...
Definition: EliminateableFactorGraph.h:86
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:33
Base class for cliques of a BayesTree.
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:56
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition: BayesTreeCliqueBase-inst.h:92
BayesNetType shortcut(const derived_ptr &root, Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the conditional P(S|Root) on the separator given the root
Definition: BayesTreeCliqueBase-inst.h:111
void deleteCachedShortcuts()
This deletes the cached shortcuts of all cliques (subtree) below this clique.
Definition: BayesTreeCliqueBase-inst.h:200
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition: FactorGraph-inst.h:75
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
bool equals(const DERIVED &other, double tol=1e-9) const
check equality
Definition: BayesTreeCliqueBase-inst.h:34
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition: BayesTreeCliqueBase-inst.h:75
KeyVector separator_setminus_B(const derived_ptr &B) const
Calculate set for shortcut calculations.
Definition: BayesTreeCliqueBase-inst.h:44
KeyVector shortcut_indices(const derived_ptr &B, const FactorGraphType &p_Cp_B) const
Determine variable indices to keep in recursive separator shortcut calculation The factor graph p_Cp_...
Definition: BayesTreeCliqueBase-inst.h:56
Definition: Ordering.h:34
void setEliminationResult(const typename FactorGraphType::EliminationResult &eliminationResult)
Fill the elimination result produced during elimination.
Definition: BayesTreeCliqueBase-inst.h:26
FactorGraphType separatorMarginal(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(S) on the separator
Definition: BayesTreeCliqueBase-inst.h:145
size_t treeSize() const
The size of subtree rooted at this clique, i.e., nr of Cliques.
Definition: BayesTreeCliqueBase-inst.h:83