11 #include <gtsam/nonlinear/NonlinearFactor.h>
12 #include <gtsam/nonlinear/Symbol.h>
29 template <
class NonlinearFactorType>
32 gtsam::DiscreteKey dk_;
33 std::vector<NonlinearFactorType> factors_;
42 const std::vector<NonlinearFactorType>& factors,
43 bool normalized =
false)
44 : dk_(dk), factors_(factors), normalized_(normalized) {
55 this->factors_ = rhs.factors_;
60 double error(
const gtsam::Values& continuousVals,
63 const size_t assignment = discreteVals.at(dk_.first);
67 const double factorError = factors_[assignment].error(continuousVals);
68 if (normalized_)
return factorError;
70 this->factors_[assignment], continuousVals);
73 size_t dim()
const override {
76 return (factors_.size() > 0) ? factors_[0].dim() : 0;
90 if (factors_.size() != f.factors_.size())
return false;
94 for (
size_t i = 0; i < factors_.size(); i++) {
95 if (!factors_[i].
equals(f.factors_[i]))
return false;
100 return (std::equal(keys_.begin(), keys_.end(), f.keys().begin()) &&
102 (normalized_ == f.normalized_));
106 const gtsam::Values& continuousVals,
109 const size_t assignment = discreteVals.at(dk_.first);
113 return factors_[assignment].linearize(continuousVals);
Custom discrete-continuous factor.
Abstract class implementing a discrete-continuous factor.
Definition: DCFactor.h:33
gtsam::DiscreteKeys discreteKeys_
Definition: DCFactor.h:36
DCFactor & operator=(const DCFactor &rhs)
Definition: DCFactor.h:58
gtsam::Factor Base
Definition: DCFactor.h:39
double nonlinearFactorLogNormalizingConstant(const NonlinearFactorType &factor, const gtsam::Values &values) const
Definition: DCFactor.h:193
Implementation of a discrete conditional mixture factor. Implements a joint discrete-continuous facto...
Definition: DCMixtureFactor.h:30
boost::shared_ptr< gtsam::GaussianFactor > linearize(const gtsam::Values &continuousVals, const DiscreteValues &discreteVals) const override
Definition: DCMixtureFactor.h:105
DCMixtureFactor(const gtsam::KeyVector &keys, const gtsam::DiscreteKey &dk, const std::vector< NonlinearFactorType > &factors, bool normalized=false)
Definition: DCMixtureFactor.h:41
DCMixtureFactor & operator=(const DCMixtureFactor &rhs)
Definition: DCMixtureFactor.h:52
double error(const gtsam::Values &continuousVals, const DiscreteValues &discreteVals) const override
Definition: DCMixtureFactor.h:60
~DCMixtureFactor()=default
size_t dim() const override
Definition: DCMixtureFactor.h:73
DCMixtureFactor()=default
bool equals(const DCFactor &other, double tol=1e-9) const override
Definition: DCMixtureFactor.h:79
Definition: DCContinuousFactor.h:24
gtsam::DiscreteFactor::Values DiscreteValues
Definition: DCSAM_types.h:19
const double tol
Definition: testDCSAM.cpp:40