max and min functions for AlgebraicDecisionTree

release/4.3a0
Varun Agrawal 2023-12-17 15:14:03 -05:00
parent e549a9b41f
commit b2638c8698
1 changed files with 17 additions and 1 deletions

View File

@ -199,7 +199,7 @@ namespace gtsam {
/// Compute sum of all values /// Compute sum of all values
double sum() const { double sum() const {
double sum = 0; double sum = 0;
auto visitor = [&](int y) { sum += y; }; auto visitor = [&](double y) { sum += y; };
this->visit(visitor); this->visit(visitor);
return sum; return sum;
} }
@ -215,6 +215,22 @@ namespace gtsam {
return this->apply([&sum](const double& x) { return x / sum; }); return this->apply([&sum](const double& x) { return x / sum; });
} }
/// Find the minimum values amongst all leaves
double min() const {
double min = std::numeric_limits<double>::max();
auto visitor = [&](double x) { min = x < min ? x : min; };
this->visit(visitor);
return min;
}
/// Find the maximum values amongst all leaves
double max() const {
double max = std::numeric_limits<double>::min();
auto visitor = [&](double x) { max = x > max ? x : max; };
this->visit(visitor);
return max;
}
/** sum out variable */ /** sum out variable */
AlgebraicDecisionTree sum(const L& label, size_t cardinality) const { AlgebraicDecisionTree sum(const L& label, size_t cardinality) const {
return this->combine(label, cardinality, &Ring::add); return this->combine(label, cardinality, &Ring::add);