HessianFactor.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 
19 #pragma once
20 
22 #include <gtsam/linear/Scatter.h>
24 #include <gtsam/base/FastVector.h>
25 
26 #include <boost/make_shared.hpp>
27 
28 namespace gtsam {
29 
30  // Forward declarations
31  class Ordering;
32  class JacobianFactor;
33  class HessianFactor;
34  class GaussianConditional;
35  class GaussianBayesNet;
36  class GaussianFactorGraph;
37 
101  class GTSAM_EXPORT HessianFactor : public GaussianFactor {
102  protected:
103 
105 
106  public:
107 
109  typedef HessianFactor This;
110  typedef boost::shared_ptr<This> shared_ptr;
113 
114 
116  HessianFactor();
117 
123  HessianFactor(Key j, const Matrix& G, const Vector& g, double f);
124 
128  HessianFactor(Key j, const Vector& mu, const Matrix& Sigma);
129 
145  HessianFactor(Key j1, Key j2,
146  const Matrix& G11, const Matrix& G12, const Vector& g1,
147  const Matrix& G22, const Vector& g2, double f);
148 
153  HessianFactor(Key j1, Key j2, Key j3,
154  const Matrix& G11, const Matrix& G12, const Matrix& G13, const Vector& g1,
155  const Matrix& G22, const Matrix& G23, const Vector& g2,
156  const Matrix& G33, const Vector& g3, double f);
157 
162  HessianFactor(const KeyVector& js, const std::vector<Matrix>& Gs,
163  const std::vector<Vector>& gs, double f);
164 
167  template<typename KEYS>
168  HessianFactor(const KEYS& keys, const SymmetricBlockMatrix& augmentedInformation);
169 
171  explicit HessianFactor(const JacobianFactor& cg);
172 
175  explicit HessianFactor(const GaussianFactor& factor);
176 
178  explicit HessianFactor(const GaussianFactorGraph& factors,
179  const Scatter& scatter);
180 
183  : HessianFactor(factors, Scatter(factors)) {}
184 
186  ~HessianFactor() override {}
187 
190  return boost::make_shared<HessianFactor>(*this); }
191 
193  void print(const std::string& s = "",
194  const KeyFormatter& formatter = DefaultKeyFormatter) const override;
195 
197  bool equals(const GaussianFactor& lf, double tol = 1e-9) const override;
198 
203  double error(const VectorValues& c) const override;
204 
210  DenseIndex getDim(const_iterator variable) const override {
211  return info_.getDim(std::distance(begin(), variable));
212  }
213 
215  size_t rows() const { return info_.rows(); }
216 
222  GaussianFactor::shared_ptr negate() const override;
223 
225  bool empty() const override { return size() == 0 /*|| rows() == 0*/; }
226 
230  double constantTerm() const {
231  const auto view = info_.diagonalBlock(size());
232  return view(0, 0);
233  }
234 
238  double& constantTerm() { return info_.diagonalBlock(size())(0, 0); }
239 
245  assert(!empty());
246  return info_.aboveDiagonalBlock(j - begin(), size());
247  }
248 
252  assert(!empty());
253  // get the last column (except the bottom right block)
254  return info_.aboveDiagonalRange(0, size(), size(), size() + 1);
255  }
256 
260  assert(!empty());
261  return info_.aboveDiagonalRange(0, size(), size(), size() + 1);
262  }
263 
265  const SymmetricBlockMatrix& info() const { return info_; }
266 
269  SymmetricBlockMatrix& info() { return info_; }
270 
286  Matrix augmentedInformation() const override;
287 
290 
294  Matrix information() const override;
295 
297  void hessianDiagonalAdd(VectorValues& d) const override;
298 
300  using Base::hessianDiagonal;
301 
303  void hessianDiagonal(double* d) const override;
304 
306  std::map<Key,Matrix> hessianBlockDiagonal() const override;
307 
309  std::pair<Matrix, Vector> jacobian() const override;
310 
316  Matrix augmentedJacobian() const override;
317 
323  void updateHessian(const KeyVector& keys, SymmetricBlockMatrix* info) const override;
324 
328  void updateHessian(HessianFactor* other) const {
329  assert(other);
330  updateHessian(other->keys_, &other->info_);
331  }
332 
334  void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const override;
335 
337  VectorValues gradientAtZero() const override;
338 
340  void gradientAtZero(double* d) const override;
341 
346  Vector gradient(Key key, const VectorValues& x) const override;
347 
352  boost::shared_ptr<GaussianConditional> eliminateCholesky(const Ordering& keys);
353 
355  VectorValues solve();
356 
357  private:
359  void Allocate(const Scatter& scatter);
360 
362  HessianFactor(const Scatter& scatter);
363 
364  friend class NonlinearFactorGraph;
365  friend class NonlinearClusterTree;
366 
368  friend class boost::serialization::access;
369  template<class ARCHIVE>
370  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
371  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(GaussianFactor);
372  ar & BOOST_SERIALIZATION_NVP(info_);
373  }
374  };
375 
392 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<HessianFactor> >
394 
410 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<GaussianFactor> >
411  EliminatePreferCholesky(const GaussianFactorGraph& factors, const Ordering& keys);
412 
414 template<>
415 struct traits<HessianFactor> : public Testable<HessianFactor> {};
416 
417 } // \ namespace gtsam
418 
419 
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
SymmetricBlockMatrix::constBlock linearTerm() const
Scalar * y
Access to matrices via blocks of pre-defined sizes. Used in GaussianFactor and GaussianConditional.
SymmetricBlockMatrix & info()
JacobiRotation< float > G
SymmetricBlockMatrix::constBlock linearTerm(const_iterator j) const
double mu
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:43
A factor with a quadratic error function - a Gaussian.
Scalar Scalar * c
Definition: benchVecAdd.cpp:17
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set view
GaussianFactor::shared_ptr clone() const override
GaussianFactor Base
Typedef to base class.
KeyVector keys_
The keys involved in this factor.
Definition: Factor.h:72
size_t rows() const
GaussianFactorGraph factors(list_of(factor1)(factor2)(factor3))
SymmetricBlockMatrix::constBlock constBlock
A block from the Hessian matrix (const version)
static const KeyFormatter DefaultKeyFormatter
Definition: Key.h:43
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:67
void g(const string &key, int i)
Definition: testBTree.cpp:43
const KeyFormatter & formatter
HessianFactor This
Typedef to this class.
const SymmetricBlockMatrix & info() const
Return underlying information matrix.
void serialize(ARCHIVE &ar, const unsigned int)
double constantTerm() const
else if n * info
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
T negate(const T &x)
Definition: packetmath.cpp:27
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
~HessianFactor() override
bool empty() const override
Eigen::VectorXd Vector
Definition: Vector.h:38
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
RealScalar alpha
Array< double, 1, 3 > e(1./3., 0.5, 2.)
RealScalar s
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
SymmetricBlockMatrix::Block Block
A block from the Hessian matrix.
SymmetricBlockMatrix info_
The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]&#39;H[x -1]...
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Maps global variable indices to slot indices.
A thin wrapper around std::vector that uses a custom allocator.
traits
Definition: chartTesting.h:28
constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock) const
Get a range [i,j) from the matrix. Indices are in block units.
Expression of a fixed-size or dynamic-size block.
Definition: Block.h:103
SymmetricBlockMatrix::Block linearTerm()
void updateHessian(HessianFactor *other) const
Pose3 g1(Rot3(), Point3(100.0, 0.0, 300.0))
A Gaussian factor using the canonical parameters (information form)
DenseIndex getDim(const_iterator variable) const override
static double error
Definition: testRot3.cpp:39
Contains the HessianFactor class, a general quadratic factor.
const G double tol
Definition: Group.h:83
DenseIndex getDim(DenseIndex block) const
Number of dimensions for variable on this diagonal block.
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J&#39;th diagonal block as a self adjoint view.
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:67
const KeyVector keys
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Pose3 g2(g1.expmap(h *V1_g1))
HessianFactor(const GaussianFactorGraph &factors)
DenseIndex rows() const
Row size.
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:61
std::ptrdiff_t j


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:10