)]}'
{
  "commit": "487c1aa51fee4fa3edb149392c92faebc0d537b1",
  "tree": "1d740314b431c4149ae8e7121dd90a858c7dc552",
  "parents": [
    "bf709ecac2e0acc57e37d02243f51031403ededc"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Wed Jul 10 04:41:46 2019 +0200"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Fri Jul 12 16:08:36 2019 +0200"
  },
  "message": "Expose SubsetPreconditioner in the API\n\nhttps://github.com/ceres-solver/ceres-solver/issues/270\n\nDetailed list of changes:\n\n1. Add SUBSET to the PreconditionerType enum.\n2. Add Solver::Options::residual_blocks_for_subset_preconditioner\n3. Integrate SubsetPreconditioner into the CGNR solver.\n4. Add the reordering logic needed for this to TrustRegionPreprocessor.\n5. Expect CreateJacobianBlockTranspose to take the starting row block\n   so that we can work with subparts of the Jacobian matrix.\n6. Extend the denoising example to use this preconditioner.\n\nAs an illustration of its performance, we consider the performance of\ndenoising -input ../data/ceres_noisy.pgm  --foe_file ../data/5x5.foe\n\ntl;dr\n\nFor the same cost,\n\nSPARSE_NORMAL_CHOLESKY -  81s\nCGNR + JACOBI          - 718s\nCGNR + SUBSET          -  57s\n\nSPARSE_NORMAL_CHOLESKY\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nCost:\nInitial                          2.317806e+05\nFinal                            2.232323e+04\nChange                           2.094574e+05\n\nMinimizer iterations                       10\nSuccessful steps                           10\nUnsuccessful steps                          0\n\nTime (in seconds):\nPreprocessor                         2.999746\n\n  Residual only evaluation           2.306811 (10)\n  Jacobian \u0026 residual evaluation     7.421727 (10)\n  Linear solver                     65.517273 (10)\nMinimizer                           78.731011\n\nPostprocessor                        0.026079\nTotal                               81.756836\n\nTermination:                      CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.573046e-04 \u003c\u003d 1.000000e-03)\n\nCGNR + JACOBI\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCost:\nInitial                          2.317806e+05\nFinal                            2.232344e+04\nChange                           2.094572e+05\n\nMinimizer iterations                       10\nSuccessful steps                           10\nUnsuccessful steps                          0\n\nTime (in seconds):\nPreprocessor                         0.648814\n\n  Residual only evaluation           2.297607 (10)\n  Jacobian \u0026 residual evaluation     7.327886 (10)\n  Linear solver                    699.601248 (10)\nMinimizer                          712.419493\n\nPostprocessor                        0.024014\nTotal                              713.092321\n\nTermination:                      CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.528538e-04 \u003c\u003d 1.000000e-03)\n\nCGNR + SUBSET (random 20% residuals used for the preconditioner)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCost:\nInitial                          2.317806e+05\nFinal                            2.232327e+04\nChange                           2.094574e+05\n\nMinimizer iterations                       10\nSuccessful steps                           10\nUnsuccessful steps                          0\n\nTime (in seconds):\nPreprocessor                         1.472743\n\n  Residual only evaluation           2.428315 (10)\n  Jacobian \u0026 residual evaluation     7.367796 (10)\n  Linear solver                     42.585999 (10)\nMinimizer                           55.664459\n\nPostprocessor                        0.024098\nTotal                               57.161301\n\nTermination:                      CONVERGENCE (Function tolerance reached. |cost_change|/cost: 8.538277e-04 \u003c\u003d 1.000000e-03)\n\nChange-Id: Ifb011408bd53edbb9439b0b7345649a38f999e18\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3a2ac01f49109e13af33c1f8e5fa00fdc20b5f2d",
      "old_mode": 33188,
      "old_path": "docs/source/nnls_solving.rst",
      "new_id": "d03e62ec84be998a7b8c39a58d235eaafe2fe1ef",
      "new_mode": 33188,
      "new_path": "docs/source/nnls_solving.rst"
    },
    {
      "type": "modify",
      "old_id": "e64d70fd93fd0e16f4e8147320bba0ee262dcd44",
      "old_mode": 33188,
      "old_path": "examples/denoising.cc",
      "new_id": "9b0773565f7454d3d6c46ca111676310cb2cc672",
      "new_mode": 33188,
      "new_path": "examples/denoising.cc"
    },
    {
      "type": "modify",
      "old_id": "1e479ae908efabfe1f0dc52feb3ec149ef82b042",
      "old_mode": 33188,
      "old_path": "include/ceres/solver.h",
      "new_id": "ab7e9c22d38ccc1c593cbd6e397ef287bfd673b2",
      "new_mode": 33188,
      "new_path": "include/ceres/solver.h"
    },
    {
      "type": "modify",
      "old_id": "fec3cea7da175d448ca526bff3838ed1d74f1fc0",
      "old_mode": 33188,
      "old_path": "include/ceres/types.h",
      "new_id": "ed448b2d4545a0c9c7bd7dc62936057e3dd5a9d3",
      "new_mode": 33188,
      "new_path": "include/ceres/types.h"
    },
    {
      "type": "modify",
      "old_id": "463fbbdd3f5ac05ecd4c900b905c8a44ee85c2c5",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.cc",
      "new_id": "9dba1cfb4a8fe9b0c809a87690bfb17e69c6e697",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "24c245dc30e1c6893d9c34ad315983ab54f9db67",
      "old_mode": 33188,
      "old_path": "internal/ceres/linear_solver.h",
      "new_id": "cb624b372dd7d742096e4aace46744fe9407d433",
      "new_mode": 33188,
      "new_path": "internal/ceres/linear_solver.h"
    },
    {
      "type": "modify",
      "old_id": "fa3fbf102e29c3e53e6d1da8772f228ee6c9de09",
      "old_mode": 33188,
      "old_path": "internal/ceres/program.cc",
      "new_id": "3a8f0e3ba934a2ccf899597abb2d5b201e227e9c",
      "new_mode": 33188,
      "new_path": "internal/ceres/program.cc"
    },
    {
      "type": "modify",
      "old_id": "297be65cf32b6fa438b50ceabf9e6c34f141989d",
      "old_mode": 33188,
      "old_path": "internal/ceres/program.h",
      "new_id": "dc544c257906e90063db5176981d66d73cbe097d",
      "new_mode": 33188,
      "new_path": "internal/ceres/program.h"
    },
    {
      "type": "modify",
      "old_id": "6cb8e9e4ed1e7c72501134249fa70685f2fbfba8",
      "old_mode": 33188,
      "old_path": "internal/ceres/program_test.cc",
      "new_id": "99379c031d2bd4aeafcca3570e5f95fd74fb3533",
      "new_mode": 33188,
      "new_path": "internal/ceres/program_test.cc"
    },
    {
      "type": "modify",
      "old_id": "3ad2a5f60962300fa4d689375367183db5b1b603",
      "old_mode": 33188,
      "old_path": "internal/ceres/reorder_program.cc",
      "new_id": "45dbbc479ef2ac9b452a73d917d9d8304fa6ac46",
      "new_mode": 33188,
      "new_path": "internal/ceres/reorder_program.cc"
    },
    {
      "type": "modify",
      "old_id": "36e5d1637a995c83c4255b63600cfd88e2cf1b4e",
      "old_mode": 33188,
      "old_path": "internal/ceres/reorder_program.h",
      "new_id": "88cbee3af21acccc500c72282d4afb4089a5b85b",
      "new_mode": 33188,
      "new_path": "internal/ceres/reorder_program.h"
    },
    {
      "type": "modify",
      "old_id": "cf3e9f6ef8ad9632710825d8d6bfb17cb9355bf3",
      "old_mode": 33188,
      "old_path": "internal/ceres/reorder_program_test.cc",
      "new_id": "a3e2c788c1d9fb811f2a5c0d758cac04994fb190",
      "new_mode": 33188,
      "new_path": "internal/ceres/reorder_program_test.cc"
    },
    {
      "type": "modify",
      "old_id": "84a5e5a0b602d2805516a162a37ca4521538f6d9",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver.cc",
      "new_id": "b22a5e17769485e0ac376a39200982f5d656f91e",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver.cc"
    },
    {
      "type": "modify",
      "old_id": "865c5f13f3075186e18f0cad9558989db023c515",
      "old_mode": 33188,
      "old_path": "internal/ceres/subset_preconditioner.cc",
      "new_id": "7c24ae9f288c7aca7df9ec43c7b605fa10b82d08",
      "new_mode": 33188,
      "new_path": "internal/ceres/subset_preconditioner.cc"
    },
    {
      "type": "modify",
      "old_id": "77c3d91277f9f37fa4e0952b032312af1650a7ec",
      "old_mode": 33188,
      "old_path": "internal/ceres/subset_preconditioner.h",
      "new_id": "afd370432362860048562213a4f07405a8dd2b31",
      "new_mode": 33188,
      "new_path": "internal/ceres/subset_preconditioner.h"
    },
    {
      "type": "modify",
      "old_id": "dbeb3e5993e411e20c149c1d09d75466e0fd99de",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_preprocessor.cc",
      "new_id": "498752b5afa6a53be45bb9075e1749a49fab3b43",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_preprocessor.cc"
    },
    {
      "type": "modify",
      "old_id": "469141452577ea8a6bb3ed657fc1b8c95dd0fc78",
      "old_mode": 33188,
      "old_path": "internal/ceres/types.cc",
      "new_id": "93c4cfcb027a57b2dc20a57a51282df64aa3cd5e",
      "new_mode": 33188,
      "new_path": "internal/ceres/types.cc"
    }
  ]
}
