add optional ordering and fix bug

release/4.3a0
Varun Agrawal 2022-11-08 13:36:18 -05:00
parent 64cd7c938f
commit 3987b036a7
2 changed files with 11 additions and 2 deletions

View File

@ -563,7 +563,7 @@ AlgebraicDecisionTree<Key> HybridGaussianFactorGraph::continuousProbPrimes(
/* ************************************************************************ */
boost::shared_ptr<HybridGaussianFactorGraph::BayesNetType>
HybridGaussianFactorGraph::eliminateHybridSequential() const {
HybridGaussianFactorGraph::eliminateHybridSequential(const boost::optional<Ordering> continuous, const boost::optional<Ordering> discrete) const {
Ordering continuous_ordering(this->continuousKeys()),
discrete_ordering(this->discreteKeys());
@ -577,6 +577,11 @@ HybridGaussianFactorGraph::eliminateHybridSequential() const {
auto last_conditional = bayesNet->at(bayesNet->size() - 1);
DiscreteKeys discrete_keys = last_conditional->discreteKeys();
// If not discrete variables, return the eliminated bayes net.
if (discrete_keys.size() == 0) {
return bayesNet;
}
const std::vector<DiscreteValues> assignments =
DiscreteValues::CartesianProduct(discrete_keys);

View File

@ -227,9 +227,13 @@ class GTSAM_EXPORT HybridGaussianFactorGraph
* @brief Custom elimination function which computes the correct
* continuous probabilities.
*
* @param continuous Optional ordering for all continuous variables.
* @param discrete Optional ordering for all discrete variables.
* @return boost::shared_ptr<BayesNetType>
*/
boost::shared_ptr<BayesNetType> eliminateHybridSequential() const;
boost::shared_ptr<BayesNetType> eliminateHybridSequential(
const boost::optional<Ordering> continuous,
const boost::optional<Ordering> discrete) const;
/**
* @brief Return a Colamd constrained ordering where the discrete keys are