added SymbolicFactor constructor that takes a SymbolicConditional

release/4.3a0
Frank Dellaert 2009-11-18 17:27:27 +00:00
parent c7e76891da
commit 1edcdb6f80
3 changed files with 51 additions and 2 deletions

View File

@ -19,6 +19,14 @@ using namespace std;
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) {

View File

@ -29,6 +29,11 @@ namespace gtsam {
typedef boost::shared_ptr<SymbolicFactor> shared_ptr;
/**
* Construct from SymbolicConditional
*/
SymbolicFactor(const boost::shared_ptr<SymbolicConditional>& c);
/**
* Constructor from a list of keys
*/

View File

@ -13,6 +13,7 @@ using namespace boost::assign;
#include "smallExample.h"
#include "SymbolicFactorGraph.h"
#include "SymbolicBayesNet.h"
#include "FactorGraph-inl.h"
using namespace std;
using namespace gtsam;
@ -87,7 +88,7 @@ TEST( SymbolicFactorGraph, factors)
}
/* ************************************************************************* */
TEST( GaussianFactorGraph, removeAndCombineFactors )
TEST( SymbolicFactorGraph, removeAndCombineFactors )
{
// create a test graph
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
@ -104,7 +105,7 @@ TEST( GaussianFactorGraph, removeAndCombineFactors )
}
/* ************************************************************************* */
TEST( GaussianFactorGraph, eliminateOne )
TEST( SymbolicFactorGraph, eliminateOne )
{
// create a test graph
GaussianFactorGraph factorGraph = createGaussianFactorGraph();
@ -144,6 +145,41 @@ TEST( GaussianFactorGraph, eliminate )
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() {
TestResult tr;