12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #ifndef CERES_INTERNAL_LEVENBERG_MARQUARDT_STRATEGY_H_
- #define CERES_INTERNAL_LEVENBERG_MARQUARDT_STRATEGY_H_
- #include "ceres/internal/disable_warnings.h"
- #include "ceres/internal/eigen.h"
- #include "ceres/internal/export.h"
- #include "ceres/trust_region_strategy.h"
- namespace ceres::internal {
- class ContextImpl;
- class CERES_NO_EXPORT LevenbergMarquardtStrategy final
- : public TrustRegionStrategy {
- public:
- explicit LevenbergMarquardtStrategy(
- const TrustRegionStrategy::Options& options);
- ~LevenbergMarquardtStrategy() override;
-
- TrustRegionStrategy::Summary ComputeStep(
- const TrustRegionStrategy::PerSolveOptions& per_solve_options,
- SparseMatrix* jacobian,
- const double* residuals,
- double* step) final;
- void StepAccepted(double step_quality) final;
- void StepRejected(double step_quality) final;
- void StepIsInvalid() final {
-
-
-
-
- StepRejected(0.0);
- }
- double Radius() const final;
- private:
- LinearSolver* linear_solver_;
- double radius_;
- double max_radius_;
- const double min_diagonal_;
- const double max_diagonal_;
- double decrease_factor_;
- bool reuse_diagonal_;
- Vector diagonal_;
-
-
-
- Vector lm_diagonal_;
- ContextImpl* context_;
- int num_threads_;
- };
- }
- #include "ceres/internal/reenable_warnings.h"
- #endif
|