Added partial sequential and multifrontal elimination and const fixes
parent
da99a6e9fb
commit
642eca5fc5
|
@ -33,8 +33,8 @@ namespace gtsam {
|
||||||
{
|
{
|
||||||
if(ordering && variableIndex) {
|
if(ordering && variableIndex) {
|
||||||
// Do elimination
|
// Do elimination
|
||||||
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> > result =
|
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> > result
|
||||||
ELIMINATIONTREE(asDerived(), *variableIndex, *ordering).eliminate(function);
|
= ELIMINATIONTREE(asDerived(), *variableIndex, *ordering).eliminate(function);
|
||||||
// If any factors are remaining, the ordering was incomplete
|
// If any factors are remaining, the ordering was incomplete
|
||||||
if(!result.second->empty())
|
if(!result.second->empty())
|
||||||
throw InconsistentEliminationRequested();
|
throw InconsistentEliminationRequested();
|
||||||
|
@ -58,16 +58,14 @@ namespace gtsam {
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
template<class FACTOR, class FACTORGRAPH, class CONDITIONAL,
|
template<class FACTOR, class FACTORGRAPH, class CONDITIONAL,
|
||||||
class BAYESNET, class ELIMINATIONTREE, class BAYESTREE, class JUNCTIONTREE>
|
class BAYESNET, class ELIMINATIONTREE, class BAYESTREE, class JUNCTIONTREE>
|
||||||
boost::shared_ptr<BAYESTREE>
|
boost::shared_ptr<BAYESTREE>
|
||||||
EliminateableFactorGraph<FACTOR, FACTORGRAPH, CONDITIONAL, BAYESNET, ELIMINATIONTREE, BAYESTREE, JUNCTIONTREE>::
|
EliminateableFactorGraph<FACTOR, FACTORGRAPH, CONDITIONAL, BAYESNET, ELIMINATIONTREE, BAYESTREE, JUNCTIONTREE>
|
||||||
eliminateMultifrontal(
|
::eliminateMultifrontal(const Eliminate& function, OptionalOrdering ordering, OptionalVariableIndex variableIndex) const
|
||||||
const Eliminate& function, OptionalOrdering ordering, OptionalVariableIndex variableIndex) const
|
|
||||||
{
|
{
|
||||||
if(ordering && variableIndex) {
|
if(ordering && variableIndex) {
|
||||||
// Do elimination
|
|
||||||
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> > result;
|
|
||||||
// Do elimination with given ordering
|
// Do elimination with given ordering
|
||||||
result = JUNCTIONTREE(ELIMINATIONTREE(asDerived(), *variableIndex, *ordering)).eliminate(function);
|
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> > result
|
||||||
|
= JUNCTIONTREE(ELIMINATIONTREE(asDerived(), *variableIndex, *ordering)).eliminate(function);
|
||||||
// If any factors are remaining, the ordering was incomplete
|
// If any factors are remaining, the ordering was incomplete
|
||||||
if(!result.second->empty())
|
if(!result.second->empty())
|
||||||
throw InconsistentEliminationRequested();
|
throw InconsistentEliminationRequested();
|
||||||
|
@ -88,4 +86,39 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
template<class FACTOR, class FACTORGRAPH, class CONDITIONAL,
|
||||||
|
class BAYESNET, class ELIMINATIONTREE, class BAYESTREE, class JUNCTIONTREE>
|
||||||
|
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
|
EliminateableFactorGraph<FACTOR, FACTORGRAPH, CONDITIONAL, BAYESNET, ELIMINATIONTREE, BAYESTREE, JUNCTIONTREE>
|
||||||
|
::eliminatePartialSequential(const Eliminate& function, const OrderingUnordered& ordering,
|
||||||
|
OptionalVariableIndex variableIndex = boost::none) const
|
||||||
|
{
|
||||||
|
if(variableIndex) {
|
||||||
|
// Do elimination
|
||||||
|
return ELIMINATIONTREE(asDerived(), *variableIndex, ordering).eliminate(function);
|
||||||
|
} else {
|
||||||
|
// If no variable index is provided, compute one and call this function again
|
||||||
|
return eliminatePartialSequential(function, ordering, VariableIndexUnordered(asDerived()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
template<class FACTOR, class FACTORGRAPH, class CONDITIONAL,
|
||||||
|
class BAYESNET, class ELIMINATIONTREE, class BAYESTREE, class JUNCTIONTREE>
|
||||||
|
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
|
EliminateableFactorGraph<FACTOR, FACTORGRAPH, CONDITIONAL, BAYESNET, ELIMINATIONTREE, BAYESTREE, JUNCTIONTREE>
|
||||||
|
::eliminatePartialMultifrontal(const Eliminate& function, const OrderingUnordered& ordering,
|
||||||
|
OptionalVariableIndex variableIndex = boost::none) const
|
||||||
|
{
|
||||||
|
if(variableIndex) {
|
||||||
|
// Do elimination
|
||||||
|
return JUNCTIONTREE(ELIMINATIONTREE(asDerived(), *variableIndex, ordering)).eliminate(function);
|
||||||
|
} else {
|
||||||
|
// If no variable index is provided, compute one and call this function again
|
||||||
|
return eliminatePartialMultifrontal(function, ordering, VariableIndexUnordered(asDerived()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace gtsam {
|
||||||
* B = X\backslash A \f$. */
|
* B = X\backslash A \f$. */
|
||||||
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> >
|
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
eliminatePartialSequential(const Eliminate& function, const OrderingUnordered& ordering,
|
eliminatePartialSequential(const Eliminate& function, const OrderingUnordered& ordering,
|
||||||
OptionalVariableIndex variableIndex = boost::none);
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
/** Do sequential elimination of the given \c variables in an ordering computed by COLAMD to
|
/** Do sequential elimination of the given \c variables in an ordering computed by COLAMD to
|
||||||
* produce a Bayes net and a remaining factor graph. This computes the factorization \f$ p(X)
|
* produce a Bayes net and a remaining factor graph. This computes the factorization \f$ p(X)
|
||||||
|
@ -104,7 +104,7 @@ namespace gtsam {
|
||||||
* factor graph, and \f$ B = X\backslash A \f$. */
|
* factor graph, and \f$ B = X\backslash A \f$. */
|
||||||
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> >
|
std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
eliminatePartialSequential(const Eliminate& function, const std::vector<Key>& variables,
|
eliminatePartialSequential(const Eliminate& function, const std::vector<Key>& variables,
|
||||||
OptionalVariableIndex variableIndex = boost::none);
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
/** Do multifrontal elimination of the given \c variables in an ordering computed by COLAMD to
|
/** Do multifrontal elimination of the given \c variables in an ordering computed by COLAMD to
|
||||||
* produce a Bayes net and a remaining factor graph. This computes the factorization \f$ p(X)
|
* produce a Bayes net and a remaining factor graph. This computes the factorization \f$ p(X)
|
||||||
|
@ -112,7 +112,7 @@ namespace gtsam {
|
||||||
* factor graph, and \f$ B = X\backslash A \f$. */
|
* factor graph, and \f$ B = X\backslash A \f$. */
|
||||||
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> >
|
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
eliminatePartialMultifrontal(const Eliminate& function, const OrderingUnordered& ordering,
|
eliminatePartialMultifrontal(const Eliminate& function, const OrderingUnordered& ordering,
|
||||||
OptionalVariableIndex variableIndex = boost::none);
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
/** Do multifrontal elimination of some variables in the given \c ordering to produce a Bayes
|
/** Do multifrontal elimination of some variables in the given \c ordering to produce a Bayes
|
||||||
* tree and a remaining factor graph. This computes the factorization \f$ p(X) = p(A|B) p(B)
|
* tree and a remaining factor graph. This computes the factorization \f$ p(X) = p(A|B) p(B)
|
||||||
|
@ -120,7 +120,7 @@ namespace gtsam {
|
||||||
* \f$ B = X\backslash A \f$. */
|
* \f$ B = X\backslash A \f$. */
|
||||||
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> >
|
std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<FACTORGRAPH> >
|
||||||
eliminatePartialMultifrontal(const Eliminate& function, const std::vector<Key>& variables,
|
eliminatePartialMultifrontal(const Eliminate& function, const std::vector<Key>& variables,
|
||||||
OptionalVariableIndex variableIndex = boost::none);
|
OptionalVariableIndex variableIndex = boost::none) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue