系列文章

【管理运筹学】第 8 章 | 动态规划(1,多阶段决策过程与动态规划基本概念)
【管理运筹学】第 8 章 | 动态规划(2,动态规划的基本思想与模型求解)
【管理运筹学】第 8 章 | 动态规划(3,资源分配问题)
【管理运筹学】第 8 章 | 动态规划(4,生产与储存问题)
【管理运筹学】第 8 章 | 动态规划(5,设备更新问题)


引言

倒回来学动态规划,网络计划和排队论先放到后面吧。

动态规划是解决多阶段决策过程最优化问题的一种方法。该方法由美国数学家贝尔曼等人在 20 世纪 50 年代初提出。

动态规划可用于解决最优路径问题、资源分配问题、生产计划与库存问题、投资问题等。由于它独特的求解思路,常比线性规划或非线性规划方法更有效。

动态规划模型的分类,根据决策过程的时间参数是离散的还是连续的,过程的演变是确定的还是随机的,可以组合成离散确定型、连续随机型等 4 中类型。其中,离散确定型是最基本的,也是本系列文章主要介绍的问题。


一、多阶段决策过程及实例

在生产和科学实验中,有一类活动的过程,由于其特殊性,可将过程分为若干个相互联系的阶段,在它的每一个阶段都需要作出决策,从而使整个过程达到最好的活动效果。

因此,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成了一个决策序列,因而也就决定了整个过程的一条活动路线。

这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,也称为序贯决策过程(如下图所示)。这种问题就称为多阶段决策问题

在这里插入图片描述
在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前的状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义。因此,把处理它的方法称为动态规划方法。

但是,一些与时间没有关系的静态规划(如线性规划、非线性规划等)问题,只要人为地引进“时间”因素,也可以把它视为多阶段决策问题,用动态规划方法去处理。

我们上一章在图论中,学习的最短路问题,就可以看成是多阶段决策问题,每个阶段都去寻找最短路。如下图,可以看成是一个 4 阶段决策问题。

在这里插入图片描述


二、动态规划的基本概念和方法

2.1 动态规划的基本概念

1.阶段(Stage)

将所给问题的过程,按时间或空间特征分解为若干相互联系的阶段,以便按顺序去求解每阶段的解,常用字母 k k k 表示阶段变量。

上面提到的 4 阶段求最短路问题中,第一阶段包括(A, B1), (A, B2)。第四阶段包括(D1, E), (D2, E), (D3, E)。其余阶段以此类推。

在这里插入图片描述
北交大的书规定, k = 1 k=1 k=1 表示实际问题中的第 1 决策阶段。在一个 n n n 阶段决策问题中, k = n k=n k=n 表示最后一个决策阶段。

2.状态(State)

各阶段开始时的客观条件叫作状态。描述各阶段状态的变量称为状态变量,常用 s k s_k sk 表示第 k k k 阶段的状态变量,状态变量 s k s_k sk 的取值集合称为状态集合 S k S_k Sk

如上面最短路的例子中,第一阶段为状态 A ,第二阶段有两个状态:B1, B2 。状态变量集合 S 1 = { A } S_1=\{A\} S1={A} ,后面各阶段的状态集合分别为: S 2 = { B 1 , B 2 } , S 3 = { C 1 , C 2 , C 3 , C 4 } , S 4 = { D 1 , D 2 , D 3 } S_2=\{B1,B2\},S_3=\{C1,C2,C3,C4\},S_4=\{D1,D2,D3\} S2={B1,B2},S3={C1,C2,C3,C4},S4={D1,D2,D3}

在这里插入图片描述

动态规划的状态应具有如下性质:当某阶段状态给定以后,在这阶段以后的过程的发展不受这段以前状态的影响。也就是说,过程的过去历史只能通过当前状态去影响它未来的发展,这称为无后效性

如果所选定的变量不具备无后效性,就不能作为这个状态变量来构成动态规划模型。

3.决策和策略(Decision and Policy)

当各阶段的状态确定以后,就可以作出不同的决定(或选择),从而确定下一阶段的状态,这种决定称为决策。表示决策的变量称为决策变量,常用 u k ( s k ) u_k(s_k) uk(sk) 表示第 k k k 阶段当状态为 s k s_k sk 时的决策变量。

实际问题中,决策变量的取值往往限制在一定范围内,我们称此范围为允许决策集合,常用 D k ( s k ) D_k(s_k) Dk(sk) 表示第 k k k 阶段从状态 s k s_k sk 出发的允许决策集合,显然,有 u k ( s k ) ∈ D k ( s k ) u_k(s_k) \in D_k(s_k) uk(sk)Dk(sk)

