cleaned code to log LM iterations
							parent
							
								
									9f499d2257
								
							
						
					
					
						commit
						e8a4767591
					
				|  | @ -192,6 +192,19 @@ GaussianFactorGraph::shared_ptr LevenbergMarquardtOptimizer::buildDampedSystem( | |||
|   return dampedPtr; | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| // Log current error/lambda to file
 | ||||
| inline void LevenbergMarquardtOptimizer::writeLogFile(double currentError){ | ||||
|   if (!params_.logFile.empty()) { | ||||
|     ofstream os(params_.logFile.c_str(), ios::app); | ||||
|     boost::posix_time::ptime currentTime = boost::posix_time::microsec_clock::universal_time(); | ||||
|     os << /*inner iterations*/ state_.totalNumberInnerIterations << "," | ||||
|         << 1e-6 * (currentTime - state_.startTime).total_microseconds() << "," | ||||
|         << /*current error*/ currentError << "," << state_.lambda << "," | ||||
|         << /*outer iterations*/ state_.iterations << endl; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| void LevenbergMarquardtOptimizer::iterate() { | ||||
| 
 | ||||
|  | @ -206,6 +219,9 @@ void LevenbergMarquardtOptimizer::iterate() { | |||
|     cout << "linearizing = " << endl; | ||||
|   GaussianFactorGraph::shared_ptr linear = linearize(); | ||||
| 
 | ||||
|   if(state_.totalNumberInnerIterations==0) // write initial error
 | ||||
|     writeLogFile(state_.error); | ||||
| 
 | ||||
|   // Keep increasing lambda until we make make progress
 | ||||
|   while (true) { | ||||
| 
 | ||||
|  | @ -288,36 +304,29 @@ void LevenbergMarquardtOptimizer::iterate() { | |||
|       } | ||||
|     } | ||||
| 
 | ||||
|     // Log current error/lambda to file
 | ||||
|     if (!params_.logFile.empty()) { | ||||
|       ofstream os(params_.logFile.c_str(), ios::app); | ||||
|       boost::posix_time::ptime currentTime = boost::posix_time::microsec_clock::universal_time(); | ||||
|       os << /*inner iterations*/ state_.totalNumberInnerIterations << "," | ||||
|           << 1e-6 * (currentTime - state_.startTime).total_microseconds() << "," | ||||
|           << /*current error*/ state_.error << "," << state_.lambda << "," | ||||
|           << /*outer iterations*/ state_.iterations << endl; | ||||
|     } | ||||
|     ++state_.totalNumberInnerIterations; | ||||
| 
 | ||||
|     if (step_is_successful) { // we have successfully decreased the cost and we have good modelFidelity
 | ||||
|       state_.values.swap(newValues); | ||||
|       state_.error = newError; | ||||
|       decreaseLambda(modelFidelity); | ||||
|       writeLogFile(state_.error); | ||||
|       break; | ||||
|     } else if (!stopSearchingLambda) { // we failed to solved the system or we had no decrease in cost
 | ||||
|       if (lmVerbosity >= LevenbergMarquardtParams::TRYLAMBDA) | ||||
|         cout << "increasing lambda" << endl; | ||||
|       increaseLambda(); | ||||
|       writeLogFile(state_.error); | ||||
| 
 | ||||
|       // check if lambda is too big
 | ||||
|       if (state_.lambda >= params_.lambdaUpperBound) { | ||||
|         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; | ||||
|       } | ||||
|     } else { // the change in the cost is very small and it is not worth trying bigger lambdas
 | ||||
|       writeLogFile(state_.error); | ||||
|       if (lmVerbosity >= LevenbergMarquardtParams::TRYLAMBDA) | ||||
|               cout << "Levenberg-Marquardt: stopping as relative cost reduction is small" << endl; | ||||
|       break; | ||||
|  |  | |||
|  | @ -113,7 +113,6 @@ public: | |||
|   inline void setDiagonalDamping(bool flag) { | ||||
|     diagonalDamping = flag; | ||||
|   } | ||||
| 
 | ||||
|   inline void setUseFixedLambdaFactor(bool flag) { | ||||
|     useFixedLambdaFactor_ = flag; | ||||
|   } | ||||
|  | @ -258,6 +257,8 @@ public: | |||
|   GaussianFactorGraph::shared_ptr buildDampedSystem(const GaussianFactorGraph& linear); | ||||
|   friend class ::NonlinearOptimizerMoreOptimizationTest; | ||||
| 
 | ||||
|   void writeLogFile(double currentError); | ||||
| 
 | ||||
|   /// @}
 | ||||
| 
 | ||||
| protected: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue