diff --git a/gtsam/inference/BayesNet-inl.h b/gtsam/inference/BayesNet-inl.h index 57cef4634..a9a405ac6 100644 --- a/gtsam/inference/BayesNet-inl.h +++ b/gtsam/inference/BayesNet-inl.h @@ -26,6 +26,7 @@ #include // for += using boost::assign::operator+=; +#include #include #include @@ -39,6 +40,24 @@ namespace gtsam { conditional->print(); } + /* ************************************************************************* */ + template + void BayesNet::printStats(const std::string& s) const { + std::cout << s; + const size_t n = conditionals_.size(); + size_t max_size = 0; + size_t total = 0; + BOOST_REVERSE_FOREACH(sharedConditional conditional, conditionals_) { + max_size = std::max(max_size, conditional->size()); + total += conditional->size(); + } + std::cout << s + << "maximum clique size = " << max_size << std::endl + << "average clique size = " << total / n << std::endl + << "density = " << 100.0 * total / (double) (n*(n+1)/2) << " %" << std::endl + << std::endl; + } + /* ************************************************************************* */ template bool BayesNet::equals(const BayesNet& cbn, double tol) const { diff --git a/gtsam/inference/BayesNet.h b/gtsam/inference/BayesNet.h index f6721816c..e465fdfd3 100644 --- a/gtsam/inference/BayesNet.h +++ b/gtsam/inference/BayesNet.h @@ -90,6 +90,9 @@ public: /** print */ void print(const std::string& s = "") const; + /** print statistics */ + void printStats(const std::string& s = "") const; + /** check equality */ bool equals(const BayesNet& other, double tol = 1e-9) const; diff --git a/gtsam/inference/BayesTree-inl.h b/gtsam/inference/BayesTree-inl.h index 8e9d769a6..b3bc9f81e 100644 --- a/gtsam/inference/BayesTree-inl.h +++ b/gtsam/inference/BayesTree-inl.h @@ -102,6 +102,18 @@ namespace gtsam { } } + + /* ************************************************************************* */ + template + void BayesTree::CliqueStats::print(const std::string& s) const { + std::cout << s + <<"\navg Conditional Size: " << avgConditionalSize + << "\nmax Conditional Size: " << maxConditionalSize + << "\navg Separator Size: " << avgSeparatorSize + << "\nmax Separator Size: " << maxSeparatorSize + << std::endl; + } + /* ************************************************************************* */ template typename BayesTree::CliqueStats diff --git a/gtsam/inference/BayesTree.h b/gtsam/inference/BayesTree.h index 9c38d6496..6413e4b0d 100644 --- a/gtsam/inference/BayesTree.h +++ b/gtsam/inference/BayesTree.h @@ -81,6 +81,7 @@ namespace gtsam { std::size_t maxConditionalSize; double avgSeparatorSize; std::size_t maxSeparatorSize; + void print(const std::string& s = "") const ; }; /** store all the sizes */ diff --git a/gtsam/nonlinear/NonlinearISAM.cpp b/gtsam/nonlinear/NonlinearISAM.cpp index 6b5ea31bc..b2135fedd 100644 --- a/gtsam/nonlinear/NonlinearISAM.cpp +++ b/gtsam/nonlinear/NonlinearISAM.cpp @@ -118,13 +118,7 @@ void NonlinearISAM::print(const string& s, const KeyFormatter& keyFormatter) con /* ************************************************************************* */ void NonlinearISAM::printStats() const { - gtsam::GaussianISAM::CliqueData data = isam_.getCliqueData(); - gtsam::GaussianISAM::CliqueStats stats = data.getStats(); - cout << "\navg Conditional Size: " << stats.avgConditionalSize; - cout << "\nmax Conditional Size: " << stats.maxConditionalSize; - cout << "\navg Separator Size: " << stats.avgSeparatorSize; - cout << "\nmax Separator Size: " << stats.maxSeparatorSize; - cout << endl; + isam_.getCliqueData().getStats().print(); } /* ************************************************************************* */