moved argmax to conditional
parent
03314ed781
commit
f9b14893c8
|
@ -286,6 +286,26 @@ size_t DiscreteConditional::solve(const DiscreteValues& parentsValues) const {
|
||||||
}
|
}
|
||||||
#endif
|
#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 {
|
void DiscreteConditional::sampleInPlace(DiscreteValues* values) const {
|
||||||
assert(nrFrontals() == 1);
|
assert(nrFrontals() == 1);
|
||||||
|
|
|
@ -192,6 +192,12 @@ class GTSAM_EXPORT DiscreteConditional
|
||||||
/// Zero parent version.
|
/// Zero parent version.
|
||||||
size_t sample() const;
|
size_t sample() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return assignment that maximizes distribution.
|
||||||
|
* @return Optimal assignment (1 frontal variable).
|
||||||
|
*/
|
||||||
|
size_t argmax() const;
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
/// @name Advanced Interface
|
/// @name Advanced Interface
|
||||||
/// @{
|
/// @{
|
||||||
|
|
|
@ -49,21 +49,4 @@ std::vector<double> DiscreteDistribution::pmf() const {
|
||||||
return array;
|
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
|
} // namespace gtsam
|
||||||
|
|
|
@ -90,18 +90,6 @@ class GTSAM_EXPORT DiscreteDistribution : public DiscreteConditional {
|
||||||
/// Return entire probability mass function.
|
/// Return entire probability mass function.
|
||||||
std::vector<double> pmf() const;
|
std::vector<double> 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
|
#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
|
||||||
/// @name Deprecated functionality
|
/// @name Deprecated functionality
|
||||||
|
|
Loading…
Reference in New Issue