added verbosity for debugging termination
parent
92834a8ed7
commit
9adc59af18
|
|
@ -50,6 +50,7 @@ std::string LevenbergMarquardtParams::verbosityLMTranslator(VerbosityLM value) c
|
||||||
std::string s;
|
std::string s;
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case LevenbergMarquardtParams::SILENT: s = "SILENT" ; break;
|
case LevenbergMarquardtParams::SILENT: s = "SILENT" ; break;
|
||||||
|
case LevenbergMarquardtParams::TERMINATION: s = "TERMINATION" ; break;
|
||||||
case LevenbergMarquardtParams::LAMBDA: s = "LAMBDA" ; break;
|
case LevenbergMarquardtParams::LAMBDA: s = "LAMBDA" ; break;
|
||||||
case LevenbergMarquardtParams::TRYLAMBDA: s = "TRYLAMBDA" ; break;
|
case LevenbergMarquardtParams::TRYLAMBDA: s = "TRYLAMBDA" ; break;
|
||||||
case LevenbergMarquardtParams::TRYCONFIG: s = "TRYCONFIG" ; break;
|
case LevenbergMarquardtParams::TRYCONFIG: s = "TRYCONFIG" ; break;
|
||||||
|
|
@ -203,7 +204,7 @@ void LevenbergMarquardtOptimizer::iterate() {
|
||||||
// The more adventurous lambda was worse too, so make lambda more conservative
|
// The more adventurous lambda was worse too, so make lambda more conservative
|
||||||
// and keep the same values.
|
// and keep the same values.
|
||||||
if(state_.lambda >= params_.lambdaUpperBound) {
|
if(state_.lambda >= params_.lambdaUpperBound) {
|
||||||
if(nloVerbosity >= NonlinearOptimizerParams::ERROR)
|
if(nloVerbosity >= NonlinearOptimizerParams::TERMINATION)
|
||||||
cout << "Warning: Levenberg-Marquardt giving up because cannot decrease error with maximum lambda" << endl;
|
cout << "Warning: Levenberg-Marquardt giving up because cannot decrease error with maximum lambda" << endl;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -214,18 +215,22 @@ void LevenbergMarquardtOptimizer::iterate() {
|
||||||
}
|
}
|
||||||
// bool converged = checkConvergence(_params().relativeErrorTol, _params().absoluteErrorTol, _params().errorTol, state_.error, error);
|
// bool converged = checkConvergence(_params().relativeErrorTol, _params().absoluteErrorTol, _params().errorTol, state_.error, error);
|
||||||
// cout << " Inner iteration - converged " << converged << endl;
|
// cout << " Inner iteration - converged " << converged << endl;
|
||||||
|
// cout << "current error " << state_.error << endl;
|
||||||
|
// cout << "new error " << error << endl;
|
||||||
|
// cout << "costChange " << costChange << endl;
|
||||||
|
// cout << "linearizedCostChange " << linearizedCostChange << endl;
|
||||||
|
// cout << "modelFidelity " << modelFidelity << endl;
|
||||||
}
|
}
|
||||||
} catch (IndeterminantLinearSystemException& e) {
|
} catch (IndeterminantLinearSystemException& e) {
|
||||||
(void) e; // Prevent unused variable warning
|
(void) e; // Prevent unused variable warning
|
||||||
if(lmVerbosity >= LevenbergMarquardtParams::LAMBDA)
|
if(lmVerbosity >= LevenbergMarquardtParams::TERMINATION)
|
||||||
cout << "Negative matrix, increasing lambda" << endl;
|
cout << "Negative matrix, increasing lambda" << endl;
|
||||||
|
|
||||||
// cout << "failed to solve current system" << endl;
|
|
||||||
// Either we're not cautious, or the same lambda was worse than the current error.
|
// Either we're not cautious, or the same lambda was worse than the current error.
|
||||||
// The more adventurous lambda was worse too, so make lambda more conservative
|
// The more adventurous lambda was worse too, so make lambda more conservative
|
||||||
// and keep the same values.
|
// and keep the same values.
|
||||||
if(state_.lambda >= params_.lambdaUpperBound) {
|
if(state_.lambda >= params_.lambdaUpperBound) {
|
||||||
if(nloVerbosity >= NonlinearOptimizerParams::ERROR)
|
if(nloVerbosity >= NonlinearOptimizerParams::TERMINATION)
|
||||||
cout << "Warning: Levenberg-Marquardt giving up because cannot decrease error with maximum lambda" << endl;
|
cout << "Warning: Levenberg-Marquardt giving up because cannot decrease error with maximum lambda" << endl;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class GTSAM_EXPORT LevenbergMarquardtParams: public NonlinearOptimizerParams {
|
||||||
public:
|
public:
|
||||||
/** See LevenbergMarquardtParams::lmVerbosity */
|
/** See LevenbergMarquardtParams::lmVerbosity */
|
||||||
enum VerbosityLM {
|
enum VerbosityLM {
|
||||||
SILENT = 0, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED, TRYDELTA
|
SILENT = 0, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED, TRYDELTA
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ NonlinearOptimizerParams::Verbosity NonlinearOptimizerParams::verbosityTranslato
|
||||||
return NonlinearOptimizerParams::DELTA;
|
return NonlinearOptimizerParams::DELTA;
|
||||||
if (s == "LINEAR")
|
if (s == "LINEAR")
|
||||||
return NonlinearOptimizerParams::LINEAR;
|
return NonlinearOptimizerParams::LINEAR;
|
||||||
|
if (s == "TERMINATION")
|
||||||
|
return NonlinearOptimizerParams::TERMINATION;
|
||||||
|
|
||||||
/* default is silent */
|
/* default is silent */
|
||||||
return NonlinearOptimizerParams::SILENT;
|
return NonlinearOptimizerParams::SILENT;
|
||||||
|
|
@ -40,6 +42,9 @@ std::string NonlinearOptimizerParams::verbosityTranslator(
|
||||||
case NonlinearOptimizerParams::SILENT:
|
case NonlinearOptimizerParams::SILENT:
|
||||||
s = "SILENT";
|
s = "SILENT";
|
||||||
break;
|
break;
|
||||||
|
case NonlinearOptimizerParams::TERMINATION:
|
||||||
|
s = "TERMINATION";
|
||||||
|
break;
|
||||||
case NonlinearOptimizerParams::ERROR:
|
case NonlinearOptimizerParams::ERROR:
|
||||||
s = "ERROR";
|
s = "ERROR";
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue