A number of bug fixes.
1. Fix a build breakage in graph_test.
2. Respect Solver::Options::min_num_linear_solver_iterations in
conjugate_gradients_solver.cc
Thanks to Johannes Schönberger for reporting these.
Change-Id: Ib32e3929bf5d92dd576ae5b53d4d88797095136e
diff --git a/docs/source/solving.rst b/docs/source/solving.rst
index 5f3711a..790d5f3 100644
--- a/docs/source/solving.rst
+++ b/docs/source/solving.rst
@@ -1304,7 +1304,7 @@
.. member:: int Solver::Options::min_linear_solver_iterations
- Default: ``1``
+ Default: ``0``
Minimum number of iterations used by the linear solver. This only
makes sense when the linear solver is an iterative solver, e.g.,
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index ef391a7..0af34ca 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -120,7 +120,7 @@
num_linear_solver_threads = 1;
use_postordering = false;
dynamic_sparsity = false;
- min_linear_solver_iterations = 1;
+ min_linear_solver_iterations = 0;
max_linear_solver_iterations = 500;
eta = 1e-1;
jacobi_scaling = true;
diff --git a/internal/ceres/conjugate_gradients_solver.cc b/internal/ceres/conjugate_gradients_solver.cc
index 524cb8a..5e71501 100644
--- a/internal/ceres/conjugate_gradients_solver.cc
+++ b/internal/ceres/conjugate_gradients_solver.cc
@@ -101,7 +101,7 @@
A->RightMultiply(x, tmp.data());
r = bref - tmp;
double norm_r = r.norm();
- if (norm_r <= tol_r) {
+ if (options_.min_num_iteratios == 0 && norm_r <= tol_r) {
summary.termination_type = LINEAR_SOLVER_SUCCESS;
summary.message =
StringPrintf("Convergence. |r| = %e <= %e.", norm_r, tol_r);
@@ -114,7 +114,8 @@
double Q0 = -1.0 * xref.dot(bref + r);
for (summary.num_iterations = 1;
- summary.num_iterations < options_.max_num_iterations;
+ summary.num_iterations > options_.min_num_iterations &&
+ summary.num_iterations < options_.max_num_iterations
++summary.num_iterations) {
// Apply preconditioner
if (per_solve_options.preconditioner != NULL) {
diff --git a/internal/ceres/graph_test.cc b/internal/ceres/graph_test.cc
index a1521d8..033d1d9 100644
--- a/internal/ceres/graph_test.cc
+++ b/internal/ceres/graph_test.cc
@@ -58,14 +58,14 @@
Graph<int> graph;
graph.AddVertex(0);
graph.AddVertex(1);
- graph.AddEdge(0, 1)
+ graph.AddEdge(0, 1);
const HashSet<int>& vertices = graph.vertices();
EXPECT_EQ(vertices.size(), 2);
// Try adding the vertex again with a new weight.
- graph.AddVertex(0, 3.0);
+ graph.AddVertex(0);
EXPECT_EQ(vertices.size(), 2);
// Rest of the graph remains the same.