Added EliminateableFactorGraph::marginal and eliminatePartialSequential with vector of keys instead of ordering
parent
972695da3a
commit
61fe49ab7e
|
|
@ -101,6 +101,26 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
template<class FACTORGRAPH>
|
||||||
|
std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
|
EliminateableFactorGraph<FACTORGRAPH>::eliminatePartialSequential(
|
||||||
|
const std::vector<Key>& variables, const Eliminate& function, OptionalVariableIndex variableIndex) const
|
||||||
|
{
|
||||||
|
if(variableIndex) {
|
||||||
|
gttic(eliminatePartialSequential);
|
||||||
|
// Compute full ordering
|
||||||
|
Ordering fullOrdering = Ordering::COLAMDConstrainedFirst(*variableIndex, variables);
|
||||||
|
|
||||||
|
// Split off the part of the ordering for the variables being eliminated
|
||||||
|
Ordering ordering(fullOrdering.begin(), fullOrdering.begin() + variables.size());
|
||||||
|
return eliminatePartialSequential(ordering, function, variableIndex);
|
||||||
|
} else {
|
||||||
|
// If no variable index is provided, compute one and call this function again
|
||||||
|
return eliminatePartialSequential(variables, function, VariableIndex(asDerived()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
template<class FACTORGRAPH>
|
template<class FACTORGRAPH>
|
||||||
std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
|
std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
|
|
@ -231,4 +251,31 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
template<class FACTORGRAPH>
|
||||||
|
boost::shared_ptr<FACTORGRAPH>
|
||||||
|
EliminateableFactorGraph<FACTORGRAPH>::marginal(
|
||||||
|
const std::vector<Key>& variables,
|
||||||
|
const Eliminate& function = EliminationTraits::DefaultEliminate,
|
||||||
|
OptionalVariableIndex variableIndex = boost::none) const
|
||||||
|
{
|
||||||
|
if(variableIndex)
|
||||||
|
{
|
||||||
|
// Compute a total ordering for all variables
|
||||||
|
Ordering totalOrdering = Ordering::COLAMDConstrainedLast(*variableIndex, variables);
|
||||||
|
|
||||||
|
// Split out the part for the marginalized variables
|
||||||
|
Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - variables.size());
|
||||||
|
|
||||||
|
// Eliminate and return the remaining factor graph
|
||||||
|
return eliminatePartialMultifrontal(marginalizationOrdering, function, *variableIndex).second;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If no variable index is provided, compute one and call this function again
|
||||||
|
return marginal(variables, function, VariableIndex(asDerived()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,12 @@ namespace gtsam {
|
||||||
const Eliminate& function = EliminationTraits::DefaultEliminate,
|
const Eliminate& function = EliminationTraits::DefaultEliminate,
|
||||||
OptionalVariableIndex variableIndex = boost::none) const;
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
|
/** Compute the marginal factor graph of the requested variables. */
|
||||||
|
boost::shared_ptr<FactorGraphType> marginal(
|
||||||
|
const std::vector<Key>& variables,
|
||||||
|
const Eliminate& function = EliminationTraits::DefaultEliminate,
|
||||||
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Access the derived factor graph class
|
// Access the derived factor graph class
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue