写作目的:边看书边记录,主要供自己学习,所以写的有问题的地方,请多指教
参考资料:《运筹学》(第三版) 清华大学出版社 ISBN:978-7-302-10214-4 戳我下载
动态规划的应用场景等等就不介绍了,后面会写一些能用动态规划方法解决的常见问题。这一部分基本抄书上到
阶段
将所给问题的过程,恰当的分为若干相互联系的阶段,以便能按一定的次序求解问题。阶段的划分一般是根据时间和空间的特征进行的,但是要能够把问题的过程转化为多阶段决策问题。
状态
状态表示每个阶段开始所处的自然状况或者客观条件。比如在最短线路问题中,线路网络图如下:
途中连线的数字表示花费,问题是求得一条从A到G的最小花费路线。这个问题里,状态就是某阶段的出发位置(比如我们现在在C,要确定到达D的线路)。通常一个阶段有多个状态,第一阶段的状态就是A,第二阶段的状态就是{B1, B2},即第k阶段所有出发点的集合。
描述过程状态的变量称为状态变量,可用一个数,一组数或一个向量来描述,常用 Sk 表示第 k 阶段的状态变量。如 S3 = {C2, C2, C3, C4} 就表示上例中第三阶段的可达状态集合,用 sk 表示第 k 个阶段实际取得的状态。这里所说的状态有个重要的性质:无后效性(即马尔科夫性,戳我了解更多知识知识知识),通俗的讲就是过去的历史只能通过当前的状态去影响它未来的发展,当前状态是以往历史的一个总结(以前我以为的无后效性是未来的发展只与当前有关,而与过去无关,现在看来之前的理解有偏颇啊,概率论里面有一个指数分布有无记忆性,好像和这个一样?),在建模的时候,务必注意无后效性这一点,不能仅由描述过程的具体特征这一点规定状态变量,而要充分注意是否满足无后效性的要求。咦,好像很抽象的样子,书上正好有一个例子:已知物体任意时刻所受的外力(方向大小均已知),研究物理运动的轨迹问题。这个时候我们可以把状态定为物体的坐标(xk, yk, zk),但是没有办法确定之后的运动方向和轨迹。即不满足无后效性(这里可以加一点我对此处不满足无后效性的理解,一方面是知道此刻的状态仍然无法求出下一个时刻的状态,另一方面如果要求出下一时刻的状态仅仅知道当前时刻的状态还不够,还需要知道以前一段时间的状态,从而计算出当前时刻速度的大小和方向,然后就能计算出下一时刻的状态了),但是如果我们把位置(xk, yk, zk)和速度(vxk, vyk, vzk)一起作为状态变量后,下一步物体的运动方向和轨迹就完全确定啦。
3. 决策
决策表示当过程处于某一阶段某一状态时,可以做出的决定,从而确定下一阶段的状态,这个决定就叫做决策。描述决策的变量,称为决策变量。可以是一个数一组数,也可以是一个向量。常用 uk(sk) 表示第 k 个阶段处于sk时的决策变量,可见决策变量是状态的函数,也就是处于不同的状态时所能的决策与当前状态有关。实际问题中,决策变量的取值常常限制在某一范围内,此范围称为允许决策集合,常用 Dk(sk) 表示,显然有 uk(sk) 属于Dk(sk) ,如上面例子中,若从B1出发,允许决策集合D2(B1) = {C1, C2, C3},接下来如果选择C2,则u2(B1) = C2。
策略
策略是按顺序排列的策略组成的集合。由过程的第k阶段开始到终止状态为止的过程,称为问题的后部子过程(或称为k子过程)。由每段的决策按照顺序排列组成的决策函数序列 {uk(sk), uk+1(sk+1), … , un(kn)} 称为k子过程策略,简称为子策略,记为 pk,n(sk) 。当 k =1时,该决策序列称为全过程的一个策略,简称策略,即 p1,n(s1) 。同样的可以定义允许策略集合,其中达到最优效果的称为最优策略。
状态转移方程
状态转移方程是确定过程由一个状态到另一个状态的演变过程。由前面的讨论我们知道,如果给定第 k 个阶段的状态变量 sk 的取值,那么该阶段的决策变量 uk(sk) 一经确定,第 k+1 阶段的状态变量 uk+1(sk+1) 的取值也就决定了。即 sk+1 的值随 sk 和 uk 的值变化而变化,这种对应关系,记为:sk+1 = Tk(sk, uk),称之为状态转移方程,Tk为状态转移函数,在上例中,状态转移方程就是:sk+1 = uk(sk) 。
指标函数和最优值函数
指标函数即用来衡量所实现过程优劣的数量指标,它定义在全过程和所有后部子过程上确定的数量函数,用 Vk,n 表示,即 Vk,n = Vk,n(sk, uk, sk+1, uk+1, … , sn+1) , k = 1, 2, …, n。该指标函数应该具有可分离性,并满足递推关系,即Vk,n可以表示为sk,uk,Vk+1,n的函数。常见的指标函数有(1)过程和它的任一子过程的指标是它所包含的各个阶段的指标的和;(2)过程和它的任一子过程的指标是它所包含的各个阶段的指标的乘积。
最优值函数是指标函数的最优值,记为fk(sk),表示从第k阶段的状态开始到第n阶段的终止状态的过程,采取最优策略所得到的指标函数值(一般是最大/最小值),即:
不同的问题中指标函数的含义不同,可能是距离、利润、成本、产量或资源消耗等等。
书中以解决最短路线问题介绍了动态规划的基本思想。再次贴出最短路问题中的网络图:
容易看出,在最短路线问题中,如果A->B1->C2->D1->E2->F2->G是从A到G的最短路线,那么D1->E2->F2->G也是从D1到G的最短路线,可以用反证法证明:如果D1到G中存在一条比D1->E2->F2->G更短的路线,那么A->B1->C2->D1->E2->F2->G肯定就不是从A到G的最短路线。即如果由起点A经过P点和H点而到达终点G是一条最短路线,则由P出发经过H而到达G点的这条子路线,也必定是P点到达G点的最短路线。根据最短路线问题的这一特性,寻找最短路线问题的方法就是:从最后一段开始,用由后向前逐步递推的方法,求出各点到G点的最短路线,再求出A点到G点的最短路线。所以,动态规划的方法就是从终点逐段向起点方向寻找最短路线的一种方法,如下图所示:
下面按照动态规划的方法,从最后一段开始计算,由后向前逐步推移至A点。(直接附书上方法了,了解思想后这个比较容易)
而最短路线再按照计算顺序的反方向(按阶段顺序)反推就可了(如A到G的最短路线是通过B1得到的,等等)可以很容易得到最短路线为:A->B1->C2->D1->E2->F2->G。
从上面的计算过程中可以看出,在求解的各个阶段,我们利用了k阶段与k+1阶段之间的递推关系:
一般情况下,k阶段与k+1阶段的递推关系式可写为(注意其中的边界条件):
其中vk(sk, uk(sk))表示第k阶段作出决策uk(sk) 时的阶段指标(对比上面的最短路线问题的递推式看就一目了然啦)
上面的这种递推关系式就是动态规划问题的基本方程。
现在归纳一下动态规划问题的基本思想:
(1)动态规划问题的关键在于正确地写出基本的递推关系式和恰当的边界条件(也就是基本方程)。要做到这一点,必须将问题的过程划分成几个相互联系的阶段,选取恰当的状态变量,决策变量以及定义最优值函数,从而把一个大问题化成一族同类型的子问题 , 然后逐个求解。即从边界条件开始 , 逐段递推寻优 , 在每一个子问题的求解中 , 均利用了它前面的子问题的最优化结果 , 依次进行 , 最后一个子问题所得的最优解 , 就是整个问题的最优解。
(2)在多阶段决策的过程中,动态规划方法是既把当前一段和未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法。因此,每段决策的选取是从全局来考虑的,与该段的最优选择答案一般不同。
(3)在求整个问题的最优策略时,由于初始状态时已知的,而每段的策略都是该段状态的函数,故最优策略所经过的各段状态便可以逐次变换得到,从而确定了最优路线。
上面的解法称为逆序解法,如果我们把G点作为起点,A点作为终点,则得到了顺序解法(思想一样,不做赘述)。但是动态规划的求解方向都与行进方向是相反的。
从上面的例子的计算中,我们明显看到了动态规划问题相比穷举法(暴力法)有如下有点:
(1)减小了计算量; (2)丰富了计算结果,即我们不仅得到了A点到G点的最短路线,也得到了中间各点到G点的最短路线,在很多实际问题中是有用的,有利于帮助分析所得结果,如下图:
在明确了动态规划的基本概念和基本思想之后 , 我们看到 , 给一个实际问题建立动态规划模型时 , 必须做到下面五点 :
- (1) 将问题的过程划分成恰当的阶段 ;
- (2) 正确选择状态变量 sk , 使它既能描述过程的演变 , 又要满足无后效性 ;
- (3) 确定决策变量 uk 及每阶段的允许决策集合 D k ( sk ) ;
- (4) 正确写出状态转移方程 ;
- (5) 正确写出指标函数 V k,n , 它应满足下面三个性质 : ① 是定义在全过程和所有后部子过程上的数量函数 ;② 要具有可分离性 , 并满足递推关系。 即Vk,n( sk , uk , … , sn+1 ) = ψ k [ sk , uk , Vk+1,n(sk+1,uk+1 , … , sn+1 ) ];③ 函数 ψ k ( sk , uk , Vk+1 , n ) 对于变量 Vk+1, n 要严格单调。
以上五点是构造动态规划模型的基础 , 是正确写出动态规划基本方程的基本要素。
关于动态规划的基本概念就写这么多,接下来会写一些动态规划应用举例的文章
更多详细内容可以参考文章开头提到的《运筹学》一书,戳我下载