Added partial multifrontal elimination unit test
parent
aa3e9b9230
commit
73179dbabc
|
|
@ -152,7 +152,7 @@ TEST(EliminationTree, eliminateAsiaExample)
|
||||||
(boost::make_shared<SymbolicConditionalUnordered>(_L_, _B_))
|
(boost::make_shared<SymbolicConditionalUnordered>(_L_, _B_))
|
||||||
(boost::make_shared<SymbolicConditionalUnordered>(_B_));
|
(boost::make_shared<SymbolicConditionalUnordered>(_B_));
|
||||||
|
|
||||||
SymbolicBayesNetUnordered actual = *createAsiaGraph().eliminateSequential(
|
SymbolicBayesNetUnordered actual = *asiaGraph.eliminateSequential(
|
||||||
EliminateSymbolicUnordered, asiaOrdering);
|
EliminateSymbolicUnordered, asiaOrdering);
|
||||||
|
|
||||||
EXPECT(assert_equal(expected, actual));
|
EXPECT(assert_equal(expected, actual));
|
||||||
|
|
@ -176,7 +176,8 @@ TEST(EliminationTree, disconnected_graph) {
|
||||||
|
|
||||||
OrderingUnordered order;
|
OrderingUnordered order;
|
||||||
order += 0,1,2,3,4;
|
order += 0,1,2,3,4;
|
||||||
SymbolicBayesNetUnordered actual = *SymbolicEliminationTreeUnordered(fg, order).eliminate(EliminateSymbolicUnordered).first;
|
SymbolicBayesNetUnordered actual = *SymbolicEliminationTreeUnordered(fg, order)
|
||||||
|
.eliminate(EliminateSymbolicUnordered).first;
|
||||||
|
|
||||||
EXPECT(assert_equal(expected,actual));
|
EXPECT(assert_equal(expected,actual));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,38 +19,66 @@
|
||||||
|
|
||||||
#include <gtsam/symbolic/SymbolicFactorGraphUnordered.h>
|
#include <gtsam/symbolic/SymbolicFactorGraphUnordered.h>
|
||||||
#include <gtsam/symbolic/SymbolicBayesNetUnordered.h>
|
#include <gtsam/symbolic/SymbolicBayesNetUnordered.h>
|
||||||
|
#include <boost/assign/list_of.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace gtsam;
|
using namespace gtsam;
|
||||||
|
using namespace boost::assign;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const SymbolicFactorGraphUnordered simpleTestGraph = list_of
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(0,1))
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(0,2))
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(1,3))
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(1,4))
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(2,3))
|
||||||
|
(boost::make_shared<SymbolicFactorUnordered>(4,5));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(FactorGraph, eliminateFrontals) {
|
TEST(SymbolicFactorGraph, eliminatePartialSequential)
|
||||||
|
{
|
||||||
|
SymbolicBayesNetUnordered expectedBayesNet;
|
||||||
|
expectedBayesNet.add(SymbolicConditionalUnordered::FromKeys(list_of(0)(1)(2), 1));
|
||||||
|
expectedBayesNet.add(SymbolicConditionalUnordered::FromKeys(list_of(1)(2)(3)(4), 1));
|
||||||
|
|
||||||
SymbolicFactorGraph sfgOrig;
|
SymbolicFactorGraphUnordered expectedSfg;
|
||||||
sfgOrig.push_factor(0,1);
|
|
||||||
sfgOrig.push_factor(0,2);
|
|
||||||
sfgOrig.push_factor(1,3);
|
|
||||||
sfgOrig.push_factor(1,4);
|
|
||||||
sfgOrig.push_factor(2,3);
|
|
||||||
sfgOrig.push_factor(4,5);
|
|
||||||
|
|
||||||
IndexConditional::shared_ptr actualCond;
|
|
||||||
SymbolicFactorGraph actualSfg;
|
|
||||||
boost::tie(actualCond, actualSfg) = sfgOrig.eliminateFrontals(2);
|
|
||||||
|
|
||||||
vector<Index> condIndices;
|
|
||||||
condIndices += 0,1,2,3,4;
|
|
||||||
IndexConditional expectedCond(condIndices, 2);
|
|
||||||
|
|
||||||
SymbolicFactorGraph expectedSfg;
|
|
||||||
expectedSfg.push_factor(2,3);
|
expectedSfg.push_factor(2,3);
|
||||||
expectedSfg.push_factor(4,5);
|
expectedSfg.push_factor(4,5);
|
||||||
expectedSfg.push_factor(2,3,4);
|
expectedSfg.push_factor(2,3,4);
|
||||||
|
|
||||||
EXPECT(assert_equal(expectedSfg, actualSfg));
|
SymbolicBayesNetUnordered::shared_ptr actualBayesNet;
|
||||||
EXPECT(assert_equal(expectedCond, *actualCond));
|
SymbolicFactorGraphUnordered::shared_ptr actualSfg;
|
||||||
|
boost::tie(actualBayesNet, actualSfg) = simpleTestGraph.eliminatePartialSequential(
|
||||||
|
EliminateSymbolicUnordered, OrderingUnordered(list_of(0)(1)));
|
||||||
|
|
||||||
|
EXPECT(assert_equal(expectedSfg, *actualSfg));
|
||||||
|
EXPECT(assert_equal(expectedBayesNet, *actualBayesNet));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
TEST(SymbolicFactorGraph, eliminatePartialMultifrontal)
|
||||||
|
{
|
||||||
|
SymbolicBayesTreeUnordered expectedBayesTree;
|
||||||
|
SymbolicConditionalUnordered::shared_ptr root = boost::make_shared<SymbolicConditionalUnordered>(
|
||||||
|
SymbolicConditionalUnordered::FromKeys(list_of(5)(4)(1), 2));
|
||||||
|
expectedBayesTree.insertRoot(boost::make_shared<SymbolicBayesTreeCliqueUnordered>(root));
|
||||||
|
|
||||||
|
SymbolicFactorGraphUnordered expectedFactorGraph;
|
||||||
|
expectedFactorGraph.push_factor(0,1);
|
||||||
|
expectedFactorGraph.push_factor(0,2);
|
||||||
|
expectedFactorGraph.push_factor(1,3);
|
||||||
|
expectedFactorGraph.push_factor(2,3);
|
||||||
|
expectedFactorGraph.push_factor(1);
|
||||||
|
|
||||||
|
SymbolicBayesTreeUnordered::shared_ptr actualBayesTree;
|
||||||
|
SymbolicFactorGraphUnordered::shared_ptr actualFactorGraph;
|
||||||
|
boost::tie(actualBayesTree, actualFactorGraph) = simpleTestGraph.eliminatePartialMultifrontal(
|
||||||
|
EliminateSymbolicUnordered, OrderingUnordered(list_of(4)(5)));
|
||||||
|
|
||||||
|
EXPECT(assert_equal(expectedFactorGraph, *actualFactorGraph));
|
||||||
|
EXPECT(assert_equal(expectedBayesTree, *actualBayesTree));
|
||||||
|
}
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
//TEST(SymbolicFactorGraph, eliminateFrontals) {
|
//TEST(SymbolicFactorGraph, eliminateFrontals) {
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue