6.11 小结
动态规划:各个阶段采取的决策依赖于当前状态,又随即引起状态的转移,在变化的状态中产生一个决策序列,这种解决多阶段决策最优化问题的方法为动态规划方法。
1. 动态规划的基本思想
动态规划的基本思想是“空间换时间”,努力避免重复解决相同问题或子问题。由于这个原因,动态规划的速度比搜索快得多。
2. 动态规划的原理
动态规划满足两个原理:最优化原理、无后效性原则。
最优化原理指无论过去的状态和决策如何,对前面的决策所形成的当前状态而言,余下的诸决策必须构成最优策略。通俗地说,如果全局最优,那么一定有局部最优。如果问题满足最优化原理,则说该问题具有最优子结构。
无后效性原则指某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及决策的影响。也就是说,“未来与过去无关”。具体地说,如果一个问题被划分各个阶段之后,阶段 I 中的状态只能由阶段 I+1 中的状态通过状态转移方程得来,与其他状态没有关系,特别是与未发生的状态没有关系,这就是无后效性。
3. 用动态规划解题的方法
动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。如图所示。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。
初始状态→决策 1→决策 2→…→决策 n→结束状态
① 划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。
② 确定状态和状态变量:注意状态必须满足无后效性。
③ 确定决策:找到子问题是进行动态规划的重要一步。动态规划和递推更多应考虑本问题由哪些已解决子问题构成,而不是考虑本问题对将来哪些问题有贡献。
④ 确定边界条件,写出状态转移方程。
⑤ 编程
如果某一个问题是从已知的动态规划问题变形而来的,你可以考虑在原有的状态转移方程的基础上加一维。
4. 动态规划的实现
动态规划有两种实现方法:递推和记忆化搜索。
使用递推法时要注意计算顺序,题型不同,计算顺序也不同。如果计算顺序不明显,也可采用记忆化搜索。
但是,记忆化搜索要比直接递推慢几倍。
动态规划往往要耗费大量内存空间。在空间紧张时,可以采用滚动数组来优化动态规划。