ISAM-inst.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
18 #pragma once
19 
20 #include <gtsam/inference/ISAM.h>
22 
23 namespace gtsam {
24 
25 /* ************************************************************************* */
26 template<class BAYESTREE>
28  Cliques* orphans, const Eliminate& function) {
29  // Remove the contaminated part of the Bayes tree
30  BayesNetType bn;
31  const KeySet newFactorKeys = newFactors.keys();
32  if (!this->empty()) {
33  KeyVector keyVector(newFactorKeys.begin(), newFactorKeys.end());
34  this->removeTop(keyVector, &bn, orphans);
35  }
36 
37  // Add the removed top and the new factors
39  factors.push_back(bn);
40  factors.push_back(newFactors);
41 
42  // Add the orphaned subtrees
43  for (const sharedClique& orphan : *orphans)
44  factors.template emplace_shared<BayesTreeOrphanWrapper<Clique> >(orphan);
45 
46  // Get an ordering where the new keys are eliminated last
47  const VariableIndex index(factors);
49  KeyVector(newFactorKeys.begin(), newFactorKeys.end()));
50 
51  // eliminate all factors (top, added, orphans) into a new Bayes tree
52  auto bayesTree = factors.eliminateMultifrontal(ordering, function, std::cref(index));
53 
54  // Re-add into Bayes tree data structures
55  this->roots_.insert(this->roots_.end(), bayesTree->roots().begin(),
56  bayesTree->roots().end());
57  this->nodes_.insert(bayesTree->nodes().begin(), bayesTree->nodes().end());
58 }
59 
60 /* ************************************************************************* */
61 template<class BAYESTREE>
63  const Eliminate& function) {
64  Cliques orphans;
65  this->updateInternal(newFactors, &orphans, function);
66 }
67 
68 }
void update(const FactorGraphType &newFactors, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
Definition: ISAM-inst.h:62
FactorGraphType::Eliminate Eliminate
Definition: BayesTree.h:85
IsDerived< DERIVEDFACTOR > push_back(std::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition: FactorGraph.h:190
const GaussianFactorGraph factors
static enum @1107 ordering
std::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition: BayesTree.h:74
HybridBayesTreeClique ::FactorGraphType FactorGraphType
Definition: BayesTree.h:83
Incremental update functionality (iSAM) for BayesTree.
traits
Definition: chartTesting.h:28
void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
Definition: ISAM-inst.h:27
HybridBayesTreeClique ::BayesNetType BayesNetType
Definition: BayesTree.h:79
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:25