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 {
|
void DiscreteConditional::sampleInPlace(DiscreteValues* values) const {
|
||||||
assert(nrFrontals() == 1);
|
// throw if more than one frontal:
|
||||||
Key j = (firstFrontalKey());
|
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
|
size_t sampled = sample(*values); // Sample variable given parents
|
||||||
(*values)[j] = sampled; // store result in partial solution
|
(*values)[j] = sampled; // store result in partial solution
|
||||||
}
|
}
|
||||||
|
@ -467,9 +477,7 @@ double DiscreteConditional::evaluate(const HybridValues& x) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
double DiscreteConditional::negLogConstant() const {
|
double DiscreteConditional::negLogConstant() const { return 0.0; }
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ class GTSAM_EXPORT DiscreteConditional
|
||||||
static_cast<const BaseConditional*>(this)->print(s, formatter);
|
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 {
|
double evaluate(const DiscreteValues& values) const {
|
||||||
return ADT::operator()(values);
|
return ADT::operator()(values);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue