record iteration numbers
parent
d9935519f9
commit
b55b9de27f
|
@ -37,7 +37,7 @@ namespace gtsam {
|
||||||
template<class G, class C, class L, class S, class W>
|
template<class G, class C, class L, class S, class W>
|
||||||
NonlinearOptimizer<G, C, L, S, W>::NonlinearOptimizer(shared_graph graph,
|
NonlinearOptimizer<G, C, L, S, W>::NonlinearOptimizer(shared_graph graph,
|
||||||
shared_values values, shared_ordering ordering, shared_parameters parameters) :
|
shared_values values, shared_ordering ordering, shared_parameters parameters) :
|
||||||
graph_(graph), values_(values), error_(graph->error(*values)),
|
graph_(graph), values_(values), iterations_(0), error_(graph->error(*values)),
|
||||||
ordering_(ordering), parameters_(parameters), dimensions_(new vector<size_t>(values->dims(*ordering))) {
|
ordering_(ordering), parameters_(parameters), dimensions_(new vector<size_t>(values->dims(*ordering))) {
|
||||||
if (!graph) throw std::invalid_argument(
|
if (!graph) throw std::invalid_argument(
|
||||||
"NonlinearOptimizer constructor: graph = NULL");
|
"NonlinearOptimizer constructor: graph = NULL");
|
||||||
|
@ -54,7 +54,7 @@ namespace gtsam {
|
||||||
shared_ordering ordering,
|
shared_ordering ordering,
|
||||||
shared_solver solver,
|
shared_solver solver,
|
||||||
shared_parameters parameters):
|
shared_parameters parameters):
|
||||||
graph_(graph), values_(values), error_(graph->error(*values)), ordering_(ordering), solver_(solver),
|
graph_(graph), values_(values), iterations_(0), error_(graph->error(*values)), ordering_(ordering), solver_(solver),
|
||||||
parameters_(parameters), dimensions_(new vector<size_t>(values->dims(*ordering))) {
|
parameters_(parameters), dimensions_(new vector<size_t>(values->dims(*ordering))) {
|
||||||
if (!graph) throw std::invalid_argument(
|
if (!graph) throw std::invalid_argument(
|
||||||
"NonlinearOptimizer constructor: graph = NULL");
|
"NonlinearOptimizer constructor: graph = NULL");
|
||||||
|
@ -245,7 +245,7 @@ namespace gtsam {
|
||||||
template<class G, class C, class L, class S, class W>
|
template<class G, class C, class L, class S, class W>
|
||||||
NonlinearOptimizer<G, C, L, S, W> NonlinearOptimizer<G, C, L, S, W>::levenbergMarquardt() {
|
NonlinearOptimizer<G, C, L, S, W> NonlinearOptimizer<G, C, L, S, W>::levenbergMarquardt() {
|
||||||
|
|
||||||
int maxIterations = parameters_->maxIterations_ ;
|
iterations_ = 0;
|
||||||
bool converged = false;
|
bool converged = false;
|
||||||
const Parameters::verbosityLevel verbosity = parameters_->verbosity_ ;
|
const Parameters::verbosityLevel verbosity = parameters_->verbosity_ ;
|
||||||
|
|
||||||
|
@ -256,6 +256,7 @@ namespace gtsam {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iterations_ = 1;
|
||||||
while (true) {
|
while (true) {
|
||||||
double previous_error = error_;
|
double previous_error = error_;
|
||||||
// do one iteration of LM
|
// do one iteration of LM
|
||||||
|
@ -269,13 +270,13 @@ namespace gtsam {
|
||||||
// TODO: build into iterations somehow as an instance variable
|
// TODO: build into iterations somehow as an instance variable
|
||||||
converged = gtsam::check_convergence(*parameters_, previous_error, error_);
|
converged = gtsam::check_convergence(*parameters_, previous_error, error_);
|
||||||
|
|
||||||
if(maxIterations <= 0 || converged == true) {
|
if(iterations_ >= parameters_->maxIterations_ || converged == true) {
|
||||||
if (verbosity >= Parameters::VALUES) values_->print("final values");
|
if (verbosity >= Parameters::VALUES) values_->print("final values");
|
||||||
if (verbosity >= Parameters::ERROR) cout << "final error: " << error_ << endl;
|
if (verbosity >= Parameters::ERROR) cout << "final error: " << error_ << endl;
|
||||||
if (verbosity >= Parameters::LAMBDA) cout << "final lambda = " << lambda() << endl;
|
if (verbosity >= Parameters::LAMBDA) cout << "final lambda = " << lambda() << endl;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
maxIterations--;
|
iterations_++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -97,6 +97,9 @@ namespace gtsam {
|
||||||
|
|
||||||
shared_parameters parameters_;
|
shared_parameters parameters_;
|
||||||
|
|
||||||
|
// for performance track
|
||||||
|
size_t iterations_;
|
||||||
|
|
||||||
// // keep current lambda for use within LM only
|
// // keep current lambda for use within LM only
|
||||||
// // TODO: red flag, should we have an LM class ?
|
// // TODO: red flag, should we have an LM class ?
|
||||||
// const double lambda_;
|
// const double lambda_;
|
||||||
|
@ -178,7 +181,7 @@ namespace gtsam {
|
||||||
// ordering_(optimizer.ordering_), solver_(optimizer.solver_), lambda_(optimizer.lambda_), dimensions_(optimizer.dimensions_) {}
|
// ordering_(optimizer.ordering_), solver_(optimizer.solver_), lambda_(optimizer.lambda_), dimensions_(optimizer.dimensions_) {}
|
||||||
|
|
||||||
NonlinearOptimizer(const NonlinearOptimizer<G, T, L, GS> &optimizer) :
|
NonlinearOptimizer(const NonlinearOptimizer<G, T, L, GS> &optimizer) :
|
||||||
graph_(optimizer.graph_), values_(optimizer.values_), error_(optimizer.error_),
|
graph_(optimizer.graph_), values_(optimizer.values_), iterations_(0), error_(optimizer.error_),
|
||||||
ordering_(optimizer.ordering_), solver_(optimizer.solver_), parameters_(optimizer.parameters_), dimensions_(optimizer.dimensions_) {}
|
ordering_(optimizer.ordering_), solver_(optimizer.solver_), parameters_(optimizer.parameters_), dimensions_(optimizer.dimensions_) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -196,6 +199,11 @@ namespace gtsam {
|
||||||
*/
|
*/
|
||||||
shared_values values() const{ return values_; }
|
shared_values values() const{ return values_; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the itertions
|
||||||
|
*/
|
||||||
|
size_t iterations() const { return iterations_; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return mean and covariance on a single variable
|
* Return mean and covariance on a single variable
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue