11 #include <gtsam/discrete/DiscreteFactor.h>
12 #include <gtsam/discrete/DiscreteKey.h>
13 #include <gtsam/nonlinear/NonlinearFactor.h>
14 #include <gtsam/nonlinear/Symbol.h>
43 gtsam::DiscreteKeys discreteKeys_;
44 gtsam::KeyVector continuousKeys_;
45 boost::shared_ptr<DCFactor> dcfactor_;
46 gtsam::Values continuousVals_;
50 using Base = gtsam::DiscreteFactor;
55 boost::shared_ptr<DCFactor> dcfactor)
56 : discreteKeys_(discreteKeys),
57 continuousKeys_(dcfactor->keys()),
61 for (
const gtsam::DiscreteKey& k : discreteKeys_) keys_.push_back(k.first);
65 : discreteKeys_(dcfactor->discreteKeys()),
66 continuousKeys_(dcfactor->keys()),
70 for (
const gtsam::DiscreteKey& k : discreteKeys_) keys_.push_back(k.first);
75 discreteKeys_ = rhs.discreteKeys_;
76 dcfactor_ = rhs.dcfactor_;
77 continuousKeys_ = rhs.continuousKeys_;
78 continuousVals_ = rhs.continuousVals_;
79 discreteVals_ = rhs.discreteVals_;
85 bool equals(
const DiscreteFactor& other,
double tol = 1e-9)
const override {
88 return (dcfactor_->equals(*f.dcfactor_) &&
89 (discreteKeys_ == f.discreteKeys_) &&
90 continuousVals_.equals(f.continuousVals_) &&
91 discreteVals_ == f.discreteVals_);
96 return dcfactor_->toDecisionTreeFactor(continuousVals_, discreteVals_);
100 const gtsam::DecisionTreeFactor& f)
const override {
102 return dcfactor_->conditionalTimes(f, continuousVals_, discreteVals_);
107 return exp(-dcfactor_->error(continuousVals_, values));
111 for (
const gtsam::Key& k : continuousKeys_) {
113 if (!continuousVals.exists(k))
continue;
115 if (continuousVals_.exists(k)) {
117 continuousVals_.update(k, continuousVals.at(k));
122 continuousVals_.insert(k, continuousVals.at(k));
128 for (
const gtsam::DiscreteKey& dk : discreteKeys_) {
129 const gtsam::Key k = dk.first;
130 if (discreteVals.find(k) != discreteVals.end())
131 discreteVals_[k] = discreteVals.at(k);
136 for (
const gtsam::Key& k : continuousKeys_) {
137 if (!continuousVals_.exists(k))
return false;
139 for (
const gtsam::Key k : keys_) {
140 if (discreteVals_.find(k) == discreteVals_.end())
return false;
145 std::string
markdown(
const gtsam::KeyFormatter& keyFormatter,
146 const Names& names)
const override {
150 std::string
html(
const gtsam::KeyFormatter& keyFormatter,
151 const Names& names)
const override {
Custom discrete-continuous factor.
Some convenient types for DCSAM.
Implementation of a discrete-continuous factor. This is used internally within the DCSAM solver....
Definition: DCDiscreteFactor.h:41
DCDiscreteFactor(const gtsam::DiscreteKeys &discreteKeys, boost::shared_ptr< DCFactor > dcfactor)
Definition: DCDiscreteFactor.h:54
gtsam::DiscreteFactor Base
Definition: DCDiscreteFactor.h:50
gtsam::DecisionTreeFactor toDecisionTreeFactor() const override
Definition: DCDiscreteFactor.h:94
gtsam::DecisionTreeFactor operator*(const gtsam::DecisionTreeFactor &f) const override
Definition: DCDiscreteFactor.h:99
bool equals(const DiscreteFactor &other, double tol=1e-9) const override
Definition: DCDiscreteFactor.h:85
DCDiscreteFactor()=default
std::string markdown(const gtsam::KeyFormatter &keyFormatter, const Names &names) const override
Definition: DCDiscreteFactor.h:145
DCDiscreteFactor(boost::shared_ptr< DCFactor > dcfactor)
Definition: DCDiscreteFactor.h:64
double operator()(const DiscreteValues &values) const override
Definition: DCDiscreteFactor.h:105
void updateDiscrete(const DiscreteValues &discreteVals)
Definition: DCDiscreteFactor.h:127
void updateContinuous(const gtsam::Values &continuousVals)
Definition: DCDiscreteFactor.h:110
bool allInitialized() const
Definition: DCDiscreteFactor.h:135
virtual ~DCDiscreteFactor()=default
DCDiscreteFactor & operator=(const DCDiscreteFactor &rhs)
Definition: DCDiscreteFactor.h:73
std::string html(const gtsam::KeyFormatter &keyFormatter, const Names &names) const override
Definition: DCDiscreteFactor.h:150
Definition: DCContinuousFactor.h:24
gtsam::DiscreteFactor::Values DiscreteValues
Definition: DCSAM_types.h:19
const double tol
Definition: testDCSAM.cpp:40