Cherry-pick Varun's bugfix
parent
e1c0d0e227
commit
04cfb063ae
|
@ -247,7 +247,8 @@ static std::pair<HybridConditional::shared_ptr, std::shared_ptr<Factor>> discret
|
||||||
// In this case, compute discrete probabilities.
|
// In this case, compute discrete probabilities.
|
||||||
auto logProbability = [&](const auto& pair) -> double {
|
auto logProbability = [&](const auto& pair) -> double {
|
||||||
auto [factor, _] = pair;
|
auto [factor, _] = pair;
|
||||||
if (!factor) return 0.0;
|
// If the factor is null, it is has been pruned hence return ∞
|
||||||
|
// so that the exp(-∞)=0.
|
||||||
return factor->error(VectorValues());
|
return factor->error(VectorValues());
|
||||||
};
|
};
|
||||||
AlgebraicDecisionTree<Key> logProbabilities =
|
AlgebraicDecisionTree<Key> logProbabilities =
|
||||||
|
@ -299,7 +300,9 @@ static std::shared_ptr<Factor> createDiscreteFactor(const ResultTree& eliminatio
|
||||||
// which is `-log(k) = log(1/k) = log(\sqrt{|2πΣ|})`.
|
// which is `-log(k) = log(1/k) = log(\sqrt{|2πΣ|})`.
|
||||||
return factor->error(kEmpty) - conditional->negLogConstant();
|
return factor->error(kEmpty) - conditional->negLogConstant();
|
||||||
} else if (!conditional && !factor) {
|
} else if (!conditional && !factor) {
|
||||||
return 1.0; // TODO(dellaert): not loving this, what should this be??
|
// If the factor is null, it has been pruned, hence return ∞
|
||||||
|
// so that the exp(-∞)=0.
|
||||||
|
return std::numeric_limits<double>::infinity();
|
||||||
} else {
|
} else {
|
||||||
throw std::runtime_error("createDiscreteFactor has mixed NULLs");
|
throw std::runtime_error("createDiscreteFactor has mixed NULLs");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue