commit
4e1e76250e
|
@ -42,7 +42,7 @@ static double Chi2inv(const double alpha, const size_t dofs) {
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
template<class GncParameters>
|
template<class GncParameters>
|
||||||
class GncOptimizer {
|
class GTSAM_EXPORT GncOptimizer {
|
||||||
public:
|
public:
|
||||||
/// For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimizer.
|
/// For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimizer.
|
||||||
typedef typename GncParameters::OptimizerType BaseOptimizer;
|
typedef typename GncParameters::OptimizerType BaseOptimizer;
|
||||||
|
|
|
@ -39,7 +39,7 @@ enum GncLossType {
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class BaseOptimizerParameters>
|
template<class BaseOptimizerParameters>
|
||||||
class GncParams {
|
class GTSAM_EXPORT GncParams {
|
||||||
public:
|
public:
|
||||||
/// For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimizer.
|
/// For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimizer.
|
||||||
typedef typename BaseOptimizerParameters::OptimizerType OptimizerType;
|
typedef typename BaseOptimizerParameters::OptimizerType OptimizerType;
|
||||||
|
|
|
@ -522,6 +522,17 @@ virtual class DoglegParams : gtsam::NonlinearOptimizerParams {
|
||||||
void setVerbosityDL(string verbosityDL) const;
|
void setVerbosityDL(string verbosityDL) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include <gtsam/nonlinear/GncParams.h>
|
||||||
|
template<PARAMS>
|
||||||
|
virtual class GncParams {
|
||||||
|
GncParams(const PARAMS& baseOptimizerParams);
|
||||||
|
GncParams();
|
||||||
|
void print(const string& str) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef gtsam::GncParams<gtsam::GaussNewtonParams> GncGaussNewtonParams;
|
||||||
|
typedef gtsam::GncParams<gtsam::LevenbergMarquardtParams> GncLMParams;
|
||||||
|
|
||||||
#include <gtsam/nonlinear/NonlinearOptimizer.h>
|
#include <gtsam/nonlinear/NonlinearOptimizer.h>
|
||||||
virtual class NonlinearOptimizer {
|
virtual class NonlinearOptimizer {
|
||||||
gtsam::Values optimize();
|
gtsam::Values optimize();
|
||||||
|
@ -552,6 +563,18 @@ virtual class DoglegOptimizer : gtsam::NonlinearOptimizer {
|
||||||
double getDelta() const;
|
double getDelta() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include <gtsam/nonlinear/GncOptimizer.h>
|
||||||
|
template<PARAMS>
|
||||||
|
virtual class GncOptimizer {
|
||||||
|
GncOptimizer(const gtsam::NonlinearFactorGraph& graph,
|
||||||
|
const gtsam::Values& initialValues,
|
||||||
|
const PARAMS& params);
|
||||||
|
gtsam::Values optimize();
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef gtsam::GncOptimizer<gtsam::GncParams<gtsam::GaussNewtonParams> > GncGaussNewtonOptimizer;
|
||||||
|
typedef gtsam::GncOptimizer<gtsam::GncParams<gtsam::LevenbergMarquardtParams> > GncLMOptimizer;
|
||||||
|
|
||||||
#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>
|
#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>
|
||||||
virtual class LevenbergMarquardtOptimizer : gtsam::NonlinearOptimizer {
|
virtual class LevenbergMarquardtOptimizer : gtsam::NonlinearOptimizer {
|
||||||
LevenbergMarquardtOptimizer(const gtsam::NonlinearFactorGraph& graph,
|
LevenbergMarquardtOptimizer(const gtsam::NonlinearFactorGraph& graph,
|
||||||
|
|
|
@ -17,8 +17,9 @@ import unittest
|
||||||
import gtsam
|
import gtsam
|
||||||
from gtsam import (DoglegOptimizer, DoglegParams,
|
from gtsam import (DoglegOptimizer, DoglegParams,
|
||||||
DummyPreconditionerParameters, GaussNewtonOptimizer,
|
DummyPreconditionerParameters, GaussNewtonOptimizer,
|
||||||
GaussNewtonParams, LevenbergMarquardtOptimizer,
|
GaussNewtonParams, GncLMParams, GncLMOptimizer,
|
||||||
LevenbergMarquardtParams, NonlinearFactorGraph, Ordering,
|
LevenbergMarquardtOptimizer, LevenbergMarquardtParams,
|
||||||
|
NonlinearFactorGraph, Ordering,
|
||||||
PCGSolverParameters, Point2, PriorFactorPoint2, Values)
|
PCGSolverParameters, Point2, PriorFactorPoint2, Values)
|
||||||
from gtsam.utils.test_case import GtsamTestCase
|
from gtsam.utils.test_case import GtsamTestCase
|
||||||
|
|
||||||
|
@ -78,6 +79,12 @@ class TestScenario(GtsamTestCase):
|
||||||
actual3 = DoglegOptimizer(fg, initial_values, dlParams).optimize()
|
actual3 = DoglegOptimizer(fg, initial_values, dlParams).optimize()
|
||||||
self.assertAlmostEqual(0, fg.error(actual3))
|
self.assertAlmostEqual(0, fg.error(actual3))
|
||||||
|
|
||||||
|
# Graduated Non-Convexity (GNC)
|
||||||
|
gncParams = GncLMParams()
|
||||||
|
actual4 = GncLMOptimizer(fg, initial_values, gncParams).optimize()
|
||||||
|
self.assertAlmostEqual(0, fg.error(actual4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue