Moved private/protected back to front of classes. Added print.
							parent
							
								
									f080d34dc0
								
							
						
					
					
						commit
						e9de9f3242
					
				|  | @ -30,6 +30,7 @@ class LevenbergMarquardtOptimizer; | |||
|  * all of those parameters. | ||||
|  */ | ||||
| class LevenbergMarquardtParams : public SuccessiveLinearizationParams { | ||||
| 
 | ||||
| public: | ||||
|   /** See LevenbergMarquardtParams::lmVerbosity */ | ||||
|   enum VerbosityLM { | ||||
|  | @ -41,6 +42,12 @@ public: | |||
|     DAMPED | ||||
|   }; | ||||
| 
 | ||||
| private: | ||||
|   VerbosityLM verbosityLMTranslator(const std::string &s) const; | ||||
|   std::string verbosityLMTranslator(VerbosityLM value) const; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|   double lambdaInitial; ///< The initial Levenberg-Marquardt damping term (default: 1e-5)
 | ||||
|   double lambdaFactor; ///< The amount by which to multiply or divide lambda when adjusting lambda (default: 10.0)
 | ||||
|   double lambdaUpperBound; ///< The maximum lambda to try before assuming the optimization has failed (default: 1e5)
 | ||||
|  | @ -60,16 +67,20 @@ public: | |||
|   inline void setlambdaFactor(double value) { lambdaFactor = value; } | ||||
|   inline void setlambdaUpperBound(double value) { lambdaUpperBound = value; } | ||||
|   inline void setVerbosityLM(const std::string &s) { verbosityLM = verbosityLMTranslator(s); } | ||||
| 
 | ||||
| private: | ||||
|   VerbosityLM verbosityLMTranslator(const std::string &s) const; | ||||
|   std::string verbosityLMTranslator(VerbosityLM value) const; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * State for LevenbergMarquardtOptimizer | ||||
|  */ | ||||
| class LevenbergMarquardtState : public NonlinearOptimizerState { | ||||
| 
 | ||||
| protected: | ||||
| 
 | ||||
|   LevenbergMarquardtState(const NonlinearFactorGraph& graph, const Values& initialValues, const LevenbergMarquardtParams& params, unsigned int iterations = 0) : | ||||
|     NonlinearOptimizerState(graph, initialValues, iterations), lambda(params.lambdaInitial) {} | ||||
| 
 | ||||
|   friend class LevenbergMarquardtOptimizer; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|   double lambda; | ||||
|  | @ -77,12 +88,6 @@ public: | |||
|   LevenbergMarquardtState() {} | ||||
| 
 | ||||
|   virtual ~LevenbergMarquardtState() {} | ||||
| 
 | ||||
| protected: | ||||
|   LevenbergMarquardtState(const NonlinearFactorGraph& graph, const Values& initialValues, const LevenbergMarquardtParams& params, unsigned int iterations = 0) : | ||||
|     NonlinearOptimizerState(graph, initialValues, iterations), lambda(params.lambdaInitial) {} | ||||
| 
 | ||||
|   friend class LevenbergMarquardtOptimizer; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -90,6 +95,25 @@ protected: | |||
|  */ | ||||
| class LevenbergMarquardtOptimizer : public NonlinearOptimizer { | ||||
| 
 | ||||
| protected: | ||||
| 
 | ||||
|   LevenbergMarquardtParams params_; ///< LM parameters
 | ||||
|   LevenbergMarquardtState state_;   ///< optimization state
 | ||||
|   std::vector<size_t> dimensions_;  ///< undocumented
 | ||||
| 
 | ||||
|   /** Access the parameters (base class version) */ | ||||
|   virtual const NonlinearOptimizerParams& _params() const { return params_; } | ||||
| 
 | ||||
|   /** Access the state (base class version) */ | ||||
|   virtual const NonlinearOptimizerState& _state() const { return state_; } | ||||
| 
 | ||||
|   /** Internal function for computing a COLAMD ordering if no ordering is specified */ | ||||
|   LevenbergMarquardtParams ensureHasOrdering(LevenbergMarquardtParams params, const NonlinearFactorGraph& graph, const Values& values) const { | ||||
|     if(!params.ordering) | ||||
|       params.ordering = *graph.orderingCOLAMD(values); | ||||
|     return params; | ||||
|   } | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|   typedef boost::shared_ptr<LevenbergMarquardtOptimizer> shared_ptr; | ||||
|  | @ -122,9 +146,15 @@ public: | |||
|     params_.ordering = ordering; | ||||
|     state_ = LevenbergMarquardtState(graph, initialValues, params_); } | ||||
| 
 | ||||
|   /** Access the current damping value */ | ||||
|   /// Access the current damping value
 | ||||
|   double lambda() const { return state_.lambda; } | ||||
| 
 | ||||
|   /// print
 | ||||
|   virtual void print(const std::string& str = "") const { | ||||
|     std::cout << str << "LevenbergMarquardtOptimizer" << std::endl; | ||||
|     this->params_.print("  parameters:\n"); | ||||
|   } | ||||
| 
 | ||||
|   /// @}
 | ||||
| 
 | ||||
|   /// @name Advanced interface
 | ||||
|  | @ -146,25 +176,6 @@ public: | |||
|   const LevenbergMarquardtState& state() const { return state_; } | ||||
| 
 | ||||
|   /// @}
 | ||||
| 
 | ||||
| protected: | ||||
| 
 | ||||
|   LevenbergMarquardtParams params_; | ||||
|   LevenbergMarquardtState state_; | ||||
|   std::vector<size_t> dimensions_; | ||||
| 
 | ||||
|   /** Access the parameters (base class version) */ | ||||
|   virtual const NonlinearOptimizerParams& _params() const { return params_; } | ||||
| 
 | ||||
|   /** Access the state (base class version) */ | ||||
|   virtual const NonlinearOptimizerState& _state() const { return state_; } | ||||
| 
 | ||||
|   /** Internal function for computing a COLAMD ordering if no ordering is specified */ | ||||
|   LevenbergMarquardtParams ensureHasOrdering(LevenbergMarquardtParams params, const NonlinearFactorGraph& graph, const Values& values) const { | ||||
|     if(!params.ordering) | ||||
|       params.ordering = *graph.orderingCOLAMD(values); | ||||
|     return params; | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue