11 #include <gtsam/discrete/DiscreteFactorGraph.h>
12 #include <gtsam/discrete/DiscreteMarginals.h>
25 using Base = gtsam::DiscreteMarginals;
27 const gtsam::Ordering::OrderingType &orderingType =
28 gtsam::Ordering::OrderingType::NATURAL)
29 :
Base(gtsam::DiscreteFactorGraph()) {
30 gtsam::Ordering ordering;
31 if (orderingType == gtsam::Ordering::OrderingType::COLAMD) {
32 ordering = gtsam::Ordering::Colamd(graph);
33 }
else if (orderingType == gtsam::Ordering::OrderingType::METIS) {
34 ordering = gtsam::Ordering::Metis(graph);
36 ordering = gtsam::Ordering::Natural(graph);
41 static std::pair<gtsam::DiscreteConditional::shared_ptr,
42 gtsam::DecisionTreeFactor::shared_ptr>
44 const gtsam::Ordering &frontalKeys) {
46 gtsam::DecisionTreeFactor product;
47 for (
auto &factor : factors) {
49 std::cout <<
"Null factor in eliminate" << std::endl;
52 product = (*factor) * product;
57 gtsam::DecisionTreeFactor::shared_ptr sum = product.sum(frontalKeys);
61 gtsam::Ordering orderedKeys;
62 orderedKeys.insert(orderedKeys.end(), frontalKeys.begin(),
64 orderedKeys.insert(orderedKeys.end(), sum->keys().begin(),
67 gtsam::DiscreteConditional::shared_ptr cond(
68 new gtsam::DiscreteConditional(product, *sum, orderedKeys));
70 return std::make_pair(cond, sum);
Some convenient types for DCSAM.
Simple discrete marginals class allowing specific ordering.
Definition: DiscreteMarginalsOrdered.h:23
gtsam::DiscreteMarginals Base
Definition: DiscreteMarginalsOrdered.h:25
DiscreteMarginalsOrdered(const gtsam::DiscreteFactorGraph &graph, const gtsam::Ordering::OrderingType &orderingType=gtsam::Ordering::OrderingType::NATURAL)
Definition: DiscreteMarginalsOrdered.h:26
static std::pair< gtsam::DiscreteConditional::shared_ptr, gtsam::DecisionTreeFactor::shared_ptr > CustomEliminateDiscrete(const gtsam::DiscreteFactorGraph &factors, const gtsam::Ordering &frontalKeys)
Definition: DiscreteMarginalsOrdered.h:43
Definition: DCContinuousFactor.h:24