Throw if sampling conditions not satisfied
parent
28a2cd3475
commit
8675dc62df
|
@ -259,8 +259,18 @@ size_t DiscreteConditional::argmax(const DiscreteValues& parentsValues) const {
|
|||
|
||||
/* ************************************************************************** */
|
||||
void DiscreteConditional::sampleInPlace(DiscreteValues* values) const {
|
||||
assert(nrFrontals() == 1);
|
||||
Key j = (firstFrontalKey());
|
||||
// throw if more than one frontal:
|
||||
if (nrFrontals() != 1) {
|
||||
throw std::invalid_argument(
|
||||
"DiscreteConditional::sampleInPlace can only be called on single "
|
||||
"variable conditionals");
|
||||
}
|
||||
Key j = firstFrontalKey();
|
||||
// throw if values already contains j:
|
||||
if (values->count(j) > 0) {
|
||||
throw std::invalid_argument(
|
||||
"DiscreteConditional::sampleInPlace: values already contains j");
|
||||
}
|
||||
size_t sampled = sample(*values); // Sample variable given parents
|
||||
(*values)[j] = sampled; // store result in partial solution
|
||||
}
|
||||
|
@ -467,9 +477,7 @@ double DiscreteConditional::evaluate(const HybridValues& x) const {
|
|||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
double DiscreteConditional::negLogConstant() const {
|
||||
return 0.0;
|
||||
}
|
||||
double DiscreteConditional::negLogConstant() const { return 0.0; }
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
|
|
|
@ -168,7 +168,7 @@ class GTSAM_EXPORT DiscreteConditional
|
|||
static_cast<const BaseConditional*>(this)->print(s, formatter);
|
||||
}
|
||||
|
||||
/// Evaluate, just look up in AlgebraicDecisonTree
|
||||
/// Evaluate, just look up in AlgebraicDecisionTree
|
||||
double evaluate(const DiscreteValues& values) const {
|
||||
return ADT::operator()(values);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue