g2o
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
g2o::Solver Class Referenceabstract

Generic interface for a sparse solver operating on a graph which solves one iteration of the linearized objective function. More...

#include <solver.h>

Inheritance diagram for g2o::Solver:
Inheritance graph
[legend]
Collaboration diagram for g2o::Solver:
Collaboration graph
[legend]

Public Member Functions

 Solver ()
 
virtual ~Solver ()
 
virtual bool init (SparseOptimizer *optimizer, bool online=false)=0
 
virtual bool buildStructure (bool zeroBlocks=false)=0
 
virtual bool updateStructure (const std::vector< HyperGraph::Vertex * > &vset, const HyperGraph::EdgeSet &edges)=0
 
virtual bool buildSystem ()=0
 
virtual bool solve ()=0
 
virtual bool computeMarginals (SparseBlockMatrix< MatrixX > &spinv, const std::vector< std::pair< int, int > > &blockIndices)=0
 
virtual bool setLambda (double lambda, bool backup=false)=0
 
virtual void restoreDiagonal ()=0
 
double * x ()
 return x, the solution vector
 
const double * x () const
 
double * b ()
 return b, the right hand side of the system
 
const double * b () const
 
size_t vectorSize () const
 return the size of the solution vector (x) and b
 
SparseOptimizeroptimizer () const
 the optimizer (graph) on which the solver works
 
void setOptimizer (SparseOptimizer *optimizer)
 
bool levenberg () const
 the system is Levenberg-Marquardt
 
void setLevenberg (bool levenberg)
 
virtual bool supportsSchur ()
 
virtual bool schur ()=0
 should the solver perform the schur complement or not
 
virtual void setSchur (bool s)=0
 
size_t additionalVectorSpace () const
 
void setAdditionalVectorSpace (size_t s)
 
virtual void setWriteDebug (bool)=0
 
virtual bool writeDebug () const =0
 
virtual bool saveHessian (const std::string &) const =0
 write the hessian to disk using the specified file name
 

Protected Member Functions

void resizeVector (size_t sx)
 

Protected Attributes

SparseOptimizer_optimizer
 
double * _x
 
double * _b
 
size_t _xSize
 
size_t _maxXSize
 
bool _isLevenberg
 
size_t _additionalVectorSpace
 

Private Member Functions

 Solver (const Solver &)
 
Solveroperator= (const Solver &)
 

Detailed Description

Generic interface for a sparse solver operating on a graph which solves one iteration of the linearized objective function.

Definition at line 44 of file solver.h.

Constructor & Destructor Documentation

◆ Solver() [1/2]

g2o::Solver::Solver ( )

Definition at line 36 of file solver.cpp.

37 : _optimizer(0),
38 _x(0),
39 _b(0),
40 _xSize(0),
41 _maxXSize(0),
42 _isLevenberg(false),
size_t _maxXSize
Definition solver.h:142
double * _b
Definition solver.h:141
size_t _additionalVectorSpace
Definition solver.h:145
bool _isLevenberg
Definition solver.h:143
double * _x
Definition solver.h:140
size_t _xSize
Definition solver.h:142
SparseOptimizer * _optimizer
Definition solver.h:139

◆ ~Solver()

g2o::Solver::~Solver ( )
virtual

Definition at line 45 of file solver.cpp.

45 {
48}
void free_aligned(Type *block)

References _b, _x, and g2o::free_aligned().

◆ Solver() [2/2]

g2o::Solver::Solver ( const Solver )
inlineprivate

Definition at line 151 of file solver.h.

151{}

Member Function Documentation

◆ additionalVectorSpace()

size_t g2o::Solver::additionalVectorSpace ( ) const
inline

Definition at line 126 of file solver.h.

126{ return _additionalVectorSpace; }

◆ b() [1/2]

double * g2o::Solver::b ( )
inline

◆ b() [2/2]

const double * g2o::Solver::b ( ) const
inline

Definition at line 102 of file solver.h.