例如,前面最短路问题图中,状态集合 S 2 = { B 1 , B 2 } S_2=\{B1,B2\} S2={B1,B2} ,从状态 B 1 B1 B1 出发,有 3 条路可走,即其决策集合为 D 2 ( B 1 ) = { C 1 , C 2 , C 3 } D_2(B_1)=\{C1,C_2,C_3\} D2(B1)={C1,C2,C3} ,如果走去 C 3 C3 C3 ,则此时决策变量可表示为 u 2 ( B 1 ) = C 3 u_2(B1)=C3 u2(B1)=C3

在这里插入图片描述

各段决策确定后,整个问题的决策序列就构成一个策略,用 p 1 , n ( u 1 , u 2 , ⋯   , u n ) p_{1,n}(u_1,u_2,\cdots,u_n) p1,n(u1,u2,,un) 表示。对每个实际问题,可供选择的策略有一定范围,称为允许策略集合,用 P P P 表示。使得整个问题达到最优效果的策略就是最优策略。

4.状态转移方程

动态规划中本阶段的状态往往是上一阶段决策的结果。如果给定了第 k k k 阶段的状态 s k s_k sk ,本阶段决策为 u k ( s k ) u_k(s_k) uk(sk) ,则第 k + 1 k+1 k+1 阶段的状态 s k + 1 s_{k+1} sk+1 也就完全确定,它们的关系可用公式 s k + 1 = T k ( s k , u k ) s_{k+1}=T_k(s_k,u_k) sk+1=Tk(sk,uk) 表示,由于其表示了由 k k k 阶段到 k + 1 k+1 k+1 阶段的状态转移规律,所以称为状态转移方程。

前面的最短路问题中, s k + 1 = u k s_{k+1}=u_k sk+1=uk

在这里插入图片描述

5.指标函数

用于衡量所选定策略优劣的数量指标称为指标函数。一个 n n n 段决策过程中,从 1 到 n 叫作问题的原过程,对于任意一个给定的 k ( 1 ≤ k ≤ n ) k(1 \leq k \leq n) k(1kn) ,从第 k k k 阶段到第 n n n 阶段的过程叫作原过程的一个后部子过程。 V 1 , n ( s 1 , p 1 , n ) V_{1,n}(s_1,p_{1,n}) V1,n(s1,p1,n) 表示从初始状态 s 1 s_1 s1 采用策略 p 1 , n p_{1,n} p1,n 时原过程的效益值,而 V k , n ( s k , p k , n ) V_{k,n}(s_k,p_{k,n}) Vk,n(sk,pk,n) 表示在第 k k k 阶段状态为 s k s_k sk 采用策略 p k , n p_{k,n} pk,n 时,后部子过程的效益值。

最优指标记为 f k ( s k ) f_k(s_k) fk(sk) ,它表示从 k k k 阶段状态 s k s_k sk 采用最优策略 p k , n ∗ p^*_{k,n} pk,n 时,后部子过程的最优效益值。 f k ( s k ) f_k(s_k) fk(sk) V k , n ( s k , p k , n ) V_{k,n}(s_k,p_{k,n}) Vk,n(sk,pk,n) 间有关系: f k ( s k ) = V k , n ( s k , p k , n ∗ ) = o p t p k , n ∈ P k , n V k , n ( s k , p k , n ) f_k(s_k)=V_{k,n}(s_k,p^*_{k,n})=opt_{{p_{k,n}}\in P_{k,n}} V_{k,n}(s_k,p_{k,n}) fk(sk)=Vk,n(sk,pk,n)=optpk,nPk,nVk,n(sk,pk,n) 注: o p t opt opt 全称为 optimization ,表示最优。

k = 1 k=1 k=1 时, f 1 ( s 1 ) f_1(s_1) f1(s1) 就是从初始状态 s 1 s_1 s1 到全过程结束的整体最优函数。

拿前面的最短路问题举例,指标函数就是距离。比如在第二阶段,状态为 B 2 B2 B2 时, V B 2 , E V_{B_2,E} VB2,E 就是 B 2 B_2 B2 E E E 之间的可能走的某个距离, f 2 ( B 2 ) f_2(B_2) f2(B2) 表示 B 2 B_2 B2 E E E 之间的最短距离。

在这里插入图片描述


写在最后

光是基本概念的介绍,我就感受到强度了,不过没关系,反复理解,多花些时间,相信也是没问题的。

下一篇,我们来学习关于动态规划的基本思想。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