two pass to for addConditionals
							parent
							
								
									cde2bebf36
								
							
						
					
					
						commit
						36f2a3d298
					
				|  | @ -108,6 +108,28 @@ HybridSmoother::addConditionals(const HybridGaussianFactorGraph &originalGraph, | |||
| 
 | ||||
|     // NOTE(Varun) Using a for-range loop doesn't work since some of the
 | ||||
|     // conditionals are invalid pointers
 | ||||
| 
 | ||||
|     // First get all the keys involved.
 | ||||
|     // We do this by iterating over all conditionals, and checking if their
 | ||||
|     // frontals are involved in the factor graph. If yes, then also make the
 | ||||
|     // parent keys involved in the factor graph.
 | ||||
|     for (size_t i = 0; i < hybridBayesNet.size(); i++) { | ||||
|       auto conditional = hybridBayesNet.at(i); | ||||
| 
 | ||||
|       for (auto &key : conditional->frontals()) { | ||||
|         if (std::find(factorKeys.begin(), factorKeys.end(), key) != | ||||
|             factorKeys.end()) { | ||||
|           // Add the conditional parents to factorKeys
 | ||||
|           // so we add those conditionals too.
 | ||||
|           for (auto &&parentKey : conditional->parents()) { | ||||
|             factorKeys.insert(parentKey); | ||||
|           } | ||||
|           // Break so we don't add parents twice.
 | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     for (size_t i = 0; i < hybridBayesNet.size(); i++) { | ||||
|       auto conditional = hybridBayesNet.at(i); | ||||
| 
 | ||||
|  | @ -116,14 +138,6 @@ HybridSmoother::addConditionals(const HybridGaussianFactorGraph &originalGraph, | |||
|             factorKeys.end()) { | ||||
|           newConditionals.push_back(conditional); | ||||
| 
 | ||||
|           // Add the conditional parents to factorKeys
 | ||||
|           // so we add those conditionals too.
 | ||||
|           // NOTE: This assumes we have a structure where
 | ||||
|           // variables depend on those in the future.
 | ||||
|           for (auto &&parentKey : conditional->parents()) { | ||||
|             factorKeys.insert(parentKey); | ||||
|           } | ||||
| 
 | ||||
|           // Remove the conditional from the updated Bayes net
 | ||||
|           auto it = find(updatedHybridBayesNet.begin(), | ||||
|                          updatedHybridBayesNet.end(), conditional); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue