Part.I Introduction
Ceres 中求解优化问题的迭代求解方法(minimizer_type
)有线性搜索方法(LINEAR_SEARCH
)、信赖域方法(TRUST_REGION
)等,其中TRUST_REGION
是其默认选项,平时使用比较多,因此本文对TRUST_REGION
方法的源码进行简单的剖析,其实主要是对其中的Minimize
函数进行解析。
信赖域法:信赖域法是先用一个简单的模型近似在当前参数估值 X 0 X^0 X0 下的代价函数,然后初步确定一个信赖域 Δ \Delta Δ,在该半径范围内寻找一个能使代价函数下降最多的增量 Δ x \Delta x Δx。
可以认为,信赖域方法是先确定最大步长,再确定方向和实际步长。也就是说,先确定一个信赖域半径,并在该半径范围内确定出一个最佳方向和步长。
Part.II 源码剖析
首先,所涉及的文件有
internal/ceres/solver.cc
internal/ceres/trust_region_minimizer.h
internal/ceres/trust_region_minimizer.cc
Chap.I TrustRegionMinimizer 类介绍
TrustRegionMinimizer
继承自Minimizer
类,Minimizer
类是一个基类。
类中的成员变量:
Minimizer::Options options_;
// These pointers are shortcuts to objects passed to the
// TrustRegionMinimizer. The TrustRegionMinimizer does not own them.
double* parameters_;
Solver::Summary* solver_summary_;
Evaluator* evaluator_;
SparseMatrix* jacobian_;
TrustRegionStrategy* strategy_;
std::unique_ptr<TrustRegionStepEvaluator> step_evaluator_;
bool is_not_silent_;
bool inner_iterations_are_enabled_;
bool inner_iterations_were_useful_;
// Summary of the current iteration.
IterationSummary iteration_summary_;
// Dimensionali