{
  "aliases": null,
  "backlinks": [
    {
      "field": "defines",
      "target": "WA3974X06N"
    }
  ],
  "body": "\n## Summary\n\nDifferential dynamic programming is an iterative method for discrete-time [[optimal control|T3V6ZNAMDN]] problems.\nAround the current trajectory it builds second-order models of the cost-to-go and solves them backward in time, as in dynamic programming.\nThis gives a correction of the control together with a local linear feedback, which is applied in a forward simulation to get the next trajectory.\nNear a solution it converges quadratically, like [[Newton's method|07EXVNF9VP]], and it is widely used in robotics.\n\n## Explanations\n\n### L1 human\n\nDynamic programming would compute the best decision for every possible state, which is far too much work for a robot with many joints.\nDifferential dynamic programming only looks near the current guess of the motion.\nThere it replaces the costs by quadratic approximations, which can be solved exactly, and so learns how to improve each step and how to react to small deviations.\nFor a linear system with quadratic costs, the approximations are exact and one iteration gives the optimal controller.\nFor nonlinear problems, a few iterations usually suffice.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "kind": "concept",
    "msc": [
      "49M15",
      "49L20",
      "93C55"
    ],
    "name": "Differential dynamic programming",
    "same_as": {
      "wikidata": "Q5275342",
      "wikipedia": "Differential dynamic programming"
    },
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Differential_dynamic_programming"
      }
    ],
    "tag": "5D0J26E619"
  },
  "kind": "concept",
  "link": "https://tamnd.github.io/math2/node/5D0J26E619/",
  "links": null,
  "markdown": "https://tamnd.github.io/math2/node/5D0J26E619.md",
  "msc": [
    "49M15",
    "49L20",
    "93C55"
  ],
  "name": "Differential dynamic programming",
  "prov": null,
  "role": "",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/5D0/5D0J26E619.md",
  "status": null,
  "tag": "5D0J26E619",
  "uri": "m2://5D0J26E619",
  "url": "https://tamnd.github.io/math2/wiki/differential-dynamic-programming/",
  "writing": {
    "tag": "5D0J26E619",
    "kind": "concept",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
