动态规划将复杂的多阶段决策问题分解为一系列简单的、离散的单阶段决策问题,采用顺序求解方法,通过解一系列小问题达到求解整个问题目的;动态规划的各个决策阶段不但要考虑本阶段的决策目标,还要兼顾整个决策过程的整体目标,从而实现整体最优决策。
需指出:动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种算法。必须对具体问题进行具体分析,运用动态规划的原理和方法,建立相应的模型,然后再用动态规划方法去求解。
一、动态规划基本思想
(一)基本概念
1、阶段
描述阶段的变量称为阶段变量k。阶段的划分,一般是根据时间和空间的自然特征来进行的,但要便于问题转化为多阶段决策。
2、状态
表示每个阶段开始所处的自然状况或客观条件。通常一个阶段有若干个状态,描述过程状态的变量称为状态变量Sk。
3、决策
某一阶段的某个状态时,可以作出不同的决定,从而确定下一阶段的状态,这种决定称为决策,描述决策的变量成为决策变量Uk。在实际问题中决策变量取值一般在一个范围,称之为允许决策集合(策略)。
状态转移方程:Sk+1 = Tk(Sk, Uk)
4、指标函数和最优值函数
用来衡量所实现过程优劣的一种数量指标,为指标函数。指标函数常见的形式:
(1)各段指标的和的形式
(2)各段指标的积的形式
其中表示第j阶段的阶段指标
(二)基本思想
动态规划方法的关键:正确地写出基本的递推关系式和恰当的边界条件(简称基本方程)。要做到这一点,就必须将问题的过程分成几个相互联系的阶段,恰当的选取状态变量和决策变量及定义最优值函数,从而把一个大问题转化成一组同类型的子问题,然后逐个求解。即从边界条件开始,逐段递推寻优,在每一个子问题的求解中,均利用了它前面的子问题的最优化结果,依次进行,最后一个子问题所得的最优解,就是整个问题的最优解。
二、建立动态规划模型的步骤
- 划分阶段:按时间或空间先后顺序,将过程划分为若干相互联系的阶段。对于静态问题要人为地赋予“时间”概念,以便划分阶段。
- 正确选择状态变量:选择变量既要能确切描述过程演变又要满足无后效性,而且各阶段状态变量的取值能够确定。一般地,状态变量的选择是从过程演变的特点中寻找。
- 确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据k阶段状态变量和决策变量,来导出k+1阶段的状态变量。
- 确定阶段指标函数和最优指标函数:阶段指标函数是指第k阶段的收益,最优指标函数是指从第k阶段状态出发到第n阶段末所获得收益的最优值。
三、算法实现的说明
动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。使用动态规划求解问题,最重要的就是确定动态规划三要素:
- 问题的阶段;
- 每个阶段的状态;
- 从前一个阶段转化到后一个阶段之间的递推关系。
递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处。
确定了动态规划的这三要素,整个求解过程就可以用一个最优决策表来描述,最优决策表是一个二维表,其中行表示决策的阶段,列表示问题状态,表格需要填写的数据一般对应此问题的在某个阶段某个状态下的最优值(如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。