change test cases to use the updated names, remove 2nd Create in robust
parent
efc264d8ee
commit
90b286f553
|
@ -661,10 +661,10 @@ Robust::shared_ptr Robust::Create(const RobustModel::shared_ptr& robust,
|
|||
return shared_ptr(new Robust(robust, gaussian));
|
||||
}
|
||||
|
||||
Robust::shared_ptr Robust::Create(
|
||||
const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise){
|
||||
return shared_ptr(new Robust(robust,noise));
|
||||
}
|
||||
// Robust::shared_ptr Robust::Create(
|
||||
// const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise){
|
||||
// return shared_ptr(new Robust(robust,noise));
|
||||
// }
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
|
|
|
@ -734,8 +734,8 @@ namespace gtsam {
|
|||
static shared_ptr Create(
|
||||
const RobustModel::shared_ptr &robust, const noiseModel::Base::shared_ptr noise);
|
||||
|
||||
static shared_ptr Create(
|
||||
const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);
|
||||
// static shared_ptr Create(
|
||||
// const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);
|
||||
|
||||
private:
|
||||
/** Serialization function */
|
||||
|
|
|
@ -451,7 +451,7 @@ TEST(NoiseModel, WhitenInPlace)
|
|||
|
||||
/*
|
||||
* These tests are responsible for testing the weight functions for the m-estimators in GTSAM.
|
||||
* The weight function is related to the analytic derivative of the residual function. See
|
||||
* 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 weight function is required when optimizing cost functions with robust
|
||||
* penalties using iteratively re-weighted least squares.
|
||||
|
@ -467,10 +467,10 @@ TEST(NoiseModel, robustFunctionFair)
|
|||
DOUBLES_EQUAL(0.3333333333333333, fair->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.8333333333333333, fair->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.441961080151135, fair->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(22.534692783297260, fair->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(22.534692783297260, fair->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.441961080151135, fair->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.441961080151135, fair->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(22.534692783297260, fair->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(22.534692783297260, fair->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.441961080151135, fair->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionHuber)
|
||||
|
@ -483,10 +483,10 @@ TEST(NoiseModel, robustFunctionHuber)
|
|||
DOUBLES_EQUAL(0.5, huber->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(1.0, huber->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.5000, huber->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(37.5000, huber->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(37.5000, huber->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.5000, huber->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.5000, huber->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(37.5000, huber->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(37.5000, huber->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.5000, huber->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionCauchy)
|
||||
|
@ -499,10 +499,10 @@ TEST(NoiseModel, robustFunctionCauchy)
|
|||
DOUBLES_EQUAL(0.2000, cauchy->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.961538461538461, cauchy->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.490258914416017, cauchy->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(20.117973905426254, cauchy->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(20.117973905426254, cauchy->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.490258914416017, cauchy->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.490258914416017, cauchy->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(20.117973905426254, cauchy->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(20.117973905426254, cauchy->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.490258914416017, cauchy->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionGemanMcClure)
|
||||
|
@ -514,10 +514,10 @@ TEST(NoiseModel, robustFunctionGemanMcClure)
|
|||
DOUBLES_EQUAL(9.80296e-5, gmc->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.25 , gmc->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.2500, gmc->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(0.495049504950495, gmc->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(0.495049504950495, gmc->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.2500, gmc->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.2500, gmc->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(0.495049504950495, gmc->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(0.495049504950495, gmc->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.2500, gmc->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionWelsch)
|
||||
|
@ -530,10 +530,10 @@ TEST(NoiseModel, robustFunctionWelsch)
|
|||
DOUBLES_EQUAL(0.018315638888734, welsch->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.960789439152323, welsch->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.490132010595960, welsch->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(12.271054513890823, welsch->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(12.271054513890823, welsch->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.490132010595960, welsch->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.490132010595960, welsch->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(12.271054513890823, welsch->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(12.271054513890823, welsch->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.490132010595960, welsch->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionTukey)
|
||||
|
@ -546,10 +546,10 @@ TEST(NoiseModel, robustFunctionTukey)
|
|||
DOUBLES_EQUAL(0.0, tukey->weight(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.9216, tukey->weight(error4), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.480266666666667, tukey->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(4.166666666666667, tukey->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(4.166666666666667, tukey->residual(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.480266666666667, tukey->residual(error4), 1e-8);
|
||||
DOUBLES_EQUAL(0.480266666666667, tukey->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(4.166666666666667, tukey->loss(error2), 1e-8);
|
||||
DOUBLES_EQUAL(4.166666666666667, tukey->loss(error3), 1e-8);
|
||||
DOUBLES_EQUAL(0.480266666666667, tukey->loss(error4), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionDCS)
|
||||
|
@ -560,8 +560,8 @@ TEST(NoiseModel, robustFunctionDCS)
|
|||
DOUBLES_EQUAL(1.0 , dcs->weight(error1), 1e-8);
|
||||
DOUBLES_EQUAL(0.00039211, dcs->weight(error2), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(0.5 , dcs->residual(error1), 1e-8);
|
||||
DOUBLES_EQUAL(0.9900990099, dcs->residual(error2), 1e-8);
|
||||
DOUBLES_EQUAL(0.5 , dcs->loss(error1), 1e-8);
|
||||
DOUBLES_EQUAL(0.9900990099, dcs->loss(error2), 1e-8);
|
||||
}
|
||||
|
||||
TEST(NoiseModel, robustFunctionL2WithDeadZone)
|
||||
|
@ -576,12 +576,12 @@ TEST(NoiseModel, robustFunctionL2WithDeadZone)
|
|||
DOUBLES_EQUAL(0.00990099009, lsdz->weight(e4), 1e-8);
|
||||
DOUBLES_EQUAL(0.9, lsdz->weight(e5), 1e-8);
|
||||
|
||||
DOUBLES_EQUAL(40.5, lsdz->residual(e0), 1e-8);
|
||||
DOUBLES_EQUAL(0.00005, lsdz->residual(e1), 1e-8);
|
||||
DOUBLES_EQUAL(0.0, lsdz->residual(e2), 1e-8);
|
||||
DOUBLES_EQUAL(0.0, lsdz->residual(e3), 1e-8);
|
||||
DOUBLES_EQUAL(0.00005, lsdz->residual(e4), 1e-8);
|
||||
DOUBLES_EQUAL(40.5, lsdz->residual(e5), 1e-8);
|
||||
DOUBLES_EQUAL(40.5, lsdz->loss(e0), 1e-8);
|
||||
DOUBLES_EQUAL(0.00005, lsdz->loss(e1), 1e-8);
|
||||
DOUBLES_EQUAL(0.0, lsdz->loss(e2), 1e-8);
|
||||
DOUBLES_EQUAL(0.0, lsdz->loss(e3), 1e-8);
|
||||
DOUBLES_EQUAL(0.00005, lsdz->loss(e4), 1e-8);
|
||||
DOUBLES_EQUAL(40.5, lsdz->loss(e5), 1e-8);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
@ -665,11 +665,11 @@ TEST(NoiseModel, robustNoiseL2WithDeadZone)
|
|||
|
||||
/*
|
||||
* TODO(mike): There is currently a bug in GTSAM, where none of the mEstimator classes
|
||||
* implement a residual function, and GTSAM calls the weight function to evaluate the
|
||||
* total penalty, rather than calling the residual function. The weight function should be
|
||||
* implement a loss function, and GTSAM calls the weight function to evaluate the
|
||||
* total penalty, rather than calling the loss function. The weight function should be
|
||||
* used during iteratively reweighted least squares optimization, but should not be used to
|
||||
* evaluate the total penalty. The long-term solution is for all mEstimators to implement
|
||||
* both a weight and a residual function, and for GTSAM to call the residual function when
|
||||
* both a weight and a loss function, and for GTSAM to call the loss function when
|
||||
* evaluating the total penalty. This bug causes the test below to fail, so I'm leaving it
|
||||
* commented out until the underlying bug in GTSAM is fixed.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue