Added method saveGraph for BayesNet.
parent
090133f944
commit
ea2c13bca3
1
gtsam.h
1
gtsam.h
|
@ -779,6 +779,7 @@ virtual class BayesNet {
|
||||||
// Standard interface
|
// Standard interface
|
||||||
size_t size() const;
|
size_t size() const;
|
||||||
void printStats(string s) const;
|
void printStats(string s) const;
|
||||||
|
void saveGraph(string s) const;
|
||||||
CONDITIONAL* front() const;
|
CONDITIONAL* front() const;
|
||||||
CONDITIONAL* back() const;
|
CONDITIONAL* back() const;
|
||||||
void push_back(CONDITIONAL* conditional);
|
void push_back(CONDITIONAL* conditional);
|
||||||
|
|
|
@ -41,6 +41,15 @@ namespace gtsam {
|
||||||
conditional->print("Conditional", formatter);
|
conditional->print("Conditional", formatter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
template<class CONDITIONAL>
|
||||||
|
bool BayesNet<CONDITIONAL>::equals(const BayesNet& cbn, double tol) const {
|
||||||
|
if (size() != cbn.size())
|
||||||
|
return false;
|
||||||
|
return std::equal(conditionals_.begin(), conditionals_.end(),
|
||||||
|
cbn.conditionals_.begin(), equals_star<CONDITIONAL>(tol));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
template<class CONDITIONAL>
|
template<class CONDITIONAL>
|
||||||
void BayesNet<CONDITIONAL>::printStats(const std::string& s) const {
|
void BayesNet<CONDITIONAL>::printStats(const std::string& s) const {
|
||||||
|
@ -60,11 +69,23 @@ namespace gtsam {
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
template<class CONDITIONAL>
|
template<class CONDITIONAL>
|
||||||
bool BayesNet<CONDITIONAL>::equals(const BayesNet& cbn, double tol) const {
|
void BayesNet<CONDITIONAL>::saveGraph(const std::string &s,
|
||||||
if (size() != cbn.size())
|
const IndexFormatter& indexFormatter) const {
|
||||||
return false;
|
std::ofstream of(s.c_str());
|
||||||
return std::equal(conditionals_.begin(), conditionals_.end(),
|
of << "digraph G{\n";
|
||||||
cbn.conditionals_.begin(), equals_star<CONDITIONAL>(tol));
|
|
||||||
|
BOOST_FOREACH(typename CONDITIONAL::shared_ptr conditional, conditionals_) {
|
||||||
|
typename CONDITIONAL::Frontals frontals = conditional->frontals();
|
||||||
|
Index me = frontals.front();
|
||||||
|
// of << me << std::endl;
|
||||||
|
typename CONDITIONAL::Parents parents = conditional->parents();
|
||||||
|
BOOST_FOREACH(Index p, parents)
|
||||||
|
of << p << "->" << me << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
of << "}";
|
||||||
|
of.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -108,6 +108,10 @@ public:
|
||||||
/** print statistics */
|
/** print statistics */
|
||||||
void printStats(const std::string& s = "") const;
|
void printStats(const std::string& s = "") const;
|
||||||
|
|
||||||
|
/** save dot graph */
|
||||||
|
void saveGraph(const std::string &s, const IndexFormatter& indexFormatter =
|
||||||
|
DefaultIndexFormatter) const;
|
||||||
|
|
||||||
/** return keys in reverse topological sort order, i.e., elimination order */
|
/** return keys in reverse topological sort order, i.e., elimination order */
|
||||||
FastList<Index> ordering() const;
|
FastList<Index> ordering() const;
|
||||||
|
|
||||||
|
|
|
@ -188,6 +188,20 @@ TEST_UNSAFE(SymbolicBayesNet, popLeaf) {
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
TEST(SymbolicBayesNet, saveGraph) {
|
||||||
|
SymbolicBayesNet bn;
|
||||||
|
bn += IndexConditional::shared_ptr(new IndexConditional(_A_, _B_));
|
||||||
|
std::vector<Index> keys;
|
||||||
|
keys.push_back(_B_);
|
||||||
|
keys.push_back(_C_);
|
||||||
|
keys.push_back(_D_);
|
||||||
|
bn += IndexConditional::shared_ptr(new IndexConditional(keys,2));
|
||||||
|
bn += IndexConditional::shared_ptr(new IndexConditional(_D_));
|
||||||
|
|
||||||
|
bn.saveGraph("SymbolicBayesNet.dot");
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
int main() {
|
int main() {
|
||||||
TestResult tr;
|
TestResult tr;
|
||||||
|
|
Loading…
Reference in New Issue