added SymbolicFactor constructor that takes a SymbolicConditional
parent
c7e76891da
commit
1edcdb6f80
|
@ -19,6 +19,14 @@ using namespace std;
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
SymbolicFactor::SymbolicFactor(const boost::shared_ptr<SymbolicConditional>& c) {
|
||||||
|
// initialize keys_ with parents
|
||||||
|
keys_ = c->parents();
|
||||||
|
// add key on which conditional is defined
|
||||||
|
keys_.push_back(c->key());
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
SymbolicFactor::SymbolicFactor(const vector<shared_ptr> & factors) {
|
SymbolicFactor::SymbolicFactor(const vector<shared_ptr> & factors) {
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,11 @@ namespace gtsam {
|
||||||
|
|
||||||
typedef boost::shared_ptr<SymbolicFactor> shared_ptr;
|
typedef boost::shared_ptr<SymbolicFactor> shared_ptr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct from SymbolicConditional
|
||||||
|
*/
|
||||||
|
SymbolicFactor(const boost::shared_ptr<SymbolicConditional>& c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor from a list of keys
|
* Constructor from a list of keys
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,6 +13,7 @@ using namespace boost::assign;
|
||||||
#include "smallExample.h"
|
#include "smallExample.h"
|
||||||
#include "SymbolicFactorGraph.h"
|
#include "SymbolicFactorGraph.h"
|
||||||
#include "SymbolicBayesNet.h"
|
#include "SymbolicBayesNet.h"
|
||||||
|
#include "FactorGraph-inl.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace gtsam;
|
using namespace gtsam;
|
||||||
|
@ -87,7 +88,7 @@ TEST( SymbolicFactorGraph, factors)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST( GaussianFactorGraph, removeAndCombineFactors )
|
TEST( SymbolicFactorGraph, removeAndCombineFactors )
|
||||||
{
|
{
|
||||||
// create a test graph
|
// create a test graph
|
||||||
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
|
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
|
||||||
|
@ -104,7 +105,7 @@ TEST( GaussianFactorGraph, removeAndCombineFactors )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST( GaussianFactorGraph, eliminateOne )
|
TEST( SymbolicFactorGraph, eliminateOne )
|
||||||
{
|
{
|
||||||
// create a test graph
|
// create a test graph
|
||||||
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
|
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
|
||||||
|
@ -144,6 +145,41 @@ TEST( GaussianFactorGraph, eliminate )
|
||||||
CHECK(assert_equal(expected,actual));
|
CHECK(assert_equal(expected,actual));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
TEST( SymbolicFactorGraph, constructFromBayesNet )
|
||||||
|
{
|
||||||
|
// create expected factor graph
|
||||||
|
FactorGraph<SymbolicFactor> expected;
|
||||||
|
|
||||||
|
list<string> f1_keys; f1_keys += "l1","x1","x2";
|
||||||
|
SymbolicFactor::shared_ptr f1(new SymbolicFactor(f1_keys));
|
||||||
|
expected.push_back(f1);
|
||||||
|
|
||||||
|
list<string> f2_keys; f2_keys += "x1","l1";
|
||||||
|
SymbolicFactor::shared_ptr f2(new SymbolicFactor(f2_keys));
|
||||||
|
expected.push_back(f2);
|
||||||
|
|
||||||
|
list<string> f3_keys; f3_keys += "x1";
|
||||||
|
SymbolicFactor::shared_ptr f3(new SymbolicFactor(f3_keys));
|
||||||
|
expected.push_back(f3);
|
||||||
|
|
||||||
|
|
||||||
|
// create Bayes Net
|
||||||
|
SymbolicConditional::shared_ptr x2(new SymbolicConditional("x2", "l1", "x1"));
|
||||||
|
SymbolicConditional::shared_ptr l1(new SymbolicConditional("l1", "x1"));
|
||||||
|
SymbolicConditional::shared_ptr x1(new SymbolicConditional("x1"));
|
||||||
|
|
||||||
|
SymbolicBayesNet bayesNet;
|
||||||
|
bayesNet.push_back(x2);
|
||||||
|
bayesNet.push_back(l1);
|
||||||
|
bayesNet.push_back(x1);
|
||||||
|
|
||||||
|
// create actual factor graph from a Bayes Net
|
||||||
|
FactorGraph<SymbolicFactor> actual(bayesNet);
|
||||||
|
|
||||||
|
CHECK(assert_equal(expected,actual));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
int main() {
|
int main() {
|
||||||
TestResult tr;
|
TestResult tr;
|
||||||
|
|
Loading…
Reference in New Issue