GTSAM  4.0.2
C++ library for smoothing and mapping (SAM)
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
gtsam::noiseModel::mEstimator::GemanMcClure Class Reference

#include <LossFunctions.h>

Inheritance diagram for gtsam::noiseModel::mEstimator::GemanMcClure:
Inheritance graph
[legend]
Collaboration diagram for gtsam::noiseModel::mEstimator::GemanMcClure:
Collaboration graph
[legend]

Public Types

typedef std::shared_ptr< GemanMcClureshared_ptr
 
enum  ReweightScheme { Scalar, Block }
 

Public Member Functions

 GemanMcClure (double c=1.0, const ReweightScheme reweight=Block)
 
double weight (double distance) const override
 
double loss (double distance) const override
 
void print (const std::string &s) const override
 
bool equals (const Base &expected, double tol=1e-8) const override
 
double modelParameter () const
 
ReweightScheme reweightScheme () const
 Returns the reweight scheme, as explained in ReweightScheme.
 
Vector weight (const Vector &error) const
 
double sqrtWeight (double distance) const
 
Vector sqrtWeight (const Vector &error) const
 
void reweight (Vector &error) const
 
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
 

Static Public Member Functions

static shared_ptr Create (double k, const ReweightScheme reweight=Block)
 

Protected Attributes

double c_
 
ReweightScheme reweight_
 Strategy for reweighting. More...
 

Detailed Description

Implementation of the "Geman-McClure" robust error model (Zhang97ivc).

Note that Geman-McClure weight function uses the parameter c == 1.0, but here it's allowed to use different values, so we actually have the generalized Geman-McClure from (Agarwal15phd).

Member Enumeration Documentation

◆ ReweightScheme

the rows can be weighted independently according to the error or uniformly with the norm of the right hand side

Member Function Documentation

◆ loss()

double gtsam::noiseModel::mEstimator::GemanMcClure::loss ( double  distance) const
overridevirtual

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 (x) in mEstimator

Reimplemented from gtsam::noiseModel::mEstimator::Base.

◆ reweight()

void gtsam::noiseModel::mEstimator::Base::reweight ( Vector &  error) const
inherited

reweight block matrices and a vector according to their weight implementation

◆ sqrtWeight()

Vector gtsam::noiseModel::mEstimator::Base::sqrtWeight ( const Vector &  error) const
inherited

square root version of the weight function

◆ weight() [1/2]

Vector gtsam::noiseModel::mEstimator::Base::weight ( const Vector &  error) const
inherited

produce a weight vector according to an error vector and the implemented robust function

◆ weight() [2/2]

double gtsam::noiseModel::mEstimator::GemanMcClure::weight ( double  distance) const
overridevirtual

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

Implements gtsam::noiseModel::mEstimator::Base.

Member Data Documentation

◆ reweight_

ReweightScheme gtsam::noiseModel::mEstimator::Base::reweight_
protectedinherited

Strategy for reweighting.

See also
ReweightScheme

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