36 struct ChainedVector {
40 ChainedVector(
const T&
c) {
result.push_back(
c); }
47 operator Result() {
return result; }
50 const SymbolicFactorGraph simpleTestGraph1 {
51 std::make_shared<SymbolicFactor>(0,1),
52 std::make_shared<SymbolicFactor>(0,2),
53 std::make_shared<SymbolicFactor>(1,4),
54 std::make_shared<SymbolicFactor>(2,4),
55 std::make_shared<SymbolicFactor>(3,4)};
57 const SymbolicBayesNet simpleTestGraph1BayesNet {
58 std::make_shared<SymbolicConditional>(0,1,2),
59 std::make_shared<SymbolicConditional>(1,2,4),
60 std::make_shared<SymbolicConditional>(2,4),
61 std::make_shared<SymbolicConditional>(3,4),
62 std::make_shared<SymbolicConditional>(4)};
64 const SymbolicFactorGraph simpleTestGraph2 {
65 std::make_shared<SymbolicFactor>(0,1),
66 std::make_shared<SymbolicFactor>(0,2),
67 std::make_shared<SymbolicFactor>(1,3),
68 std::make_shared<SymbolicFactor>(1,4),
69 std::make_shared<SymbolicFactor>(2,3),
70 std::make_shared<SymbolicFactor>(4,5)};
73 const SymbolicFactorGraph simpleChain {
74 std::make_shared<SymbolicFactor>(1,0),
75 std::make_shared<SymbolicFactor>(0,2),
76 std::make_shared<SymbolicFactor>(2,3)};
82 SymbolicBayesTree __simpleChainBayesTree() {
84 result.insertRoot(std::make_shared<SymbolicBayesTreeClique>(
85 std::make_shared<SymbolicConditional>(
87 result.addClique(std::make_shared<SymbolicBayesTreeClique>(
88 std::make_shared<SymbolicConditional>(
94 const SymbolicBayesTree simpleChainBayesTree = __simpleChainBayesTree();
106 const SymbolicFactorGraph asiaGraph = {
107 std::make_shared<SymbolicFactor>(_T_),
108 std::make_shared<SymbolicFactor>(_S_),
109 std::make_shared<SymbolicFactor>(_T_, _E_,
_L_),
110 std::make_shared<SymbolicFactor>(
_L_, _S_),
111 std::make_shared<SymbolicFactor>(_S_,
_B_),
112 std::make_shared<SymbolicFactor>(_E_,
_B_),
113 std::make_shared<SymbolicFactor>(_E_, _X_)};
115 const SymbolicBayesNet asiaBayesNet = {
116 std::make_shared<SymbolicConditional>(_T_, _E_,
_L_),
117 std::make_shared<SymbolicConditional>(_X_, _E_),
118 std::make_shared<SymbolicConditional>(_E_,
_B_,
_L_),
119 std::make_shared<SymbolicConditional>(_S_,
_B_,
_L_),
120 std::make_shared<SymbolicConditional>(
_L_,
_B_),
121 std::make_shared<SymbolicConditional>(
_B_)};
126 using Children = ChainedVector<sharedClique>;
127 using Keys = ChainedVector<Key>;
129 inline sharedClique LeafClique(
const Keys::Result&
keys,
131 return std::make_shared<SymbolicBayesTreeClique>(
132 std::make_shared<SymbolicConditional>(
136 inline sharedClique NodeClique(
const Keys::Result&
keys,
138 const Children::Result& children) {
139 sharedClique clique = LeafClique(
keys, nrFrontals);
140 clique->children.assign(children.begin(), children.end());
141 for (
auto&& child : children) child->parent_ = clique;
147 SymbolicBayesTree __asiaBayesTree() {
151 result.addClique(LeafClique({_T_, _E_,
_L_}, 1),
result.roots().front());
152 result.addClique(LeafClique({_X_, _E_}, 1),
result.roots().front());
156 const SymbolicBayesTree asiaBayesTree = __asiaBayesTree();
159 const Ordering asiaOrdering{_X_, _T_, _S_, _E_,
_L_,
_B_};