Removed unused code from Concurrent Batch Smoother
							parent
							
								
									3e754ecd70
								
							
						
					
					
						commit
						1952337e23
					
				| 
						 | 
				
			
			@ -527,149 +527,6 @@ void ConcurrentBatchSmoother::EliminationForest::removeChildrenIndices(std::set<
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//std::set<size_t> ConcurrentBatchSmoother::findFactorsWithAny(const std::set<Key>& keys) const {
 | 
			
		||||
//  // Find the set of factor slots for each specified key
 | 
			
		||||
//  std::set<size_t> factorSlots;
 | 
			
		||||
//  BOOST_FOREACH(Key key, keys) {
 | 
			
		||||
//    FactorIndex::const_iterator iter = factorIndex_.find(key);
 | 
			
		||||
//    if(iter != factorIndex_.end()) {
 | 
			
		||||
//      factorSlots.insert(iter->second.begin(), iter->second.end());
 | 
			
		||||
//    }
 | 
			
		||||
//  }
 | 
			
		||||
//
 | 
			
		||||
//  return factorSlots;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//std::set<size_t> ConcurrentBatchSmoother::findFactorsWithOnly(const std::set<Key>& keys) const {
 | 
			
		||||
//  // Find the set of factor slots with any of the provided keys
 | 
			
		||||
//  std::set<size_t> factorSlots = findFactorsWithAny(keys);
 | 
			
		||||
//  // Test each factor for non-specified keys
 | 
			
		||||
//  std::set<size_t>::iterator slot = factorSlots.begin();
 | 
			
		||||
//  while(slot != factorSlots.end()) {
 | 
			
		||||
//    const NonlinearFactor::shared_ptr& factor = graph_.at(*slot);
 | 
			
		||||
//    std::set<Key> factorKeys(factor->begin(), factor->end()); // ensure the keys are sorted
 | 
			
		||||
//    if(!std::includes(keys.begin(), keys.end(), factorKeys.begin(), factorKeys.end())) {
 | 
			
		||||
//      factorSlots.erase(slot++);
 | 
			
		||||
//    } else {
 | 
			
		||||
//      ++slot;
 | 
			
		||||
//    }
 | 
			
		||||
//  }
 | 
			
		||||
//
 | 
			
		||||
//  return factorSlots;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//NonlinearFactor::shared_ptr ConcurrentBatchSmoother::marginalizeKeysFromFactor(const NonlinearFactor::shared_ptr& factor, const std::set<Key>& keysToKeep, const Values& theta) const {
 | 
			
		||||
//
 | 
			
		||||
//factor->print("Factor Before:\n");
 | 
			
		||||
//
 | 
			
		||||
//  // Sort the keys for this factor
 | 
			
		||||
//  std::set<Key> factorKeys;
 | 
			
		||||
//  BOOST_FOREACH(Key key, *factor) {
 | 
			
		||||
//    factorKeys.insert(key);
 | 
			
		||||
//  }
 | 
			
		||||
//
 | 
			
		||||
//  // Calculate the set of keys to marginalize
 | 
			
		||||
//  std::set<Key> marginalizeKeys;
 | 
			
		||||
//  std::set_difference(factorKeys.begin(), factorKeys.end(), keysToKeep.begin(), keysToKeep.end(), std::inserter(marginalizeKeys, marginalizeKeys.end()));
 | 
			
		||||
//  std::set<Key> remainingKeys;
 | 
			
		||||
//  std::set_intersection(factorKeys.begin(), factorKeys.end(), keysToKeep.begin(), keysToKeep.end(), std::inserter(remainingKeys, remainingKeys.end()));
 | 
			
		||||
//
 | 
			
		||||
//  //
 | 
			
		||||
//  if(marginalizeKeys.size() == 0) {
 | 
			
		||||
//    // No keys need to be marginalized out. Simply return the original factor.
 | 
			
		||||
//    return factor;
 | 
			
		||||
//  } else if(marginalizeKeys.size() == factor->size()) {
 | 
			
		||||
//    // All keys need to be marginalized out. Return an empty factor
 | 
			
		||||
//    return NonlinearFactor::shared_ptr();
 | 
			
		||||
//  } else {
 | 
			
		||||
//    // (0) Create an ordering with the remaining keys last
 | 
			
		||||
//    Ordering ordering;
 | 
			
		||||
//    BOOST_FOREACH(Key key, marginalizeKeys) {
 | 
			
		||||
//      ordering.push_back(key);
 | 
			
		||||
//    }
 | 
			
		||||
//    BOOST_FOREACH(Key key, remainingKeys) {
 | 
			
		||||
//      ordering.push_back(key);
 | 
			
		||||
//    }
 | 
			
		||||
//ordering.print("Ordering:\n");
 | 
			
		||||
//
 | 
			
		||||
//    //  (1) construct a linear factor graph
 | 
			
		||||
//    GaussianFactorGraph graph;
 | 
			
		||||
//    graph.push_back( factor->linearize(theta, ordering) );
 | 
			
		||||
//graph.at(0)->print("Linear Factor Before:\n");
 | 
			
		||||
//
 | 
			
		||||
//    //  (2) solve for the marginal factor
 | 
			
		||||
//    // Perform partial elimination, resulting in a conditional probability ( P(MarginalizedVariable | RemainingVariables)
 | 
			
		||||
//    // and factors on the remaining variables ( f(RemainingVariables) ). These are the factors we need to add to iSAM2
 | 
			
		||||
//    std::vector<Index> variables;
 | 
			
		||||
//    BOOST_FOREACH(Key key, marginalizeKeys) {
 | 
			
		||||
//      variables.push_back(ordering.at(key));
 | 
			
		||||
//    }
 | 
			
		||||
////    std::pair<GaussianFactorGraph::sharedConditional, GaussianFactorGraph> result = graph.eliminate(variables);
 | 
			
		||||
//    GaussianFactorGraph::EliminationResult result = EliminateQR(graph, marginalizeKeys.size());
 | 
			
		||||
//result.first->print("Resulting Conditional:\n");
 | 
			
		||||
//result.second->print("Resulting Linear Factor:\n");
 | 
			
		||||
////    graph = result.second;
 | 
			
		||||
//    graph.replace(0, result.second);
 | 
			
		||||
//
 | 
			
		||||
//    //  (3) convert the marginal factors into Linearized Factors
 | 
			
		||||
//    NonlinearFactor::shared_ptr marginalFactor;
 | 
			
		||||
//    assert(graph.size() <= 1);
 | 
			
		||||
//    if(graph.size() > 0) {
 | 
			
		||||
//graph.at(0)->print("Linear Factor After:\n");
 | 
			
		||||
//      marginalFactor.reset(new LinearContainerFactor(graph.at(0), ordering, theta));
 | 
			
		||||
//    }
 | 
			
		||||
//marginalFactor->print("Factor After:\n");
 | 
			
		||||
//    return marginalFactor;
 | 
			
		||||
//  }
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//void ConcurrentBatchSmoother::PrintSingleClique(const ISAM2Clique::shared_ptr& clique, const Ordering& ordering, const std::string& indent, const KeyFormatter& keyFormatter) {
 | 
			
		||||
//  std::cout << indent << "P( ";
 | 
			
		||||
//  BOOST_FOREACH(Index index, clique->conditional()->frontals()){
 | 
			
		||||
//    std::cout << keyFormatter(ordering.key(index)) << " ";
 | 
			
		||||
//  }
 | 
			
		||||
//  if(clique->conditional()->nrParents() > 0){
 | 
			
		||||
//    std::cout << "| ";
 | 
			
		||||
//    BOOST_FOREACH(Index index, clique->conditional()->parents()){
 | 
			
		||||
//      std::cout << keyFormatter(ordering.key(index)) << " ";
 | 
			
		||||
//    }
 | 
			
		||||
//  }
 | 
			
		||||
//  std::cout << ")" << std::endl;
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//void ConcurrentBatchSmoother::PrintRecursiveClique(const ISAM2Clique::shared_ptr& clique, const Ordering& ordering, const std::string& indent, const KeyFormatter& keyFormatter) {
 | 
			
		||||
//
 | 
			
		||||
//  // Print this node
 | 
			
		||||
//  PrintSingleClique(clique, ordering, indent, keyFormatter);
 | 
			
		||||
//
 | 
			
		||||
//  // Print Children
 | 
			
		||||
//  BOOST_FOREACH(const ISAM2Clique::shared_ptr& child, clique->children()) {
 | 
			
		||||
//    PrintRecursiveClique(child, ordering, indent+"  ", keyFormatter);
 | 
			
		||||
//  }
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
///* ************************************************************************* */
 | 
			
		||||
//void ConcurrentBatchSmoother::PrintBayesTree(const ISAM2& bayesTree, const Ordering& ordering, const std::string& indent, const KeyFormatter& keyFormatter) {
 | 
			
		||||
//
 | 
			
		||||
//  std::cout << indent << "Bayes Tree:" << std::endl;
 | 
			
		||||
//  if (bayesTree.root().use_count() == 0) {
 | 
			
		||||
//    std::cout << indent << "  {EMPTY}" << std::endl;
 | 
			
		||||
//  } else {
 | 
			
		||||
//    std::cout << indent << "  clique size == " << bayesTree.size() << ", node size == " << bayesTree.nodes().size() <<  std::endl;
 | 
			
		||||
//    PrintRecursiveClique(bayesTree.root(), ordering, indent+"  ", keyFormatter);
 | 
			
		||||
//  }
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
 | 
			
		||||
}/// namespace gtsam
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue