Home | History | Annotate | Download | only in source
      1 .. _chapter-version-history:
      2 
      3 ========
      4 Releases
      5 ========
      6 
      7 HEAD
      8 ====
      9 
     10 #. Added ``Solver::Options::IsValid`` which allows users to validate
     11    their solver configuration before calling ``Solve``.
     12 
     13 #. Added ``EIGEN_SPARSE_QR`` algorithm for covariance estimation using
     14    ``Eigen``'s sparse QR factorization. (Michael Vitus)
     15 
     16 Backward Incompatible API Changes
     17 ---------------------------------
     18 
     19 #. ``Solver::Options::solver_log`` has been removed. If needed this
     20    iteration callback can easily be implemented in user code.
     21 
     22 #. The ``SPARSE_CHOLESKY`` algorithm for covariance estimation has
     23    been removed. It is not rank revealing and numerically poorly
     24    behaved. Sparse QR factorization is a much better way to do this.
     25 
     26 #. The ``SPARSE_QR`` algorithm for covariance estimation has been
     27    renamed to ``SUITE_SPARSE_QR`` to be consistent with
     28    ``EIGEN_SPARSE_QR``.
     29 
     30 
     31 1.9.0
     32 =====
     33 
     34 New Features
     35 ------------
     36 
     37 #. Bounds constraints: Support for upper and/or lower bounds on
     38    parameters when using the trust region minimizer.
     39 #. Dynamic Sparsity: Problems in which the sparsity structure of the
     40    Jacobian changes over the course of the optimization can now be
     41    solved much more efficiently. (Richard Stebbing)
     42 #. Improved support for Microsoft Visual C++ including the ability to
     43    build and ship DLLs. (Bjrn Piltz, Alex Stewart and Sergey
     44    Sharybin)
     45 #. Support for building on iOS 6.0 or higher (Jack Feng).
     46 #. Autogeneration of config.h that captures all the defines used to
     47    build and use Ceres Solver.
     48 #. Simpler and more informative solver termination type
     49    reporting. (See below for more details)
     50 #. New `website <http://www.ceres-solver.org>`_ based entirely on
     51    Sphinx.
     52 #. ``AutoDiffLocalParameterization`` allows the use of automatic
     53    differentiation for defining ``LocalParameterization`` objects
     54    (Alex Stewart)
     55 #. LBFGS is faster due to fewer memory copies.
     56 #. Parameter blocks are not restricted to be less than 32k in size,
     57    they can be up to 2G in size.
     58 #. Faster ``SPARSE_NORMAL_CHOLESKY`` solver when using ``CX_SPARSE``
     59    as the sparse linear algebra library.
     60 #. Added ``Problem::IsParameterBlockPresent`` and
     61    ``Problem::GetParameterization``.
     62 #. Added the (2,4,9) and (2,4,8) template specializations.
     63 #. An example demonstrating the use of
     64    DynamicAutoDiffCostFunction. (Joydeep Biswas)
     65 #. Homography estimation example from Blender demonstrating the use of
     66    a custom ``IterationCallback``. (Sergey Sharybin)
     67 #. Support user passing a custom CMAKE_MODULE_PATH (for BLAS /
     68    LAPACK).
     69 
     70 Backward Incompatible API Changes
     71 ---------------------------------
     72 
     73 #. ``Solver::Options::linear_solver_ordering`` used to be a naked
     74    pointer that Ceres took ownership of. This is error prone behaviour
     75    which leads to problems when copying the ``Solver::Options`` struct
     76    around. This has been replaced with a ``shared_ptr`` to handle
     77    ownership correctly across copies.
     78 
     79 #. The enum used for reporting the termination/convergence status of
     80    the solver has been renamed from ``SolverTerminationType`` to
     81    ``TerminationType``.
     82 
     83    The enum values have also changed. ``FUNCTION_TOLERANCE``,
     84    ``GRADIENT_TOLERANCE`` and ``PARAMETER_TOLERANCE`` have all been
     85    replaced by ``CONVERGENCE``.
     86 
     87    ``NUMERICAL_FAILURE`` has been replaed by ``FAILURE``.
     88 
     89    ``USER_ABORT`` has been renamed to ``USER_FAILURE``.
     90 
     91    Further ``Solver::Summary::error`` has been renamed to
     92    ``Solver::Summary::message``. It contains a more detailed
     93    explanation for why the solver terminated.
     94 
     95 #. ``Solver::Options::gradient_tolerance`` used to be a relative
     96    gradient tolerance. i.e., The solver converged when
     97 
     98    .. math::
     99       \|g(x)\|_\infty < \text{gradient_tolerance} * \|g(x_0)\|_\infty
    100 
    101    where :math:`g(x)` is the gradient of the objective function at
    102    :math:`x` and :math:`x_0` is the parmeter vector at the start of
    103    the optimization.
    104 
    105    This has changed to an absolute tolerance, i.e. the solver
    106    converges when
    107 
    108    .. math::
    109       \|g(x)\|_\infty < \text{gradient_tolerance}
    110 
    111 #. Ceres cannot be built without the line search minimizer
    112    anymore. Thus the preprocessor define
    113    ``CERES_NO_LINE_SEARCH_MINIMIZER`` has been removed.
    114 
    115 Bug Fixes
    116 ---------
    117 
    118 #. Disabled warning C4251. (Bjrn Piltz)
    119 #. Do not propagate 3d party libs through
    120    `IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE]` mechanism when
    121    building shared libraries. (Bjrn Piltz)
    122 #. Fixed errant verbose levels (Bjrn Piltz)
    123 #. Variety of code cleanups, optimizations and bug fixes to the line
    124    search minimizer code (Alex Stewart)
    125 #. Fixed ``BlockSparseMatrix::Transpose`` when the matrix has row and
    126    column blocks. (Richard Bowen)
    127 #. Better error checking when ``Problem::RemoveResidualBlock`` is
    128    called. (Alex Stewart)
    129 #. Fixed a memory leak in ``SchurComplementSolver``.
    130 #. Added ``epsilon()`` method to ``NumTraits<ceres::Jet<T, N> >``. (Filippo
    131    Basso)
    132 #. Fixed a bug in `CompressedRowSparseMatrix::AppendRows`` and
    133    ``DeleteRows``.q
    134 #. Handle empty problems consistently.
    135 #. Restore the state of the ``Problem`` after a call to
    136    ``Problem::Evaluate``. (Stefan Leutenegger)
    137 #. Better error checking and reporting for linear solvers.
    138 #. Use explicit formula to solve quadratic polynomials instead of the
    139    eigenvalue solver.
    140 #. Fix constant parameter handling in inner iterations (Mikael
    141    Persson).
    142 #. SuiteSparse errors do not cause a fatal crash anymore.
    143 #. Fix ``corrector_test.cc``.
    144 #. Relax the requirements on loss function derivatives.
    145 #. Minor bugfix to logging.h (Scott Ettinger)
    146 #. Updated ``gmock`` and ``gtest`` to the latest upstream version.
    147 #. Fix build breakage on old versions of SuiteSparse.
    148 #. Fixed build issues related to Clang / LLVM 3.4 (Johannes
    149    Schnberger)
    150 #. METIS_FOUND is never set. Changed the commit to fit the setting of
    151    the other #._FOUND definitions. (Andreas Franek)
    152 #. Variety of bug fixes and cleanups to the ``CMake`` build system
    153    (Alex Stewart)
    154 #. Removed fictious shared library target from the NDK build.
    155 #. Solver::Options now uses ``shared_ptr`` to handle ownership of
    156    ``Solver::Options::linear_solver_ordering`` and
    157    ``Solver::Options::inner_iteration_ordering``. As a consequence the
    158    ``NDK`` build now depends on ``libc++`` from the ``LLVM`` project.
    159 #. Variety of lint cleanups (William Rucklidge & Jim Roseborough)
    160 #. Various internal cleanups including dead code removal.
    161 
    162 
    163 1.8.0
    164 =====
    165 
    166 New Features
    167 ------------
    168 #. Significant improved ``CMake`` files with better robustness,
    169    dependency checking and GUI support. (Alex Stewart)
    170 #. Added ``DynamicNumericDiffCostFunction`` for numerically
    171    differentiated cost functions whose sizing is determined at run
    172    time.
    173 #. ``NumericDiffCostFunction`` now supports a dynamic number of
    174    residuals just like ``AutoDiffCostFunction``.
    175 #. ``Problem`` exposes more of its structure in its API.
    176 #. Faster automatic differentiation (Tim Langlois)
    177 #. Added the commonly occuring ``2_d_d`` template specialization for
    178    the Schur Eliminator.
    179 #. Faster ``ITERATIVE_SCHUR`` solver using template specializations.
    180 #. Faster ``SCHUR_JACOBI`` preconditioner construction.
    181 #. Faster ``AngleAxisRotatePoint``.
    182 #. Faster Jacobian evaluation when a loss function is used.
    183 #. Added support for multiple clustering algorithms in visibility
    184    based preconditioning, including a new fast single linkage
    185    clustering algorithm.
    186 
    187 Bug Fixes
    188 ---------
    189 #. Fix ordering of ParseCommandLineFlags() & InitGoogleTest() for
    190    Windows. (Alex Stewart)
    191 #. Remove DCHECK_GE checks from fixed_array.h.
    192 #. Fix build on MSVC 2013 (Petter Strandmark)
    193 #. Fixed ``AngleAxisToRotationMatrix`` near zero.
    194 #. Move ``CERES_HASH_NAMESPACE`` macros to ``collections_port.h``.
    195 #. Fix handling of unordered_map/unordered_set on OSX 10.9.0.
    196 #. Explicitly link to libm for ``curve_fitting_c.c``. (Alex Stewart)
    197 #. Minor type conversion fix to autodiff.h
    198 #. Remove RuntimeNumericDiffCostFunction.
    199 #. Fix operator= ambiguity on some versions of Clang. (Alex Stewart)
    200 #. Various Lint cleanups (William Rucklidge & Jim Roseborough)
    201 #. Modified installation folders for Windows. (Pablo Speciale)
    202 #. Added librt to link libraries for SuiteSparse_config on Linux. (Alex Stewart)
    203 #. Check for presence of return-type-c-linkage option with
    204    Clang. (Alex Stewart)
    205 #. Fix Problem::RemoveParameterBlock after calling solve. (Simon Lynen)
    206 #. Fix a free/delete bug in covariance_impl.cc
    207 #. Fix two build errors. (Dustin Lang)
    208 #. Add RequireInitialization = 1 to NumTraits::Jet.
    209 #. Update gmock/gtest to 1.7.0
    210 #. Added IterationSummary::gradient_norm.
    211 #. Reduced verbosity of the inner iteration minimizer.
    212 #. Fixed a bug in TrustRegionMinimizer. (Michael Vitus)
    213 #. Removed android/build_android.sh.
    214 
    215 
    216 1.7.0
    217 =====
    218 
    219 Backward Incompatible API Changes
    220 ---------------------------------
    221 
    222 #. ``Solver::Options::sparse_linear_algebra_library`` has been renamed
    223    to ``Solver::Options::sparse_linear_algebra_library_type``.
    224 
    225 New Features
    226 ------------
    227 
    228 #. Sparse and dense covariance estimation.
    229 #. A new Wolfe line search. (Alex Stewart)
    230 #. ``BFGS`` line search direction. (Alex Stewart)
    231 #. C API
    232 #. Speeded up the use of loss functions > 17x.
    233 #. Faster ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and ``DENSE_SCHUR``
    234    solvers.
    235 #. Support for multiple dense linear algebra backends. In particular
    236    optimized ``BLAS`` and ``LAPACK`` implementations (e.g., Intel MKL,
    237    ACML, OpenBLAS etc) can now be used to do the dense linear
    238    algebra for ``DENSE_QR``, ``DENSE_NORMAL_CHOLESKY`` and
    239    ``DENSE_SCHUR``
    240 #. Use of Inner iterations can now be adaptively stopped. Iteration
    241    and runtime statistics for inner iterations are not reported in
    242    ``Solver::Summary`` and ``Solver::Summary::FullReport``.
    243 #. Improved inner iteration step acceptance criterion.
    244 #. Add BlockRandomAccessCRSMatrix.
    245 #. Speeded up automatic differentiation by 7\%.
    246 #. Bundle adjustment example from libmv/Blender (Sergey Sharybin)
    247 #. Shared library building is now controlled by CMake, rather than a custom
    248    solution. Previously, Ceres had a custom option, but this is now deprecated
    249    in favor of CMake's built in support for switching between static and
    250    shared. Turn on BUILD_SHARED_LIBS to get shared Ceres libraries.
    251 #. No more dependence on Protocol Buffers.
    252 #. Incomplete LQ factorization.
    253 #. Ability to write trust region problems to disk.
    254 #. Add sinh, cosh, tanh and tan functions to automatic differentiation
    255    (Johannes Schnberger)
    256 #. Simplifications to the cmake build file.
    257 #. ``miniglog`` can now be used as a replacement for ``google-glog``
    258    on non Android platforms. (This is NOT recommended).
    259 
    260 Bug Fixes
    261 ---------
    262 
    263 #. Fix ``ITERATIVE_SCHUR`` solver to work correctly when the schur
    264    complement is of size zero. (Soohyun Bae)
    265 #. Fix the ``spec`` file for generating ``RPM`` packages (Brian Pitts
    266    and Taylor Braun-Jones).
    267 #. Fix how ceres calls CAMD (Manas Jagadev)
    268 #. Fix breakage on old versions of SuiteSparse. (Fisher Yu)
    269 #. Fix warning C4373 in Visual Studio (Petter Strandmark)
    270 #. Fix compilation error caused by missing suitesparse headers and
    271    reorganize them to be more robust. (Sergey Sharybin)
    272 #. Check GCC Version before adding -fast compiler option on
    273    OSX. (Steven Lovegrove)
    274 #. Add documentation for minimizer progress output.
    275 #. Lint and other cleanups (William Rucklidge and James Roseborough)
    276 #. Collections port fix for MSC 2008 (Sergey Sharybin)
    277 #. Various corrections and cleanups in the documentation.
    278 #. Change the path where CeresConfig.cmake is installed (Pablo
    279    Speciale)
    280 #. Minor errors in documentation (Pablo Speciale)
    281 #. Updated depend.cmake to follow CMake IF convention. (Joydeep
    282    Biswas)
    283 #. Stablize the schur ordering algorithm.
    284 #. Update license header in split.h.
    285 #. Enabling -O4 (link-time optimization) only if compiler/linker
    286    support it. (Alex Stewart)
    287 #. Consistent glog path across files.
    288 #. ceres-solver.spec: Use cleaner, more conventional Release string
    289    (Taylor Braun-Jones)
    290 #. Fix compile bug on RHEL6 due to missing header (Taylor Braun-Jones)
    291 #. CMake file is less verbose.
    292 #. Use the latest upstream version of google-test and gmock.
    293 #. Rationalize some of the variable names in ``Solver::Options``.
    294 #. Improve Summary::FullReport when line search is used.
    295 #. Expose line search parameters in ``Solver::Options``.
    296 #. Fix update of L-BFGS history buffers after they become full. (Alex
    297    Stewart)
    298 #. Fix configuration error on systems without SuiteSparse installed
    299    (Sergey Sharybin)
    300 #. Enforce the read call returns correct value in ``curve_fitting_c.c``
    301    (Arnaud Gelas)
    302 #. Fix DynamicAutoDiffCostFunction (Richard Stebbing)
    303 #. Fix Problem::RemoveParameterBlock documentation (Johannes
    304    Schnberger)
    305 #. Fix a logging bug in parameter_block.h
    306 #. Refactor the preconditioner class structure.
    307 #. Fix an uninitialized variable warning when building with ``GCC``.
    308 #. Fix a reallocation bug in
    309    ``CreateJacobianBlockSparsityTranspose``. (Yuliy Schwartzburg)
    310 #. Add a define for O_BINARY.
    311 #. Fix miniglog-based Android NDK build; now works with NDK r9. (Scott Ettinger)
    312 
    313 
    314 1.6.0
    315 =====
    316 
    317 New Features
    318 ------------
    319 
    320 #. Major Performance improvements.
    321 
    322    a. Schur type solvers (``SPARSE_SCHUR``, ``DENSE_SCHUR``,
    323       ``ITERATIVE_SCHUR``) are significantly faster due to custom BLAS
    324       routines and fewer heap allocations.
    325 
    326    b. ``SPARSE_SCHUR`` when used with ``CX_SPARSE`` now uses a block
    327       AMD for much improved factorization performance.
    328 
    329    c. The jacobian matrix is pre-ordered so that
    330       ``SPARSE_NORMAL_CHOLESKY`` and ``SPARSE_SCHUR`` do not have to
    331       make copies inside ``CHOLMOD``.
    332 
    333    d. Faster autodiff by replacing division by multplication by inverse.
    334 
    335    e. When compiled without threads, the schur eliminator does not pay
    336       the penalty for locking and unlocking mutexes.
    337 
    338 #. Users can now use ``linear_solver_ordering`` to affect the
    339    fill-reducing ordering used by ``SUITE_SPARSE`` for
    340    ``SPARSE_NORMAL_CHOLESKY``.
    341 #. ``Problem`` can now report the set of parameter blocks it knows about.
    342 #. ``TrustRegionMinimizer`` uses the evaluator to compute the gradient
    343    instead of a matrix vector multiply.
    344 #. On ``Mac OS``, whole program optimization is enabled.
    345 #. Users can now use automatic differentiation to define new
    346    ``LocalParameterization`` objects. (Sergey Sharybin)
    347 #. Enable larger tuple sizes for Visual Studio 2012. (Petter Strandmark)
    348 
    349 
    350 Bug Fixes
    351 ---------
    352 
    353 #. Update the documentation for ``CostFunction``.
    354 #. Fixed a typo in the documentation. (Pablo Speciale)
    355 #. Fix a typo in suitesparse.cc.
    356 #. Bugfix in ``NumericDiffCostFunction``. (Nicolas Brodu)
    357 #. Death to BlockSparseMatrixBase.
    358 #. Change Minimizer::Options::min_trust_region_radius to double.
    359 #. Update to compile with stricter gcc checks. (Joydeep Biswas)
    360 #. Do not modify cached CMAKE_CXX_FLAGS_RELEASE. (Sergey Sharybin)
    361 #. ``<iterator>`` needed for back_insert_iterator. (Petter Strandmark)
    362 #. Lint cleanup. (William Rucklidge)
    363 #. Documentation corrections. (Pablo Speciale)
    364 
    365 
    366 1.5.0
    367 =====
    368 
    369 Backward Incompatible API Changes
    370 ---------------------------------
    371 
    372 #. Added ``Problem::Evaluate``. Now you can evaluate a problem or any
    373    part of it without calling the solver.
    374 
    375    In light of this the following settings have been deprecated and
    376    removed from the API.
    377 
    378    - ``Solver::Options::return_initial_residuals``
    379    - ``Solver::Options::return_initial_gradient``
    380    - ``Solver::Options::return_initial_jacobian``
    381    - ``Solver::Options::return_final_residuals``
    382    - ``Solver::Options::return_final_gradient``
    383    - ``Solver::Options::return_final_jacobian``
    384 
    385    Instead we recommend using something like this.
    386 
    387    .. code-block:: c++
    388 
    389      Problem problem;
    390      // Build problem
    391 
    392      vector<double> initial_residuals;
    393      problem.Evaluate(Problem::EvaluateOptions(),
    394                       NULL, /* No cost */
    395                       &initial_residuals,
    396                       NULL, /* No gradient */
    397                       NULL  /* No jacobian */ );
    398 
    399      Solver::Options options;
    400      Solver::Summary summary;
    401      Solver::Solve(options, &problem, &summary);
    402 
    403      vector<double> final_residuals;
    404      problem.Evaluate(Problem::EvaluateOptions(),
    405                       NULL, /* No cost */
    406                       &final_residuals,
    407                       NULL, /* No gradient */
    408                       NULL  /* No jacobian */ );
    409 
    410 
    411 New Features
    412 ------------
    413 #. Problem now supports removal of ParameterBlocks and
    414    ResidualBlocks. There is a space/time tradeoff in doing this which
    415    is controlled by
    416    ``Problem::Options::enable_fast_parameter_block_removal``.
    417 
    418 #. Ceres now supports Line search based optimization algorithms in
    419    addition to trust region algorithms. Currently there is support for
    420    gradient descent, non-linear conjugate gradient and LBFGS search
    421    directions.
    422 #. Added ``Problem::Evaluate``. Now you can evaluate a problem or any
    423    part of it without calling the solver. In light of this the
    424    following settings have been deprecated and removed from the API.
    425 
    426    - ``Solver::Options::return_initial_residuals``
    427    - ``Solver::Options::return_initial_gradient``
    428    - ``Solver::Options::return_initial_jacobian``
    429    - ``Solver::Options::return_final_residuals``
    430    - ``Solver::Options::return_final_gradient``
    431    - ``Solver::Options::return_final_jacobian``
    432 
    433 #. New, much improved HTML documentation using Sphinx.
    434 #. Changed ``NumericDiffCostFunction`` to take functors like
    435    ``AutoDiffCostFunction``.
    436 #. Added support for mixing automatic, analytic and numeric
    437    differentiation. This is done by adding ``CostFunctionToFunctor``
    438    and ``NumericDiffFunctor`` objects to the API.
    439 #. Sped up the robust loss function correction logic when residual is
    440    one dimensional.
    441 #. Sped up ``DenseQRSolver`` by changing the way dense jacobians are
    442    stored. This is a 200-500% improvement in linear solver performance
    443    depending on the size of the problem.
    444 #. ``DENSE_SCHUR`` now supports multi-threading.
    445 #. Greatly expanded ``Summary::FullReport``:
    446 
    447    - Report the ordering used by the ``LinearSolver``.
    448    - Report the ordering used by the inner iterations.
    449    - Execution timing breakdown into evaluations and linear solves.
    450    - Effective size of the problem solved by the solver, which now
    451      accounts for the size of the tangent space when using a
    452      ``LocalParameterization``.
    453 #. Ceres when run at the ``VLOG`` level 3 or higher will report
    454    detailed timing information about its internals.
    455 #. Remove extraneous initial and final residual evaluations. This
    456    speeds up the solver a bit.
    457 #. Automatic differenatiation with a dynamic number of parameter
    458    blocks. (Based on an idea by Thad Hughes).
    459 #. Sped up problem construction and destruction.
    460 #. Added matrix adapters to ``rotation.h`` so that the rotation matrix
    461    routines can work with row and column major matrices. (Markus Moll)
    462 #. ``SCHUR_JACOBI`` can now be used without ``SuiteSparse``.
    463 #. A ``.spec`` file for producing RPMs. (Taylor Braun-Jones)
    464 #. ``CMake`` can now build the sphinx documentation (Pablo Speciale)
    465 #. Add support for creating a CMake config file during build to make
    466    embedding Ceres in other CMake-using projects easier. (Pablo
    467    Speciale).
    468 #. Better error reporting in ``Problem`` for missing parameter blocks.
    469 #. A more flexible ``Android.mk`` and a more modular build. If binary
    470    size and/or compile time is a concern, larger parts of the solver
    471    can be disabled at compile time.
    472 
    473 Bug Fixes
    474 ---------
    475 #. Compilation fixes for MSVC2010 (Sergey Sharybin)
    476 #. Fixed "deprecated conversion from string constant to char*"
    477    warnings. (Pablo Speciale)
    478 #. Correctly propagate ifdefs when building without Schur eliminator
    479    template specializations.
    480 #. Correct handling of ``LIB_SUFFIX`` on Linux. (Yuliy Schwartzburg).
    481 #. Code and signature cleanup in ``rotation.h``.
    482 #. Make examples independent of internal code.
    483 #. Disable unused member in ``gtest`` which results in build error on
    484    OS X with latest Xcode. (Taylor Braun-Jones)
    485 #. Pass the correct flags to the linker when using
    486    ``pthreads``. (Taylor Braun-Jones)
    487 #. Only use ``cmake28`` macro when building on RHEL6. (Taylor
    488    Braun-Jones)
    489 #. Remove ``-Wno-return-type-c-linkage`` when compiling with
    490    GCC. (Taylor Braun-Jones)
    491 #. Fix ``No previous prototype`` warnings. (Sergey Sharybin)
    492 #. MinGW build fixes. (Sergey Sharybin)
    493 #. Lots of minor code and lint fixes. (William Rucklidge)
    494 #. Fixed a bug in ``solver_impl.cc`` residual evaluation. (Markus
    495    Moll)
    496 #. Fixed varidic evaluation bug in ``AutoDiff``.
    497 #. Fixed ``SolverImpl`` tests.
    498 #. Fixed a bug in ``DenseSparseMatrix::ToDenseMatrix()``.
    499 #. Fixed an initialization bug in ``ProgramEvaluator``.
    500 #. Fixes to Android.mk paths (Carlos Hernandez)
    501 #. Modify ``nist.cc`` to compute accuracy based on ground truth
    502    solution rather than the ground truth function value.
    503 #. Fixed a memory leak in ``cxsparse.cc``. (Alexander Mordvintsev).
    504 #. Fixed the install directory for libraries by correctly handling
    505    ``LIB_SUFFIX``. (Taylor Braun-Jones)
    506 
    507 1.4.0
    508 =====
    509 
    510 Backward Incompatible API Changes
    511 ---------------------------------
    512 
    513 The new ordering API breaks existing code. Here the common case fixes.
    514 
    515 **Before**
    516 
    517 .. code-block:: c++
    518 
    519  options.linear_solver_type = ceres::DENSE_SCHUR
    520  options.ordering_type = ceres::SCHUR
    521 
    522 **After**
    523 
    524 
    525 .. code-block:: c++
    526 
    527   options.linear_solver_type = ceres::DENSE_SCHUR
    528 
    529 
    530 **Before**
    531 
    532 .. code-block:: c++
    533 
    534  options.linear_solver_type = ceres::DENSE_SCHUR;
    535  options.ordering_type = ceres::USER;
    536  for (int i = 0; i < num_points; ++i) {
    537    options.ordering.push_back(my_points[i])
    538  }
    539  for (int i = 0; i < num_cameras; ++i) {
    540    options.ordering.push_back(my_cameras[i])
    541  }
    542  options.num_eliminate_blocks = num_points;
    543 
    544 
    545 **After**
    546 
    547 .. code-block:: c++
    548 
    549  options.linear_solver_type = ceres::DENSE_SCHUR;
    550  options.ordering = new ceres::ParameterBlockOrdering;
    551  for (int i = 0; i < num_points; ++i) {
    552    options.linear_solver_ordering->AddElementToGroup(my_points[i], 0);
    553  }
    554  for (int i = 0; i < num_cameras; ++i) {
    555    options.linear_solver_ordering->AddElementToGroup(my_cameras[i], 1);
    556  }
    557 
    558 
    559 New Features
    560 ------------
    561 
    562 #. A new richer, more expressive and consistent API for ordering
    563    parameter blocks.
    564 #. A non-linear generalization of Ruhe & Wedin's Algorithm II. This
    565    allows the user to use variable projection on separable and
    566    non-separable non-linear least squares problems. With
    567    multithreading, this results in significant improvements to the
    568    convergence behavior of the solver at a small increase in run time.
    569 #. An image denoising example using fields of experts. (Petter
    570    Strandmark)
    571 #. Defines for Ceres version and ABI version.
    572 #. Higher precision timer code where available. (Petter Strandmark)
    573 #. Example Makefile for users of Ceres.
    574 #. IterationSummary now informs the user when the step is a
    575    non-monotonic step.
    576 #. Fewer memory allocations when using ``DenseQRSolver``.
    577 #. GradientChecker for testing CostFunctions (William Rucklidge)
    578 #. Add support for cost functions with 10 parameter blocks in
    579    ``Problem``. (Fisher)
    580 #. Add support for 10 parameter blocks in ``AutoDiffCostFunction``.
    581 
    582 
    583 Bug Fixes
    584 ---------
    585 
    586 #. static cast to force Eigen::Index to long conversion
    587 #. Change LOG(ERROR) to LOG(WARNING) in ``schur_complement_solver.cc``.
    588 #. Remove verbose logging from ``DenseQRSolve``.
    589 #. Fix the Android NDK build.
    590 #. Better handling of empty and constant Problems.
    591 #. Remove an internal header that was leaking into the public API.
    592 #. Memory leak in ``trust_region_minimizer.cc``
    593 #. Schur ordering was operating on the wrong object (Ricardo Martin)
    594 #. MSVC fixes (Petter Strandmark)
    595 #. Various fixes to ``nist.cc`` (Markus Moll)
    596 #. Fixed a jacobian scaling bug.
    597 #. Numerically robust computation of ``model_cost_change``.
    598 #. Signed comparison compiler warning fixes (Ricardo Martin)
    599 #. Various compiler warning fixes all over.
    600 #. Inclusion guard fixes (Petter Strandmark)
    601 #. Segfault in test code (Sergey Popov)
    602 #. Replaced ``EXPECT/ASSERT_DEATH`` with the more portable
    603    ``EXPECT_DEATH_IF_SUPPORTED`` macros.
    604 #. Fixed the camera projection model in Ceres' implementation of
    605    Snavely's camera model. (Ricardo Martin)
    606 
    607 
    608 1.3.0
    609 =====
    610 
    611 New Features
    612 ------------
    613 
    614 #. Android Port (Scott Ettinger also contributed to the port)
    615 #. Windows port. (Changchang Wu and Pierre Moulon also contributed to the port)
    616 #. New subspace Dogleg Solver. (Markus Moll)
    617 #. Trust region algorithm now supports the option of non-monotonic steps.
    618 #. New loss functions ``ArcTanLossFunction``, ``TolerantLossFunction``
    619    and ``ComposedLossFunction``. (James Roseborough).
    620 #. New ``DENSE_NORMAL_CHOLESKY`` linear solver, which uses Eigen's
    621    LDLT factorization on the normal equations.
    622 #. Cached symbolic factorization when using ``CXSparse``.
    623    (Petter Strandark)
    624 #. New example ``nist.cc`` and data from the NIST non-linear
    625    regression test suite. (Thanks to Douglas Bates for suggesting this.)
    626 #. The traditional Dogleg solver now uses an elliptical trust
    627    region (Markus Moll)
    628 #. Support for returning initial and final gradients & Jacobians.
    629 #. Gradient computation support in the evaluators, with an eye
    630    towards developing first order/gradient based solvers.
    631 #. A better way to compute ``Solver::Summary::fixed_cost``. (Markus Moll)
    632 #. ``CMake`` support for building documentation, separate examples,
    633    installing and uninstalling the library and Gerrit hooks (Arnaud
    634    Gelas)
    635 #. ``SuiteSparse4`` support (Markus Moll)
    636 #. Support for building Ceres without ``TR1`` (This leads to
    637    slightly slower ``DENSE_SCHUR`` and ``SPARSE_SCHUR`` solvers).
    638 #. ``BALProblem`` can now write a problem back to disk.
    639 #. ``bundle_adjuster`` now allows the user to normalize and perturb the
    640    problem before solving.
    641 #. Solver progress logging to file.
    642 #. Added ``Program::ToString`` and ``ParameterBlock::ToString`` to
    643    help with debugging.
    644 #. Ability to build Ceres as a shared library (MacOS and Linux only),
    645    associated versioning and build release script changes.
    646 #. Portable floating point classification API.
    647 
    648 
    649 Bug Fixes
    650 ---------
    651 
    652 #. Fix how invalid step evaluations are handled.
    653 #. Change the slop handling around zero for model cost changes to use
    654    relative tolerances rather than absolute tolerances.
    655 #. Fix an inadvertant integer to bool conversion. (Petter Strandmark)
    656 #. Do not link to ``libgomp`` when building on
    657    windows. (Petter Strandmark)
    658 #. Include ``gflags.h`` in ``test_utils.cc``. (Petter
    659    Strandmark)
    660 #. Use standard random number generation routines. (Petter Strandmark)
    661 #. ``TrustRegionMinimizer`` does not implicitly negate the
    662    steps that it takes. (Markus Moll)
    663 #. Diagonal scaling allows for equal upper and lower bounds. (Markus Moll)
    664 #. TrustRegionStrategy does not misuse LinearSolver:Summary anymore.
    665 #. Fix Eigen3 Row/Column Major storage issue. (Lena Gieseke)
    666 #. QuaternionToAngleAxis now guarantees an angle in $[-\pi, \pi]$. (Guoxuan Zhang)
    667 #. Added a workaround for a compiler bug in the Android NDK to the
    668    Schur eliminator.
    669 #. The sparse linear algebra library is only logged in
    670    Summary::FullReport if it is used.
    671 #. Rename the macro ``CERES_DONT_HAVE_PROTOCOL_BUFFERS``
    672    to ``CERES_NO_PROTOCOL_BUFFERS`` for consistency.
    673 #. Fix how static structure detection for the Schur eliminator logs
    674    its results.
    675 #. Correct example code in the documentation. (Petter Strandmark)
    676 #. Fix ``fpclassify.h`` to work with the Android NDK and STLport.
    677 #. Fix a memory leak in the ``levenber_marquardt_strategy_test.cc``
    678 #. Fix an early return bug in the Dogleg solver. (Markus Moll)
    679 #. Zero initialize Jets.
    680 #. Moved ``internal/ceres/mock_log.h`` to ``internal/ceres/gmock/mock-log.h``
    681 #. Unified file path handling in tests.
    682 #. ``data_fitting.cc`` includes ``gflags``
    683 #. Renamed Ceres' Mutex class and associated macros to avoid
    684    namespace conflicts.
    685 #. Close the BAL problem file after reading it (Markus Moll)
    686 #. Fix IsInfinite on Jets.
    687 #. Drop alignment requirements for Jets.
    688 #. Fixed Jet to integer comparison. (Keith Leung)
    689 #. Fix use of uninitialized arrays. (Sebastian Koch & Markus Moll)
    690 #. Conditionally compile gflag dependencies.(Casey Goodlett)
    691 #. Add ``data_fitting.cc`` to the examples ``CMake`` file.
    692 
    693 
    694 1.2.3
    695 =====
    696 
    697 Bug Fixes
    698 ---------
    699 
    700 #. ``suitesparse_test`` is enabled even when ``-DSUITESPARSE=OFF``.
    701 #. ``FixedArray`` internal struct did not respect ``Eigen``
    702    alignment requirements (Koichi Akabe & Stephan Kassemeyer).
    703 #. Fixed ``quadratic.cc`` documentation and code mismatch
    704    (Nick Lewycky).
    705 
    706 1.2.2
    707 =====
    708 
    709 Bug Fixes
    710 ---------
    711 
    712 #. Fix constant parameter blocks, and other minor fixes (Markus Moll)
    713 #. Fix alignment issues when combining ``Jet`` and
    714    ``FixedArray`` in automatic differeniation.
    715 #. Remove obsolete ``build_defs`` file.
    716 
    717 1.2.1
    718 =====
    719 
    720 New Features
    721 ------------
    722 
    723 #. Powell's Dogleg solver
    724 #. Documentation now has a brief overview of Trust Region methods and
    725    how the Levenberg-Marquardt and Dogleg methods work.
    726 
    727 Bug Fixes
    728 ---------
    729 
    730 #. Destructor for ``TrustRegionStrategy`` was not virtual (Markus Moll)
    731 #. Invalid ``DCHECK`` in ``suitesparse.cc`` (Markus Moll)
    732 #. Iteration callbacks were not properly invoked (Luis Alberto Zarrabeiti)
    733 #. Logging level changes in ConjugateGradientsSolver
    734 #. VisibilityBasedPreconditioner setup does not account for skipped camera pairs. This was debugging code.
    735 #. Enable SSE support on MacOS
    736 #. ``system_test`` was taking too long and too much memory (Koichi Akabe)
    737 
    738 1.2.0
    739 =====
    740 
    741 New Features
    742 ------------
    743 
    744 #. ``CXSparse`` support.
    745 #. Block oriented fill reducing orderings. This reduces the
    746    factorization time for sparse ``CHOLMOD`` significantly.
    747 #. New Trust region loop with support for multiple trust region step
    748    strategies. Currently only Levenberg-Marquardt is supported, but
    749    this refactoring opens the door for Dog-leg, Stiehaug and others.
    750 #. ``CMake`` file restructuring.  Builds in ``Release`` mode by   default, and now has platform specific tuning flags.
    751 #. Re-organized documentation. No new content, but better
    752    organization.
    753 
    754 
    755 Bug Fixes
    756 ---------
    757 
    758 #. Fixed integer overflow bug in ``block_random_access_sparse_matrix.cc``.
    759 #. Renamed some macros to prevent name conflicts.
    760 #. Fixed incorrent input to ``StateUpdatingCallback``.
    761 #. Fixes to AutoDiff tests.
    762 #. Various internal cleanups.
    763 
    764 
    765 1.1.1
    766 =====
    767 
    768 Bug Fixes
    769 ---------
    770 
    771 #. Fix a bug in the handling of constant blocks. (Louis Simard)
    772 #. Add an optional lower bound to the Levenberg-Marquardt regularizer
    773    to prevent oscillating between well and ill posed linear problems.
    774 #. Some internal refactoring and test fixes.
    775 
    776 1.1.0
    777 =====
    778 
    779 New Features
    780 ------------
    781 
    782 #. New iterative linear solver for general sparse problems - ``CGNR``
    783    and a block Jacobi preconditioner for it.
    784 #. Changed the semantics of how ``SuiteSparse`` dependencies are
    785    checked and used. Now ``SuiteSparse`` is built by default, only if
    786    all of its dependencies are present.
    787 #. Automatic differentiation now supports dynamic number of residuals.
    788 #. Support for writing the linear least squares problems to disk in
    789    text format so that they can loaded into ``MATLAB``.
    790 #. Linear solver results are now checked for nan and infinities.
    791 #. Added ``.gitignore`` file.
    792 #. A better more robust build system.
    793 
    794 
    795 Bug Fixes
    796 ---------
    797 
    798 #. Fixed a strict weak ordering bug in the schur ordering.
    799 #. Grammar and typos in the documents and code comments.
    800 #. Fixed tests which depended on exact equality between floating point values.
    801 
    802 1.0.0
    803 =====
    804 
    805 Initial Release. Nathan Wiegand contributed to the Mac OSX port.
    806