)]}'
{
  "commit": "1da9292016581928b0c5205dfe9ca459fc484a31",
  "tree": "5cf1f2ebdaaf6d778ad6ed4792529467e104d9d7",
  "parents": [
    "9102bdd831027f38e390d44c7cf95a3c97af0249"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Sun Feb 23 16:10:33 2014 -0800"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Mon Feb 24 10:54:46 2014 -0800"
  },
  "message": "Changes to how gradient based convergence is diagnosed.\n\nThe original implementation for computing the norm of the gradient was\n\ngradient_norm \u003d norm(gradient)\n\nwhen the gradient vector lies in the same space as the parameter\nvector, this value is meaningful. When there is a local parameterization\ninvolved, interpreting this value and diagnosing convergence using it\nis hard.\n\nFurther, this expression does not respect the bounds constraints\non the parmeters. Measuring the norm of the gradient only makes\nsense when the optimization being performed is unconstrained.\n\nA better solution, used by LANCELOT is the expression\ngradient_norm \u003d norm(x - P(x - gradient))\n\nHere, P is the projection operator onto the bounds constraints.\nx - gradient is computed by computing Plus(x, -gradient), thus the\nactual expression becomes\n\ngradient_norm \u003d norm(x - P(Plus(x, -gradient)));\n\nWhich in the case where there are no bounds constraints, and there\nare no local parameterizations, reduces to the usual Euclidean\nexpression from above, since\n\nPlus(x, -gradient) \u003d x - gradient\n\nand P(x - gradient) \u003d x - gradient.\n\nThis change implements this change. Further, the convergence\ntest using the gradient tolerance now uses an absolute measure\nrather than a relative measure. This is a forward looking change\nas we start implementing the Augmented Lagrangian solver.\n\nLast but not the least, various \"Terminating: Foo\" messages\nhave been changed so that \"Terminating: \" is logged but is\nnot part of the Solver::Summary::message string as it is\npointless.\n\nChange-Id: I943146f71a1da47c8c7592986039b4112781b99b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "339d2757bdb230ae6311a558c690db7ab6a4c883",
      "old_mode": 33188,
      "old_path": "internal/ceres/line_search_minimizer.cc",
      "new_id": "977fd6c76dc086f10f2683e7998ba514319c6b7f",
      "new_mode": 33188,
      "new_path": "internal/ceres/line_search_minimizer.cc"
    },
    {
      "type": "modify",
      "old_id": "da87de19f2cf9f1a5a6aabd751d649b999ad6f5e",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver.cc",
      "new_id": "36c58b3d19ecc76eb8f3732e923763dfc659d000",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver.cc"
    },
    {
      "type": "modify",
      "old_id": "f8ecac26be926179a577d50448c77d543740bac6",
      "old_mode": 33188,
      "old_path": "internal/ceres/trust_region_minimizer.cc",
      "new_id": "51eb75fea242b07f85b6fe3a4d83d2ef55089007",
      "new_mode": 33188,
      "new_path": "internal/ceres/trust_region_minimizer.cc"
    }
  ]
}
