动态规划法(Dynamic Programming,简称DP)是运筹学的一个分支,主要是用于求解决策过程最优化的数学方法。它的基本思想是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
动态规划法一般需要经历以下几个步骤:
- 划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或是可排序的,否则问题就无法求解。
- 确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。状态的选择要满足无后效性,即某阶段状态一旦确定,就不受这个状态以后决策的影响。
- 确定决策并写出状态转移方程:决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来确定本阶段的状态。如果确定了决策,状态转移方程也就可以写出。
- 寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。
动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。