102{ return _b; }

◆ buildStructure()

virtual bool g2o::Solver::buildStructure ( bool  zeroBlocks = false)
pure virtual

◆ buildSystem()

virtual bool g2o::Solver::buildSystem ( )
pure virtual

◆ computeMarginals()

virtual bool g2o::Solver::computeMarginals ( SparseBlockMatrix< MatrixX > &  spinv,
const std::vector< std::pair< int, int > > &  blockIndices 
)
pure virtual

computes the block diagonal elements of the pattern specified in the input and stores them in given SparseBlockMatrix

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmWithHessian::computeMarginals().

◆ init()

virtual bool g2o::Solver::init ( SparseOptimizer optimizer,
bool  online = false 
)
pure virtual

initialize the solver, called once before the first iteration

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmWithHessian::init().

◆ levenberg()

bool g2o::Solver::levenberg ( ) const
inline

the system is Levenberg-Marquardt

Definition at line 112 of file solver.h.

112{ return _isLevenberg; }

Referenced by setLevenberg().

◆ operator=()

Solver & g2o::Solver::operator= ( const Solver )
inlineprivate

Definition at line 152 of file solver.h.

152{ return *this; }

◆ optimizer()

SparseOptimizer * g2o::Solver::optimizer ( ) const
inline

the optimizer (graph) on which the solver works

Definition at line 108 of file solver.h.

108{ return _optimizer; }

Referenced by setOptimizer(), g2o::OptimizationAlgorithmDogleg::solve(), g2o::OptimizationAlgorithmGaussNewton::solve(), and g2o::OptimizationAlgorithmLevenberg::solve().

◆ resizeVector()

void g2o::Solver::resizeVector ( size_t  sx)
protected

Definition at line 50 of file solver.cpp.

50 {
51 size_t oldSize = _xSize;
52 _xSize = sx;
53 sx += _additionalVectorSpace; // allocate some additional space if requested
54 if (_maxXSize < sx) {
55 _maxXSize = 2 * sx;
57 _x = allocate_aligned<double>(_maxXSize);
58#ifndef NDEBUG
59 memset(_x, 0, _maxXSize * sizeof(double));
60#endif
61 if (_b) { // backup the former b, might still be needed for online
62 // processing
63 memcpy(_x, _b, oldSize * sizeof(double));
65 _b = allocate_aligned<double>(_maxXSize);
66 std::swap(_b, _x);
67 } else {
68 _b = allocate_aligned<double>(_maxXSize);
69#ifndef NDEBUG
70 memset(_b, 0, _maxXSize * sizeof(double));
71#endif
72 }
73 }
74}

References _additionalVectorSpace, _b, _maxXSize, _x, _xSize, and g2o::free_aligned().

◆ restoreDiagonal()

virtual void g2o::Solver::restoreDiagonal ( )
pure virtual

restore a previously made backup of the diagonal

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmDogleg::solve(), and g2o::OptimizationAlgorithmLevenberg::solve().

◆ saveHessian()

virtual bool g2o::Solver::saveHessian ( const std::string &  ) const
pure virtual

write the hessian to disk using the specified file name

Implemented in g2o::BlockSolver< Traits >.

◆ schur()

virtual bool g2o::Solver::schur ( )
pure virtual

should the solver perform the schur complement or not

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmGaussNewton::printVerbose(), and g2o::OptimizationAlgorithmLevenberg::printVerbose().

◆ setAdditionalVectorSpace()

void g2o::Solver::setAdditionalVectorSpace ( size_t  s)

Definition at line 82 of file solver.cpp.

References _additionalVectorSpace.

Referenced by g2o::SparseOptimizerIncremental::initSolver().

◆ setLambda()

virtual bool g2o::Solver::setLambda ( double  lambda,
bool  backup = false 
)
pure virtual

