Reenabled BayesTree edit unit tests, and have some passing
parent
1ee51fb6f5
commit
865b2162ee
|
@ -24,9 +24,13 @@
|
||||||
|
|
||||||
#include <boost/assign/list_of.hpp>
|
#include <boost/assign/list_of.hpp>
|
||||||
#include <boost/assign/std/vector.hpp>
|
#include <boost/assign/std/vector.hpp>
|
||||||
|
#include <boost/assign/std/list.hpp>
|
||||||
|
#include <boost/range/adaptor/indirected.hpp>
|
||||||
using namespace boost::assign;
|
using namespace boost::assign;
|
||||||
|
using boost::adaptors::indirected;
|
||||||
|
|
||||||
#include <CppUnitLite/TestHarness.h>
|
#include <CppUnitLite/TestHarness.h>
|
||||||
|
#include <gtsam/base/TestableAssertions.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace gtsam;
|
using namespace gtsam;
|
||||||
|
@ -36,22 +40,22 @@ static bool debug = false;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
// Conditionals for ASIA example from the tutorial with A and D evidence
|
//// Conditionals for ASIA example from the tutorial with A and D evidence
|
||||||
SymbolicConditionalUnordered::shared_ptr
|
//SymbolicConditionalUnordered::shared_ptr
|
||||||
B(new SymbolicConditionalUnordered(_B_)),
|
// B(new SymbolicConditionalUnordered(_B_)),
|
||||||
L(new SymbolicConditionalUnordered(_L_, _B_)),
|
// L(new SymbolicConditionalUnordered(_L_, _B_)),
|
||||||
E(new SymbolicConditionalUnordered(_E_, _L_, _B_)),
|
// E(new SymbolicConditionalUnordered(_E_, _L_, _B_)),
|
||||||
S(new SymbolicConditionalUnordered(_S_, _L_, _B_)),
|
// S(new SymbolicConditionalUnordered(_S_, _L_, _B_)),
|
||||||
T(new SymbolicConditionalUnordered(_T_, _E_, _L_)),
|
// T(new SymbolicConditionalUnordered(_T_, _E_, _L_)),
|
||||||
X(new SymbolicConditionalUnordered(_X_, _E_));
|
// X(new SymbolicConditionalUnordered(_X_, _E_));
|
||||||
|
|
||||||
// Cliques
|
//// Cliques
|
||||||
SymbolicConditionalUnordered::shared_ptr ELB(
|
//SymbolicConditionalUnordered::shared_ptr ELB(
|
||||||
boost::make_shared<SymbolicConditionalUnordered>(
|
// boost::make_shared<SymbolicConditionalUnordered>(
|
||||||
SymbolicConditionalUnordered::FromKeys(list_of(_E_)(_L_)(_B_), 3)));
|
// SymbolicConditionalUnordered::FromKeys(list_of(_E_)(_L_)(_B_), 3)));
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
// Helper function for below
|
// Helper functions for below
|
||||||
template<typename KEYS>
|
template<typename KEYS>
|
||||||
SymbolicBayesTreeCliqueUnordered::shared_ptr MakeClique(const KEYS& keys, DenseIndex nrFrontals)
|
SymbolicBayesTreeCliqueUnordered::shared_ptr MakeClique(const KEYS& keys, DenseIndex nrFrontals)
|
||||||
{
|
{
|
||||||
|
@ -59,6 +63,21 @@ namespace {
|
||||||
boost::make_shared<SymbolicConditionalUnordered>(
|
boost::make_shared<SymbolicConditionalUnordered>(
|
||||||
SymbolicConditionalUnordered::FromKeys(keys, nrFrontals)));
|
SymbolicConditionalUnordered::FromKeys(keys, nrFrontals)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename KEYS, typename CHILDREN>
|
||||||
|
SymbolicBayesTreeCliqueUnordered::shared_ptr MakeClique(
|
||||||
|
const KEYS& keys, DenseIndex nrFrontals, const CHILDREN& children)
|
||||||
|
{
|
||||||
|
SymbolicBayesTreeCliqueUnordered::shared_ptr clique =
|
||||||
|
boost::make_shared<SymbolicBayesTreeCliqueUnordered>(
|
||||||
|
boost::make_shared<SymbolicConditionalUnordered>(
|
||||||
|
SymbolicConditionalUnordered::FromKeys(keys, nrFrontals)));
|
||||||
|
clique->children = children;
|
||||||
|
BOOST_FOREACH(const SymbolicBayesTreeCliqueUnordered::shared_ptr& child, children)
|
||||||
|
child->parent_ = clique;
|
||||||
|
return clique;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
@ -116,107 +135,100 @@ TEST(SymbolicBayesTree, clear)
|
||||||
CHECK(assert_equal(expected, bayesTree));
|
CHECK(assert_equal(expected, bayesTree));
|
||||||
}
|
}
|
||||||
|
|
||||||
///* ************************************************************************* *
|
/* ************************************************************************* *
|
||||||
//Bayes Tree for testing conversion to a forest of orphans needed for incremental.
|
Bayes Tree for testing conversion to a forest of orphans needed for incremental.
|
||||||
// A,B
|
A,B
|
||||||
// C|A E|B
|
C|A E|B
|
||||||
// D|C F|E
|
D|C F|E
|
||||||
// */
|
*/
|
||||||
///* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
//TEST( BayesTree, removePath )
|
TEST( BayesTree, removePath )
|
||||||
//{
|
{
|
||||||
// const Index _A_=5, _B_=4, _C_=3, _D_=2, _E_=1, _F_=0;
|
const Key _A_=A(0), _B_=B(0), _C_=C(0), _D_=D(0), _E_=E(0), _F_=F(0);
|
||||||
// SymbolicConditionalUnordered::shared_ptr
|
|
||||||
// A(new SymbolicConditionalUnordered(_A_)),
|
SymbolicBayesTreeUnordered bayesTreeOrig;
|
||||||
// B(new SymbolicConditionalUnordered(_B_, _A_)),
|
bayesTreeOrig.insertRoot(
|
||||||
// C(new SymbolicConditionalUnordered(_C_, _A_)),
|
MakeClique(list_of(_A_)(_B_), 2, list_of
|
||||||
// D(new SymbolicConditionalUnordered(_D_, _C_)),
|
(MakeClique(list_of(_C_)(_A_), 1, list_of
|
||||||
// E(new SymbolicConditionalUnordered(_E_, _B_)),
|
(MakeClique(list_of(_D_)(_C_), 1))))
|
||||||
// F(new SymbolicConditionalUnordered(_F_, _E_));
|
(MakeClique(list_of(_E_)(_B_), 1, list_of
|
||||||
// SymbolicBayesTreeUnordered bayesTree;
|
(MakeClique(list_of(_F_)(_E_), 1))))));
|
||||||
// EXPECT(bayesTree.empty());
|
|
||||||
//// Ordering ord; ord += _A_,_B_,_C_,_D_,_E_,_F_;
|
SymbolicBayesTreeUnordered bayesTree = bayesTreeOrig;
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, A);
|
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, B);
|
// remove C, expected outcome: factor graph with ABC,
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, C);
|
// Bayes Tree now contains two orphan trees: D|C and E|B,F|E
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, D);
|
SymbolicFactorGraphUnordered expected;
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, E);
|
expected += SymbolicFactorUnordered(_A_,_B_);
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, F);
|
expected += SymbolicFactorUnordered(_C_,_A_);
|
||||||
//
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
||||||
// // remove C, expected outcome: factor graph with ABC,
|
expectedOrphans += bayesTree[_D_], bayesTree[_E_];
|
||||||
// // Bayes Tree now contains two orphan trees: D|C and E|B,F|E
|
|
||||||
// SymbolicFactorGraph expected;
|
SymbolicBayesNetUnordered bn;
|
||||||
// expected.push_factor(_B_,_A_);
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
//// expected.push_factor(_A_);
|
bayesTree.removePath(bayesTree[_C_], bn, orphans);
|
||||||
// expected.push_factor(_C_,_A_);
|
SymbolicFactorGraphUnordered factors(bn);
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
CHECK(assert_equal(expected, factors));
|
||||||
// expectedOrphans += bayesTree[_D_], bayesTree[_E_];
|
CHECK(assert_container_equal(expectedOrphans|indirected, orphans|indirected));
|
||||||
//
|
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
bayesTree = bayesTreeOrig;
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
|
||||||
// bayesTree.removePath(bayesTree[_C_], bn, orphans);
|
// remove E: factor graph with EB; E|B removed from second orphan tree
|
||||||
// SymbolicFactorGraph factors(bn);
|
SymbolicFactorGraphUnordered expected2;
|
||||||
// CHECK(assert_equal((SymbolicFactorGraph)expected, factors));
|
expected2 += SymbolicFactorUnordered(_A_,_B_);
|
||||||
// CHECK(assert_equal(expectedOrphans, orphans));
|
expected2 += SymbolicFactorUnordered(_E_,_B_);
|
||||||
//
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans2;
|
||||||
// // remove E: factor graph with EB; E|B removed from second orphan tree
|
expectedOrphans2 += bayesTree[_F_];
|
||||||
// SymbolicFactorGraph expected2;
|
expectedOrphans2 += bayesTree[_C_];
|
||||||
// expected2.push_factor(_E_,_B_);
|
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans2;
|
SymbolicBayesNetUnordered bn2;
|
||||||
// expectedOrphans2 += bayesTree[_F_];
|
SymbolicBayesTreeUnordered::Cliques orphans2;
|
||||||
//
|
bayesTree.removePath(bayesTree[_E_], bn2, orphans2);
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn2;
|
SymbolicFactorGraphUnordered factors2(bn2);
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans2;
|
CHECK(assert_equal(expected2, factors2));
|
||||||
// bayesTree.removePath(bayesTree[_E_], bn2, orphans2);
|
CHECK(assert_container_equal(expectedOrphans2|indirected, orphans2|indirected));
|
||||||
// SymbolicFactorGraph factors2(bn2);
|
}
|
||||||
// CHECK(assert_equal((SymbolicFactorGraph)expected2, factors2));
|
|
||||||
// CHECK(assert_equal(expectedOrphans2, orphans2));
|
/* ************************************************************************* */
|
||||||
//}
|
TEST( BayesTree, removePath2 )
|
||||||
//
|
{
|
||||||
///* ************************************************************************* */
|
SymbolicBayesTreeUnordered bayesTree = asiaBayesTree;
|
||||||
//TEST( BayesTree, removePath2 )
|
|
||||||
//{
|
// Call remove-path with clique B
|
||||||
// SymbolicBayesTreeUnordered bayesTree = createAsiaSymbolicBayesTree();
|
SymbolicBayesNetUnordered bn;
|
||||||
//
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
// // Call remove-path with clique B
|
bayesTree.removePath(bayesTree[_B_], bn, orphans);
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
SymbolicFactorGraphUnordered factors(bn);
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
|
||||||
// bayesTree.removePath(bayesTree[_B_], bn, orphans);
|
// Check expected outcome
|
||||||
// SymbolicFactorGraph factors(bn);
|
SymbolicFactorGraphUnordered expected;
|
||||||
//
|
expected += SymbolicFactorUnordered(_B_,_L_,_E_,_S_);
|
||||||
// // Check expected outcome
|
CHECK(assert_equal(expected, factors));
|
||||||
// SymbolicFactorGraph expected;
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
||||||
// expected.push_factor(_E_,_L_,_B_);
|
expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
||||||
//// expected.push_factor(_L_,_B_);
|
CHECK(assert_container_equal(expectedOrphans|indirected, orphans|indirected));
|
||||||
//// expected.push_factor(_B_);
|
}
|
||||||
// CHECK(assert_equal(expected, factors));
|
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
/* ************************************************************************* */
|
||||||
// expectedOrphans += bayesTree[_S_], bayesTree[_T_], bayesTree[_X_];
|
TEST( BayesTree, removePath3 )
|
||||||
// CHECK(assert_equal(expectedOrphans, orphans));
|
{
|
||||||
//}
|
SymbolicBayesTreeUnordered bayesTree = asiaBayesTree;
|
||||||
//
|
|
||||||
///* ************************************************************************* */
|
// Call remove-path with clique S
|
||||||
//TEST( BayesTree, removePath3 )
|
SymbolicBayesNetUnordered bn;
|
||||||
//{
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
// SymbolicBayesTreeUnordered bayesTree = createAsiaSymbolicBayesTree();
|
bayesTree.removePath(bayesTree[_T_], bn, orphans);
|
||||||
//
|
SymbolicFactorGraphUnordered factors(bn);
|
||||||
// // Call remove-path with clique S
|
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
// Check expected outcome
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
SymbolicFactorGraphUnordered expected;
|
||||||
// bayesTree.removePath(bayesTree[_S_], bn, orphans);
|
expected += SymbolicFactorUnordered(_B_,_L_,_E_,_S_);
|
||||||
// SymbolicFactorGraph factors(bn);
|
expected += SymbolicFactorUnordered(_T_,_E_,_L_);
|
||||||
//
|
CHECK(assert_equal(expected, factors));
|
||||||
// // Check expected outcome
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
||||||
// SymbolicFactorGraph expected;
|
expectedOrphans += bayesTree[_X_];
|
||||||
// expected.push_factor(_E_,_L_,_B_);
|
CHECK(assert_container_equal(expectedOrphans|indirected, orphans|indirected));
|
||||||
//// expected.push_factor(_L_,_B_);
|
}
|
||||||
//// expected.push_factor(_B_);
|
|
||||||
// expected.push_factor(_S_,_L_,_B_);
|
|
||||||
// CHECK(assert_equal(expected, factors));
|
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
|
||||||
// expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
|
||||||
// CHECK(assert_equal(expectedOrphans, orphans));
|
|
||||||
//}
|
|
||||||
|
|
||||||
void getAllCliques(const SymbolicBayesTreeUnordered::sharedClique& subtree, SymbolicBayesTreeUnordered::Cliques& cliques) {
|
void getAllCliques(const SymbolicBayesTreeUnordered::sharedClique& subtree, SymbolicBayesTreeUnordered::Cliques& cliques) {
|
||||||
// Check if subtree exists
|
// Check if subtree exists
|
||||||
|
@ -278,104 +290,106 @@ TEST( BayesTree, shortcutCheck )
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
///* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
//TEST( BayesTree, removeTop )
|
TEST( BayesTree, removeTop )
|
||||||
//{
|
{
|
||||||
// SymbolicBayesTreeUnordered bayesTree = createAsiaSymbolicBayesTree();
|
SymbolicBayesTreeUnordered bayesTree = asiaBayesTree;
|
||||||
//
|
|
||||||
// // create a new factor to be inserted
|
bayesTree.print("asiaBayesTree: ");
|
||||||
// boost::shared_ptr<IndexFactor> newFactor(new IndexFactor(_S_,_B_));
|
|
||||||
//
|
// create a new factor to be inserted
|
||||||
// // Remove the contaminated part of the Bayes tree
|
//boost::shared_ptr<IndexFactor> newFactor(new IndexFactor(_S_,_B_));
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
// Remove the contaminated part of the Bayes tree
|
||||||
// list<Index> keys; keys += _B_,_S_;
|
SymbolicBayesNetUnordered bn;
|
||||||
// bayesTree.removeTop(keys, bn, orphans);
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
// SymbolicFactorGraph factors(bn);
|
list<Key> keys; keys += _B_,_S_;
|
||||||
//
|
bayesTree.removeTop(keys, bn, orphans);
|
||||||
// // Check expected outcome
|
SymbolicFactorGraphUnordered factors(bn);
|
||||||
// SymbolicFactorGraph expected;
|
|
||||||
// expected.push_factor(_E_,_L_,_B_);
|
// Check expected outcome
|
||||||
//// expected.push_factor(_L_,_B_);
|
SymbolicFactorGraphUnordered expected;
|
||||||
//// expected.push_factor(_B_);
|
expected.push_factor(_E_,_L_,_B_);
|
||||||
// expected.push_factor(_S_,_L_,_B_);
|
// expected.push_factor(_L_,_B_);
|
||||||
// CHECK(assert_equal(expected, factors));
|
// expected.push_factor(_B_);
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
expected.push_factor(_S_,_L_,_B_);
|
||||||
// expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
CHECK(assert_equal(expected, factors));
|
||||||
// CHECK(assert_equal(expectedOrphans, orphans));
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
||||||
//
|
expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
||||||
// // Try removeTop again with a factor that should not change a thing
|
CHECK(assert_container_equal(expectedOrphans|indirected, orphans|indirected));
|
||||||
// boost::shared_ptr<IndexFactor> newFactor2(new IndexFactor(_B_));
|
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn2;
|
// Try removeTop again with a factor that should not change a thing
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans2;
|
//boost::shared_ptr<IndexFactor> newFactor2(new IndexFactor(_B_));
|
||||||
// keys.clear(); keys += _B_;
|
SymbolicBayesNetUnordered bn2;
|
||||||
// bayesTree.removeTop(keys, bn2, orphans2);
|
SymbolicBayesTreeUnordered::Cliques orphans2;
|
||||||
// SymbolicFactorGraph factors2(bn2);
|
keys.clear(); keys += _B_;
|
||||||
// SymbolicFactorGraph expected2;
|
bayesTree.removeTop(keys, bn2, orphans2);
|
||||||
// CHECK(assert_equal(expected2, factors2));
|
SymbolicFactorGraphUnordered factors2(bn2);
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans2;
|
SymbolicFactorGraphUnordered expected2;
|
||||||
// CHECK(assert_equal(expectedOrphans2, orphans2));
|
CHECK(assert_equal(expected2, factors2));
|
||||||
//}
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans2;
|
||||||
//
|
CHECK(assert_container_equal(expectedOrphans2|indirected, orphans2|indirected));
|
||||||
///* ************************************************************************* */
|
}
|
||||||
//TEST( BayesTree, removeTop2 )
|
|
||||||
//{
|
/* ************************************************************************* */
|
||||||
// SymbolicBayesTreeUnordered bayesTree = createAsiaSymbolicBayesTree();
|
TEST( BayesTree, removeTop2 )
|
||||||
//
|
{
|
||||||
// // create two factors to be inserted
|
SymbolicBayesTreeUnordered bayesTree = asiaBayesTree;
|
||||||
// SymbolicFactorGraph newFactors;
|
|
||||||
// newFactors.push_factor(_B_);
|
// create two factors to be inserted
|
||||||
// newFactors.push_factor(_S_);
|
//SymbolicFactorGraph newFactors;
|
||||||
//
|
//newFactors.push_factor(_B_);
|
||||||
// // Remove the contaminated part of the Bayes tree
|
//newFactors.push_factor(_S_);
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
// Remove the contaminated part of the Bayes tree
|
||||||
// list<Index> keys; keys += _B_,_S_;
|
SymbolicBayesNetUnordered bn;
|
||||||
// bayesTree.removeTop(keys, bn, orphans);
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
// SymbolicFactorGraph factors(bn);
|
list<Key> keys; keys += _B_,_S_;
|
||||||
//
|
bayesTree.removeTop(keys, bn, orphans);
|
||||||
// // Check expected outcome
|
SymbolicFactorGraphUnordered factors(bn);
|
||||||
// SymbolicFactorGraph expected;
|
|
||||||
// expected.push_factor(_E_,_L_,_B_);
|
// Check expected outcome
|
||||||
//// expected.push_factor(_L_,_B_);
|
SymbolicFactorGraphUnordered expected;
|
||||||
//// expected.push_factor(_B_);
|
expected.push_factor(_E_,_L_,_B_);
|
||||||
// expected.push_factor(_S_,_L_,_B_);
|
// expected.push_factor(_L_,_B_);
|
||||||
// CHECK(assert_equal(expected, factors));
|
// expected.push_factor(_B_);
|
||||||
// SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
expected.push_factor(_S_,_L_,_B_);
|
||||||
// expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
CHECK(assert_equal(expected, factors));
|
||||||
// CHECK(assert_equal(expectedOrphans, orphans));
|
SymbolicBayesTreeUnordered::Cliques expectedOrphans;
|
||||||
//}
|
expectedOrphans += bayesTree[_T_], bayesTree[_X_];
|
||||||
//
|
CHECK(assert_container_equal(expectedOrphans|indirected, orphans|indirected));
|
||||||
///* ************************************************************************* */
|
}
|
||||||
//TEST( BayesTree, removeTop3 )
|
|
||||||
//{
|
/* ************************************************************************* */
|
||||||
// const Index _x4_=5, _l5_=6;
|
TEST( BayesTree, removeTop3 )
|
||||||
// // simple test case that failed after COLAMD was fixed/activated
|
{
|
||||||
// SymbolicConditionalUnordered::shared_ptr
|
const Key _x4_=5, _l5_=6;
|
||||||
// X(new SymbolicConditionalUnordered(_l5_)),
|
// simple test case that failed after COLAMD was fixed/activated
|
||||||
// A(new SymbolicConditionalUnordered(_x4_, _l5_)),
|
SymbolicConditionalUnordered::shared_ptr
|
||||||
// B(new SymbolicConditionalUnordered(_x2_, _x4_)),
|
X(new SymbolicConditionalUnordered(_l5_)),
|
||||||
// C(new SymbolicConditionalUnordered(_x3_, _x2_));
|
A(new SymbolicConditionalUnordered(_x4_, _l5_)),
|
||||||
//
|
B(new SymbolicConditionalUnordered(_x2_, _x4_)),
|
||||||
//// Ordering newOrdering;
|
C(new SymbolicConditionalUnordered(_x3_, _x2_));
|
||||||
//// newOrdering += _x3_, _x2_, _x1_, _l2_, _l1_, _x4_, _l5_;
|
|
||||||
// SymbolicBayesTreeUnordered bayesTree;
|
// Ordering newOrdering;
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, X);
|
// newOrdering += _x3_, _x2_, _x1_, _l2_, _l1_, _x4_, _l5_;
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, A);
|
SymbolicBayesTreeUnordered bayesTree;
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, B);
|
SymbolicBayesTreeUnordered::insert(bayesTree, X);
|
||||||
// SymbolicBayesTreeUnordered::insert(bayesTree, C);
|
SymbolicBayesTreeUnordered::insert(bayesTree, A);
|
||||||
//
|
SymbolicBayesTreeUnordered::insert(bayesTree, B);
|
||||||
// // remove all
|
SymbolicBayesTreeUnordered::insert(bayesTree, C);
|
||||||
// list<Index> keys;
|
|
||||||
// keys += _l5_, _x2_, _x3_, _x4_;
|
// remove all
|
||||||
// BayesNet<SymbolicConditionalUnordered> bn;
|
list<Index> keys;
|
||||||
// SymbolicBayesTreeUnordered::Cliques orphans;
|
keys += _l5_, _x2_, _x3_, _x4_;
|
||||||
// bayesTree.removeTop(keys, bn, orphans);
|
BayesNet<SymbolicConditionalUnordered> bn;
|
||||||
// SymbolicFactorGraph factors(bn);
|
SymbolicBayesTreeUnordered::Cliques orphans;
|
||||||
//
|
bayesTree.removeTop(keys, bn, orphans);
|
||||||
// CHECK(orphans.size() == 0);
|
SymbolicFactorGraph factors(bn);
|
||||||
//}
|
|
||||||
//
|
CHECK(orphans.size() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
/////* ************************************************************************* */
|
/////* ************************************************************************* */
|
||||||
/////**
|
/////**
|
||||||
//// * x2 - x3 - x4 - x5
|
//// * x2 - x3 - x4 - x5
|
||||||
|
@ -457,8 +471,6 @@ TEST( SymbolicBayesTreeUnordered, thinTree ) {
|
||||||
bayesNet.push_back(boost::make_shared<SymbolicConditionalUnordered>(1, 8, 12));
|
bayesNet.push_back(boost::make_shared<SymbolicConditionalUnordered>(1, 8, 12));
|
||||||
bayesNet.push_back(boost::make_shared<SymbolicConditionalUnordered>(0, 8, 12));
|
bayesNet.push_back(boost::make_shared<SymbolicConditionalUnordered>(0, 8, 12));
|
||||||
|
|
||||||
bayesNet.print("bayesNet: ");
|
|
||||||
|
|
||||||
if (debug) {
|
if (debug) {
|
||||||
GTSAM_PRINT(bayesNet);
|
GTSAM_PRINT(bayesNet);
|
||||||
bayesNet.saveGraph("/tmp/symbolicBayesNet.dot");
|
bayesNet.saveGraph("/tmp/symbolicBayesNet.dot");
|
||||||
|
@ -467,7 +479,6 @@ TEST( SymbolicBayesTreeUnordered, thinTree ) {
|
||||||
// create a BayesTree out of a Bayes net
|
// create a BayesTree out of a Bayes net
|
||||||
OrderingUnordered ordering(bayesNet.keys());
|
OrderingUnordered ordering(bayesNet.keys());
|
||||||
SymbolicBayesTreeUnordered bayesTree = *SymbolicFactorGraphUnordered(bayesNet).eliminateMultifrontal(ordering);
|
SymbolicBayesTreeUnordered bayesTree = *SymbolicFactorGraphUnordered(bayesNet).eliminateMultifrontal(ordering);
|
||||||
bayesTree.print("bayesTree: ");
|
|
||||||
if (debug) {
|
if (debug) {
|
||||||
GTSAM_PRINT(bayesTree);
|
GTSAM_PRINT(bayesTree);
|
||||||
bayesTree.saveGraph("/tmp/SymbolicBayesTreeUnordered.dot");
|
bayesTree.saveGraph("/tmp/SymbolicBayesTreeUnordered.dot");
|
||||||
|
@ -676,8 +687,6 @@ TEST(SymbolicBayesTreeUnordered, complicatedMarginal)
|
||||||
bt.saveGraph("/tmp/SymbolicBayesTreeUnordered.dot");
|
bt.saveGraph("/tmp/SymbolicBayesTreeUnordered.dot");
|
||||||
}
|
}
|
||||||
|
|
||||||
bt.print("bt: ");
|
|
||||||
|
|
||||||
// Shortcut on 9
|
// Shortcut on 9
|
||||||
{
|
{
|
||||||
SymbolicBayesTreeUnordered::Clique::shared_ptr c = bt[9];
|
SymbolicBayesTreeUnordered::Clique::shared_ptr c = bt[9];
|
||||||
|
|
Loading…
Reference in New Issue