43 double _wildfireThreshold =
47 : wildfireThreshold(_wildfireThreshold) {}
49 void print(
const std::string str =
"")
const {
51 cout << str <<
"type: ISAM2GaussNewtonParams\n";
52 cout << str <<
"wildfireThreshold: " << wildfireThreshold <<
"\n";
56 double getWildfireThreshold()
const {
return wildfireThreshold; }
57 void setWildfireThreshold(
double wildfireThreshold) {
58 this->wildfireThreshold = wildfireThreshold;
81 double _initialDelta = 1.0,
82 double _wildfireThreshold =
86 SEARCH_EACH_ITERATION,
89 : initialDelta(_initialDelta),
90 wildfireThreshold(_wildfireThreshold),
91 adaptationMode(_adaptationMode),
94 void print(
const std::string str =
"")
const {
96 cout << str <<
"type: ISAM2DoglegParams\n";
97 cout << str <<
"initialDelta: " << initialDelta <<
"\n";
98 cout << str <<
"wildfireThreshold: " << wildfireThreshold <<
"\n";
100 <<
"adaptationMode: " << adaptationModeTranslator(adaptationMode)
105 double getInitialDelta()
const {
return initialDelta; }
106 double getWildfireThreshold()
const {
return wildfireThreshold; }
107 std::string getAdaptationMode()
const {
108 return adaptationModeTranslator(adaptationMode);
110 bool isVerbose()
const {
return verbose; }
111 void setInitialDelta(
double initialDelta) {
112 this->initialDelta = initialDelta;
114 void setWildfireThreshold(
double wildfireThreshold) {
115 this->wildfireThreshold = wildfireThreshold;
117 void setAdaptationMode(
const std::string& adaptationMode) {
118 this->adaptationMode = adaptationModeTranslator(adaptationMode);
120 void setVerbose(
bool verbose) { this->verbose = verbose; }
122 std::string adaptationModeTranslator(
126 const std::string& adaptationMode)
const;
135 typedef ISAM2ThresholdMap::value_type ISAM2ThresholdMapValue;
137 typedef std::variant<ISAM2GaussNewtonParams, ISAM2DoglegParams>
139 typedef std::variant<double, FastMap<char, Vector> >
182 enum Factorization { CHOLESKY, QR };
233 int _relinearizeSkip = 10,
bool _enableRelinearization =
true,
234 bool _evaluateNonlinearError =
false,
235 Factorization _factorization = ISAM2Params::CHOLESKY,
236 bool _cacheLinearizedFactors =
true,
239 bool _enableDetailedResults =
false)
240 : optimizationParams(_optimizationParams),
241 relinearizeThreshold(_relinearizeThreshold),
242 relinearizeSkip(_relinearizeSkip),
243 enableRelinearization(_enableRelinearization),
244 evaluateNonlinearError(_evaluateNonlinearError),
245 factorization(_factorization),
246 cacheLinearizedFactors(_cacheLinearizedFactors),
247 keyFormatter(_keyFormatter),
248 enableDetailedResults(_enableDetailedResults),
249 enablePartialRelinearizationCheck(false),
250 findUnusedFactorSlots(false) {}
253 void print(
const std::string& str =
"")
const {
257 static const std::string kStr(
"optimizationParams: ");
258 if (std::holds_alternative<ISAM2GaussNewtonParams>(optimizationParams)) {
259 std::get<ISAM2GaussNewtonParams>(optimizationParams).
print();
260 }
else if (std::holds_alternative<ISAM2DoglegParams>(optimizationParams)) {
261 std::get<ISAM2DoglegParams>(optimizationParams).
print(kStr);
263 cout << kStr <<
"{unknown type}\n";
266 cout <<
"relinearizeThreshold: ";
267 if (std::holds_alternative<double>(relinearizeThreshold)) {
268 cout << std::get<double>(relinearizeThreshold) <<
"\n";
270 cout <<
"{mapped}\n";
271 for (
const ISAM2ThresholdMapValue& value :
272 std::get<ISAM2ThresholdMap>(relinearizeThreshold)) {
273 cout <<
" '" << value.first
274 <<
"' -> [" << value.second.transpose() <<
" ]\n";
278 cout <<
"relinearizeSkip: " << relinearizeSkip <<
"\n";
279 cout <<
"enableRelinearization: " << enableRelinearization
281 cout <<
"evaluateNonlinearError: " << evaluateNonlinearError
283 cout <<
"factorization: " 284 << factorizationTranslator(factorization) <<
"\n";
285 cout <<
"cacheLinearizedFactors: " << cacheLinearizedFactors
287 cout <<
"enableDetailedResults: " << enableDetailedResults
289 cout <<
"enablePartialRelinearizationCheck: " 290 << enablePartialRelinearizationCheck <<
"\n";
291 cout <<
"findUnusedFactorSlots: " << findUnusedFactorSlots
300 return this->optimizationParams;
303 return relinearizeThreshold;
305 std::string getFactorization()
const {
306 return factorizationTranslator(factorization);
308 KeyFormatter getKeyFormatter()
const {
return keyFormatter; }
311 this->optimizationParams = optimizationParams;
314 this->relinearizeThreshold = relinearizeThreshold;
316 void setFactorization(
const std::string& factorization) {
317 this->factorization = factorizationTranslator(factorization);
320 this->keyFormatter = keyFormatter;
324 return factorization == CHOLESKY
334 static Factorization factorizationTranslator(
const std::string& str);
335 static std::string factorizationTranslator(
const Factorization& value);
FastMap< char, Vector > ISAM2ThresholdMap
Definition: ISAM2Params.h:134
int relinearizeSkip
Definition: ISAM2Params.h:171
bool findUnusedFactorSlots
Definition: ISAM2Params.h:225
std::variant< double, FastMap< char, Vector > > RelinearizationThreshold
Definition: ISAM2Params.h:141
KeyFormatter keyFormatter
Definition: ISAM2Params.h:204
Definition: ISAM2Params.h:136
void print(const std::string &str="") const
print iSAM2 parameters
Definition: ISAM2Params.h:253
std::variant< ISAM2GaussNewtonParams, ISAM2DoglegParams > OptimizationParams
Definition: ISAM2Params.h:138
ISAM2GaussNewtonParams(double _wildfireThreshold=0.001)
Definition: ISAM2Params.h:42
Factorization factorization
Definition: ISAM2Params.h:194
DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationMode
Definition: ISAM2Params.h:74
GTSAM_EXPORT std::pair< std::shared_ptr< GaussianConditional >, std::shared_ptr< JacobianFactor > > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
TrustRegionAdaptationMode
Definition: DoglegOptimizerImpl.h:53
Definition: ISAM2Params.h:68
Definition: ISAM2Params.h:36
Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation) ...
bool evaluateNonlinearError
Definition: ISAM2Params.h:178
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition: EliminateableFactorGraph.h:88
GTSAM_EXPORT void print(const Matrix &A, const std::string &s, std::ostream &stream)
ISAM2DoglegParams(double _initialDelta=1.0, double _wildfireThreshold=1e-5, DoglegOptimizerImpl::TrustRegionAdaptationMode _adaptationMode=DoglegOptimizerImpl::SEARCH_EACH_ITERATION, bool _verbose=false)
Definition: ISAM2Params.h:80
Linear Factor Graph where all factors are Gaussians.
OptimizationParams optimizationParams
Definition: ISAM2Params.h:151
double wildfireThreshold
Definition: ISAM2Params.h:38
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
double wildfireThreshold
Definition: ISAM2Params.h:71
RelinearizationThreshold relinearizeThreshold
Definition: ISAM2Params.h:169
Definition: chartTesting.h:28
bool enableRelinearization
Definition: ISAM2Params.h:175
double initialDelta
The initial trust region radius for Dogleg.
Definition: ISAM2Params.h:69
bool enablePartialRelinearizationCheck
Definition: ISAM2Params.h:219
GTSAM_EXPORT std::pair< std::shared_ptr< GaussianConditional >, std::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Definition: DoglegOptimizerImpl.h:32
bool verbose
Whether Dogleg prints iteration and convergence information.
Definition: ISAM2Params.h:77
bool enableDetailedResults
Definition: ISAM2Params.h:207
ISAM2Params(OptimizationParams _optimizationParams=ISAM2GaussNewtonParams(), RelinearizationThreshold _relinearizeThreshold=0.1, int _relinearizeSkip=10, bool _enableRelinearization=true, bool _evaluateNonlinearError=false, Factorization _factorization=ISAM2Params::CHOLESKY, bool _cacheLinearizedFactors=true, const KeyFormatter &_keyFormatter=DefaultKeyFormatter, bool _enableDetailedResults=false)
Definition: ISAM2Params.h:231
bool cacheLinearizedFactors
Definition: ISAM2Params.h:201