update the system while performing Levenberg, i.e., modifying the diagonal components of A by doing += lambda along the main diagonal of the Matrix. Note that this function may be called with a positive and a negative lambda. The latter is used to undo a former modification. If backup is true, then the solver should store a backup of the diagonal, which can be restored by restoreDiagonal()

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmDogleg::solve(), and g2o::OptimizationAlgorithmLevenberg::solve().

◆ setLevenberg()

void g2o::Solver::setLevenberg ( bool  levenberg)

Definition at line 80 of file solver.cpp.

bool levenberg() const
the system is Levenberg-Marquardt
Definition solver.h:112

References _isLevenberg, and levenberg().

◆ setOptimizer()

void g2o::Solver::setOptimizer ( SparseOptimizer optimizer)

Definition at line 76 of file solver.cpp.

76 {
78}
SparseOptimizer * optimizer() const
the optimizer (graph) on which the solver works
Definition solver.h:108

References _optimizer, and optimizer().

◆ setSchur()

virtual void g2o::Solver::setSchur ( bool  s)
pure virtual

◆ setWriteDebug()

virtual void g2o::Solver::setWriteDebug ( bool  )
pure virtual

write debug output of the Hessian if system is not positive definite

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmWithHessian::init().

◆ solve()

virtual bool g2o::Solver::solve ( )
pure virtual

◆ supportsSchur()

virtual bool g2o::Solver::supportsSchur ( )
inlinevirtual

does this solver support the Schur complement for solving a system consisting of poses and landmarks. Re-implement in a derived solver, if your solver supports it.

Reimplemented in g2o::BlockSolver< Traits >.

Definition at line 120 of file solver.h.

120{ return false; }

Referenced by g2o::OptimizationAlgorithmWithHessian::init().

◆ updateStructure()

virtual bool g2o::Solver::updateStructure ( const std::vector< HyperGraph::Vertex * > &  vset,
const HyperGraph::EdgeSet edges 
)
pure virtual

update the structures for online processing

Implemented in g2o::BlockSolver< Traits >.

Referenced by g2o::OptimizationAlgorithmWithHessian::updateStructure().

◆ vectorSize()

size_t g2o::Solver::vectorSize ( ) const
inline

return the size of the solution vector (x) and b

Definition at line 105 of file solver.h.

105{ return _xSize; }

Referenced by g2o::OptimizationAlgorithmLevenberg::computeScale(), and g2o::OptimizationAlgorithmDogleg::solve().

◆ writeDebug()

virtual bool g2o::Solver::writeDebug ( ) const
pure virtual

Implemented in g2o::BlockSolver< Traits >.

◆ x() [1/2]

double * g2o::Solver::x ( )
inline

◆ x() [2/2]

const double * g2o::Solver::x ( ) const
inline

Definition at line 99 of file solver.h.

99{ return _x; }

Member Data Documentation

◆ _additionalVectorSpace

size_t g2o::Solver::_additionalVectorSpace
protected

Definition at line 145 of file solver.h.

Referenced by resizeVector(), and setAdditionalVectorSpace().

◆ _b

double* g2o::Solver::_b
protected

Definition at line 141 of file solver.h.

Referenced by resizeVector(), and ~Solver().

◆ _isLevenberg

bool g2o::Solver::_isLevenberg
protected

the system we gonna solve is a Levenberg-Marquardt system

Definition at line 143 of file solver.h.

Referenced by setLevenberg().

◆ _maxXSize

size_t g2o::Solver::_maxXSize
protected

Definition at line 142 of file solver.h.

Referenced by resizeVector().

◆ _optimizer

SparseOptimizer* g2o::Solver::_optimizer
protected

Definition at line 139 of file solver.h.

Referenced by setOptimizer().

◆ _x

double* g2o::Solver::_x
protected

Definition at line 140 of file solver.h.

Referenced by resizeVector(), and ~Solver().

◆ _xSize

size_t g2o::Solver::_xSize
protected

Definition at line 142 of file solver.h.

Referenced by g2o::BlockSolver< Traits >::BlockSolver(), and resizeVector().


The documentation for this class was generated from the following files: