From f9b14893c86fdde1dc870b9e2d20e50390b71633 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Fri, 21 Jan 2022 18:10:47 -0500 Subject: [PATCH] moved argmax to conditional --- gtsam/discrete/DiscreteConditional.cpp | 20 ++++++++++++++++++++ gtsam/discrete/DiscreteConditional.h | 6 ++++++ gtsam/discrete/DiscreteDistribution.cpp | 17 ----------------- gtsam/discrete/DiscreteDistribution.h | 12 ------------ 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/gtsam/discrete/DiscreteConditional.cpp b/gtsam/discrete/DiscreteConditional.cpp index 9a4897b72..06b2856f8 100644 --- a/gtsam/discrete/DiscreteConditional.cpp +++ b/gtsam/discrete/DiscreteConditional.cpp @@ -286,6 +286,26 @@ size_t DiscreteConditional::solve(const DiscreteValues& parentsValues) const { } #endif +/* ************************************************************************** */ +size_t DiscreteConditional::argmax() const { + size_t maxValue = 0; + double maxP = 0; + assert(nrFrontals() == 1); + assert(nrParents() == 0); + DiscreteValues frontals; + Key j = firstFrontalKey(); + for (size_t value = 0; value < cardinality(j); value++) { + frontals[j] = value; + double pValueS = (*this)(frontals); + // Update MPE solution if better + if (pValueS > maxP) { + maxP = pValueS; + maxValue = value; + } + } + return maxValue; +} + /* ************************************************************************** */ void DiscreteConditional::sampleInPlace(DiscreteValues* values) const { assert(nrFrontals() == 1); diff --git a/gtsam/discrete/DiscreteConditional.h b/gtsam/discrete/DiscreteConditional.h index af05e932b..48d94a383 100644 --- a/gtsam/discrete/DiscreteConditional.h +++ b/gtsam/discrete/DiscreteConditional.h @@ -192,6 +192,12 @@ class GTSAM_EXPORT DiscreteConditional /// Zero parent version. size_t sample() const; + /** + * @brief Return assignment that maximizes distribution. + * @return Optimal assignment (1 frontal variable). + */ + size_t argmax() const; + /// @} /// @name Advanced Interface /// @{ diff --git a/gtsam/discrete/DiscreteDistribution.cpp b/gtsam/discrete/DiscreteDistribution.cpp index 5f6fba6a2..739771470 100644 --- a/gtsam/discrete/DiscreteDistribution.cpp +++ b/gtsam/discrete/DiscreteDistribution.cpp @@ -49,21 +49,4 @@ std::vector DiscreteDistribution::pmf() const { return array; } -/* ************************************************************************** */ -size_t DiscreteDistribution::argmax() const { - size_t maxValue = 0; - double maxP = 0; - assert(nrFrontals() == 1); - Key j = firstFrontalKey(); - for (size_t value = 0; value < cardinality(j); value++) { - double pValueS = (*this)(value); - // Update MPE solution if better - if (pValueS > maxP) { - maxP = pValueS; - maxValue = value; - } - } - return maxValue; -} - } // namespace gtsam diff --git a/gtsam/discrete/DiscreteDistribution.h b/gtsam/discrete/DiscreteDistribution.h index 8dcc75733..c5147dbc1 100644 --- a/gtsam/discrete/DiscreteDistribution.h +++ b/gtsam/discrete/DiscreteDistribution.h @@ -90,18 +90,6 @@ class GTSAM_EXPORT DiscreteDistribution : public DiscreteConditional { /// Return entire probability mass function. std::vector pmf() const; - /** - * @brief Return assignment that maximizes distribution. - * @return Optimal assignment (1 frontal variable). - */ - size_t argmax() const; - - /** - * sample - * @return sample from conditional - */ - size_t sample() const { return Base::sample(); } - /// @} #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42 /// @name Deprecated functionality