gtsam 4.2.0
gtsam
gtsam::noiseModel::mEstimator::Base Class Referenceabstract

Detailed Description

Pure virtual class for all robust error function classes.

It provides the machinery for block vs scalar reweighting strategies, in addition to defining the interface of derived classes.

+ Inheritance diagram for gtsam::noiseModel::mEstimator::Base:

Public Member Functions

 Base (const ReweightScheme reweight=Block)
 
ReweightScheme reweightScheme () const
 Returns the reweight scheme, as explained in ReweightScheme.
 
virtual double loss (double distance) const
 This method is responsible for returning the total penalty for a given amount of error. More...
 
virtual double weight (double distance) const =0
 This method is responsible for returning the weight function for a given amount of error. More...
 
virtual void print (const std::string &s) const =0
 
virtual bool equals (const Base &expected, double tol=1e-8) const =0
 
double sqrtWeight (double distance) const
 
Vector weight (const Vector &error) const
 produce a weight vector according to an error vector and the implemented robust function
 
Vector sqrtWeight (const Vector &error) const
 square root version of the weight function
 
void reweight (Vector &error) const
 reweight block matrices and a vector according to their weight implementation
 
void reweight (std::vector< Matrix > &A, Vector &error) const
 
void reweight (Matrix &A, Vector &error) const
 
void reweight (Matrix &A1, Matrix &A2, Vector &error) const
 
void reweight (Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const
 

Public Types

enum  ReweightScheme { Scalar , Block }
 the rows can be weighted independently according to the error or uniformly with the norm of the right hand side
 
typedef boost::shared_ptr< Baseshared_ptr
 

Protected Attributes

ReweightScheme reweight_
 Strategy for reweighting. More...
 

Friends

class boost::serialization::access
 Serialization function.
 

Member Function Documentation

◆ loss()

virtual double gtsam::noiseModel::mEstimator::Base::loss ( double  distance) const
inlinevirtual

This method is responsible for returning the total penalty for a given amount of error.

For example, this method is responsible for implementing the quadratic function for an L2 penalty, the absolute value function for an L1 penalty, etc.

TODO(mikebosse): When the loss function has as input the norm of the error vector, then it prevents implementations of asymmeric loss functions. It would be better for this function to accept the vector and internally call the norm if necessary.

This returns \rho(x) in mEstimator

Reimplemented in gtsam::noiseModel::mEstimator::Null, gtsam::noiseModel::mEstimator::Fair, gtsam::noiseModel::mEstimator::Huber, gtsam::noiseModel::mEstimator::Cauchy, gtsam::noiseModel::mEstimator::Tukey, gtsam::noiseModel::mEstimator::Welsch, gtsam::noiseModel::mEstimator::GemanMcClure, gtsam::noiseModel::mEstimator::DCS, and gtsam::noiseModel::mEstimator::L2WithDeadZone.

◆ weight()

virtual double gtsam::noiseModel::mEstimator::Base::weight ( double  distance) const
pure virtual

This method is responsible for returning the weight function for a given amount of error.

The weight function is related to the analytic derivative of the loss function. See https://members.loria.fr/MOBerger/Enseignement/Master2/Documents/ZhangIVC-97-01.pdf for details. This method is required when optimizing cost functions with robust penalties using iteratively re-weighted least squares.

This returns w(x) in mEstimator

Implemented in gtsam::noiseModel::mEstimator::Fair, gtsam::noiseModel::mEstimator::Huber, gtsam::noiseModel::mEstimator::Cauchy, gtsam::noiseModel::mEstimator::Tukey, gtsam::noiseModel::mEstimator::Welsch, gtsam::noiseModel::mEstimator::GemanMcClure, gtsam::noiseModel::mEstimator::DCS, gtsam::noiseModel::mEstimator::L2WithDeadZone, and gtsam::noiseModel::mEstimator::Null.

Member Data Documentation

◆ reweight_

ReweightScheme gtsam::noiseModel::mEstimator::Base::reweight_
protected

Strategy for reweighting.

See also
ReweightScheme

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