added verbosity for debugging termination

release/4.3a0
Luca 2014-02-18 17:33:00 -05:00
parent 92834a8ed7
commit 9adc59af18
3 changed files with 24 additions and 14 deletions

View File

@ -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 {

View File

@ -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:

View File

@ -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;