clarify TableProduct function
parent
bb4ee207b8
commit
2894c957b1
|
|
@ -256,13 +256,12 @@ static TableFactor::shared_ptr DiscreteFactorFromErrors(
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief Multiply all the `factors` and normalize the
|
||||
* product to prevent underflow.
|
||||
* @brief Multiply all the `factors` using the machinery of the TableFactor.
|
||||
*
|
||||
* @param factors The factors to multiply as a DiscreteFactorGraph.
|
||||
* @return TableFactor
|
||||
*/
|
||||
static TableFactor ProductAndNormalize(const DiscreteFactorGraph &factors) {
|
||||
static TableFactor TableProduct(const DiscreteFactorGraph &factors) {
|
||||
// PRODUCT: multiply all factors
|
||||
#if GTSAM_HYBRID_TIMING
|
||||
gttic_(DiscreteProduct);
|
||||
|
|
@ -282,14 +281,13 @@ static TableFactor ProductAndNormalize(const DiscreteFactorGraph &factors) {
|
|||
gttoc_(DiscreteProduct);
|
||||
#endif
|
||||
|
||||
// Max over all the potentials by pretending all keys are frontal:
|
||||
auto normalizer = product.max(product.size());
|
||||
|
||||
#if GTSAM_HYBRID_TIMING
|
||||
gttic_(DiscreteNormalize);
|
||||
#endif
|
||||
// Max over all the potentials by pretending all keys are frontal:
|
||||
auto denominator = product.max(product.size());
|
||||
// Normalize the product factor to prevent underflow.
|
||||
product = product / (*normalizer);
|
||||
product = product / (*denominator);
|
||||
#if GTSAM_HYBRID_TIMING
|
||||
gttoc_(DiscreteNormalize);
|
||||
#endif
|
||||
|
|
@ -352,7 +350,7 @@ discreteElimination(const HybridGaussianFactorGraph &factors,
|
|||
// so we can use the TableFactor for efficiency.
|
||||
if (separator.size() == 0) {
|
||||
// Get product factor
|
||||
TableFactor product = ProductAndNormalize(dfg);
|
||||
TableFactor product = TableProduct(dfg);
|
||||
|
||||
#if GTSAM_HYBRID_TIMING
|
||||
gttic_(EliminateDiscreteFormDiscreteConditional);
|
||||
|
|
|
|||
Loading…
Reference in New Issue