/* ************************************************************************* */ TEST( SymbolicBayesNet, combine ) { SymbolicConditional::shared_ptr A(new SymbolicConditional(_A_,_B_,_C_)), B(new SymbolicConditional(_B_,_C_)), C(new SymbolicConditional(_C_)); // p(A|BC) SymbolicBayesNet p_ABC; p_ABC.push_back(A); // P(BC)=P(B|C)P(C) SymbolicBayesNet p_BC; p_BC.push_back(B); p_BC.push_back(C); // P(ABC) = P(A|BC) P(BC) p_ABC.push_back(p_BC); SymbolicBayesNet expected; expected.push_back(A); expected.push_back(B); expected.push_back(C); CHECK(assert_equal(expected,p_ABC)); }
/* ************************************************************************* */ TEST( SymbolicBayesNet, FromGaussian) { SymbolicBayesNet expected; expected.push_back(IndexConditional::shared_ptr(new IndexConditional(0, 1))); expected.push_back(IndexConditional::shared_ptr(new IndexConditional(1))); GaussianBayesNet gbn = createSmallGaussianBayesNet(); SymbolicBayesNet actual(gbn); EXPECT(assert_equal(expected, actual)); }
/* ************************************************************************* */ TEST(SymbolicBayesNet, saveGraph) { SymbolicBayesNet bn; bn += SymbolicConditional(_A_, _B_); std::vector<Key> keys; keys.push_back(_B_); keys.push_back(_C_); keys.push_back(_D_); bn += SymbolicConditional::FromKeys(keys,2); bn += SymbolicConditional(_D_); bn.saveGraph("SymbolicBayesNet.dot"); }
/* ************************************************************************* */ TEST( SymbolicFactorGraph, eliminate ) { Ordering o; o += X(2),L(1),X(1); // create expected Chordal bayes Net IndexConditional::shared_ptr x2(new IndexConditional(o[X(2)], o[L(1)], o[X(1)])); IndexConditional::shared_ptr l1(new IndexConditional(o[L(1)], o[X(1)])); IndexConditional::shared_ptr x1(new IndexConditional(o[X(1)])); SymbolicBayesNet expected; expected.push_back(x2); expected.push_back(l1); expected.push_back(x1); // create a test graph GaussianFactorGraph factorGraph = example::createGaussianFactorGraph(o); SymbolicFactorGraph fg(factorGraph); // eliminate it SymbolicBayesNet actual = *SymbolicSequentialSolver(fg).eliminate(); CHECK(assert_equal(expected,actual)); }