use DiscreteLookupDAG for DiscreteBayesNet mode

release/4.3a0
Varun Agrawal 2024-07-14 10:31:27 -04:00
parent f6449c0ad8
commit a43dad2e34
1 changed files with 4 additions and 6 deletions

View File

@ -18,6 +18,7 @@
#include <gtsam/discrete/DiscreteBayesNet.h>
#include <gtsam/discrete/DiscreteConditional.h>
#include <gtsam/discrete/DiscreteLookupDAG.h>
#include <gtsam/inference/FactorGraph-inst.h>
namespace gtsam {
@ -56,18 +57,15 @@ DiscreteValues DiscreteBayesNet::sample() const {
DiscreteValues DiscreteBayesNet::sample(DiscreteValues result) const {
// sample each node in turn in topological sort order (parents first)
for (auto it = std::make_reverse_iterator(end()); it != std::make_reverse_iterator(begin()); ++it) {
for (auto it = std::make_reverse_iterator(end());
it != std::make_reverse_iterator(begin()); ++it) {
(*it)->sampleInPlace(&result);
}
return result;
}
DiscreteValues DiscreteBayesNet::mode() const {
DiscreteValues result;
for (auto it = begin(); it != end(); ++it) {
result[(*it)->firstFrontalKey()] = (*it)->argmax(result);
}
return result;
return DiscreteLookupDAG::FromBayesNet(*this).argmax();
}
/* *********************************************************************** */