Avoid creating duplicate symbolic factors in JunctionTree constructor (small optimization)
parent
701bb0054d
commit
1f5f86f6e8
|
@ -23,7 +23,7 @@
|
||||||
#include <gtsam/inference/JunctionTree.h>
|
#include <gtsam/inference/JunctionTree.h>
|
||||||
#include <gtsam/inference/ClusterTree-inst.h>
|
#include <gtsam/inference/ClusterTree-inst.h>
|
||||||
#include <gtsam/symbolic/SymbolicConditional.h>
|
#include <gtsam/symbolic/SymbolicConditional.h>
|
||||||
#include <gtsam/symbolic/SymbolicFactorGraph.h>
|
#include <gtsam/symbolic/SymbolicFactor-inst.h>
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
|
@ -130,18 +130,16 @@ namespace gtsam {
|
||||||
// current node did not introduce any parents beyond those already in the child.
|
// current node did not introduce any parents beyond those already in the child.
|
||||||
|
|
||||||
// Do symbolic elimination for this node
|
// Do symbolic elimination for this node
|
||||||
SymbolicFactorGraph symbolicFactors;
|
class : public FactorGraph<Factor> {} symbolicFactors;
|
||||||
symbolicFactors.reserve(ETreeNode->factors.size() + myData.childSymbolicFactors.size());
|
symbolicFactors.reserve(ETreeNode->factors.size() + myData.childSymbolicFactors.size());
|
||||||
// Add symbolic versions of the ETree node factors
|
// Add ETree node factors
|
||||||
BOOST_FOREACH(const typename GRAPH::sharedFactor& factor, ETreeNode->factors) {
|
symbolicFactors += ETreeNode->factors;
|
||||||
symbolicFactors.push_back(boost::make_shared<SymbolicFactor>(
|
|
||||||
SymbolicFactor::FromKeys(*factor)));
|
|
||||||
}
|
|
||||||
// Add symbolic factors passed up from children
|
// Add symbolic factors passed up from children
|
||||||
symbolicFactors.push_back(myData.childSymbolicFactors.begin(), myData.childSymbolicFactors.end());
|
symbolicFactors += myData.childSymbolicFactors;
|
||||||
|
|
||||||
Ordering keyAsOrdering; keyAsOrdering.push_back(ETreeNode->key);
|
Ordering keyAsOrdering; keyAsOrdering.push_back(ETreeNode->key);
|
||||||
std::pair<SymbolicConditional::shared_ptr, SymbolicFactor::shared_ptr> symbolicElimResult =
|
std::pair<SymbolicConditional::shared_ptr, SymbolicFactor::shared_ptr> symbolicElimResult =
|
||||||
EliminateSymbolic(symbolicFactors, keyAsOrdering);
|
internal::EliminateSymbolic(symbolicFactors, keyAsOrdering);
|
||||||
|
|
||||||
// Store symbolic elimination results in the parent
|
// Store symbolic elimination results in the parent
|
||||||
myData.parentData->childSymbolicConditionals.push_back(symbolicElimResult.first);
|
myData.parentData->childSymbolicConditionals.push_back(symbolicElimResult.first);
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace gtsam
|
||||||
std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(), frontals.end(), orderedKeys.begin() + nFrontals);
|
std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(), frontals.end(), orderedKeys.begin() + nFrontals);
|
||||||
|
|
||||||
// Return resulting conditional and factor
|
// Return resulting conditional and factor
|
||||||
return make_pair(
|
return std::make_pair(
|
||||||
boost::make_shared<SymbolicConditional>(
|
boost::make_shared<SymbolicConditional>(
|
||||||
SymbolicConditional::FromKeys(orderedKeys, nFrontals)),
|
SymbolicConditional::FromKeys(orderedKeys, nFrontals)),
|
||||||
boost::make_shared<SymbolicFactor>(
|
boost::make_shared<SymbolicFactor>(
|
||||||
|
|
Loading…
Reference in New Issue