22 #include <gtsam/discrete/DecisionTree-inl.h> 47 static std::string DefaultFormatter(
const L& x) {
58 static inline double zero() {
return 0.0; }
59 static inline double one() {
return 1.0; }
60 static inline double add(
const double& a,
const double& b) {
63 static inline double max(
const double& a,
const double& b) {
64 return std::max(a, b);
66 static inline double mul(
const double& a,
const double& b) {
69 static inline double div(
const double& a,
const double& b) {
72 static inline double id(
const double& x) {
return x; }
82 :
Base(label, y1, y2) {}
87 :
Base(labelC, y1, y2) {}
91 (
const std::vector<typename Base::LabelC>& labelCs,
92 const std::vector<double>& ys) {
94 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());
99 (
const std::vector<typename Base::LabelC>& labelCs,
100 const std::string& table) {
102 std::vector<double> ys;
103 std::istringstream iss(table);
104 std::copy(std::istream_iterator<double>(iss),
105 std::istream_iterator<double>(), std::back_inserter(ys));
109 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());
113 template <
typename Iterator>
116 this->root_ = compose(begin, end, label);
125 template <
typename M>
127 const std::map<M, L>& map) {
129 std::function<L(const M&)> L_of_M = [&map](
const M& label) -> L {
130 return map.at(label);
132 std::function<double(const double&)> op = Ring::id;
138 return this->
apply(g, &Ring::add);
143 return this->
apply(g, &Ring::mul);
148 return this->
apply(g, &Ring::div);
153 return this->combine(label, cardinality, &Ring::add);
158 return this->combine(labelC, &Ring::add);
162 void print(
const std::string& s =
"",
163 const typename Base::LabelFormatter& labelFormatter =
164 &DefaultFormatter)
const {
165 auto valueFormatter = [](
const double& v) {
166 std::stringstream ss;
167 ss << std::setw(4) << std::setprecision(8) << v;
176 auto compare = [tol](
double a,
double b) {
177 return std::abs(a - b) < tol;
179 return Base::equals(other, compare);
183 template <
typename T>
185 :
public Testable<AlgebraicDecisionTree<T>> {};
AlgebraicDecisionTree sum(const L &label, size_t cardinality) const
Definition: AlgebraicDecisionTree.h:152
bool equals(const AlgebraicDecisionTree &other, double tol=1e-9) const
Equality method customized to value type double.
Definition: AlgebraicDecisionTree.h:174
NodePtr convertFrom(const typename DecisionTree< M, X >::NodePtr &f, std::function< L(const M &)> L_of_M, std::function< Y(const X &)> Y_of_X) const
Convert from a DecisionTree<M, X> to DecisionTree<L, Y>.
Definition: DecisionTree-inl.h:671
Concept check for values that can be used in unit tests.
void print(const std::string &s="", const typename Base::LabelFormatter &labelFormatter=&DefaultFormatter) const
print method customized to value type double.
Definition: AlgebraicDecisionTree.h:162
Definition: Testable.h:152
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
Apply unary operator op to DecisionTree f.
Definition: DecisionTree.h:398
AlgebraicDecisionTree(const typename Base::LabelC &labelC, double y1, double y2)
Definition: AlgebraicDecisionTree.h:85
AlgebraicDecisionTree operator+(const AlgebraicDecisionTree &g) const
Definition: AlgebraicDecisionTree.h:137
AlgebraicDecisionTree operator*(const AlgebraicDecisionTree &g) const
Definition: AlgebraicDecisionTree.h:142
AlgebraicDecisionTree operator/(const AlgebraicDecisionTree &g) const
Definition: AlgebraicDecisionTree.h:147
NodePtr root_
A DecisionTree just contains the root. TODO(dellaert): make protected.
Definition: DecisionTree.h:136
Definition: DecisionTree.h:49
Definition: AlgebraicDecisionTree.h:39
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
AlgebraicDecisionTree(Iterator begin, Iterator end, const L &label)
Definition: AlgebraicDecisionTree.h:114
AlgebraicDecisionTree sum(const typename Base::LabelC &labelC) const
Definition: AlgebraicDecisionTree.h:157
Definition: chartTesting.h:28
Definition: AlgebraicDecisionTree.h:57
std::pair< Key, size_t > LabelC
Definition: DecisionTree.h:67
AlgebraicDecisionTree(const AlgebraicDecisionTree< M > &other, const std::map< M, L > &map)
Definition: AlgebraicDecisionTree.h:126
AlgebraicDecisionTree(const L &label, double y1, double y2)
Definition: AlgebraicDecisionTree.h:81