Added method saveGraph for BayesNet.
parent
090133f944
commit
ea2c13bca3
1
gtsam.h
1
gtsam.h
|
@ -779,6 +779,7 @@ virtual class BayesNet {
|
|||
// Standard interface
|
||||
size_t size() const;
|
||||
void printStats(string s) const;
|
||||
void saveGraph(string s) const;
|
||||
CONDITIONAL* front() const;
|
||||
CONDITIONAL* back() const;
|
||||
void push_back(CONDITIONAL* conditional);
|
||||
|
|
|
@ -41,6 +41,15 @@ namespace gtsam {
|
|||
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>
|
||||
void BayesNet<CONDITIONAL>::printStats(const std::string& s) const {
|
||||
|
@ -60,11 +69,23 @@ namespace gtsam {
|
|||
|
||||
/* ************************************************************************* */
|
||||
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));
|
||||
void BayesNet<CONDITIONAL>::saveGraph(const std::string &s,
|
||||
const IndexFormatter& indexFormatter) const {
|
||||
std::ofstream of(s.c_str());
|
||||
of << "digraph G{\n";
|
||||
|
||||
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 */
|
||||
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 */
|
||||
FastList<Index> ordering() const;
|
||||
|
||||
|
|
|
@ -188,6 +188,20 @@ TEST_UNSAFE(SymbolicBayesNet, popLeaf) {
|
|||
//#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() {
|
||||
TestResult tr;
|
||||
|
|
Loading…
Reference in New Issue