多阶段决策过程及实例#
1. 多阶段决策过程#
在许多实际问题中,整个决策过程可以被恰当地划分为若干个相互联系、前后衔接的阶段。在每个阶段都需要作出决策,当前的决策不仅依赖于当前所处的状况,还会直接影响下一个阶段的发展,进而决定了整个过程的活动路线。这种把问题看作一个前后关联、具有链状结构的多阶段决策过程,称为序贯决策过程。
2. 最短路径问题示例#
- 问题描述:求从起点 A 经由中间各节点(如 Bi,Ci,Di 等)到终点 E(或 G)的最短路径。
- 求解思想:直接穷举所有路径的计算量非常大。动态规划将此问题转化为多个性质相同但规模较小的子问题:即从各阶段节点到终点的最短路径。
- 逆序递推(Backward Induction):从终点 E 开始,倒退计算第四阶段(Di→E)、第三阶段(Ci→D→E)、第二阶段(Bi→C→E)和第一阶段(A→B→E),利用已算出的子路程最优值,仅进行少量加法和比较,即可得出全局最短路径。
动态规划的基本概念#
动态规划(Dynamic Programming,简称 DP)不是一种具体的数学计算规则(如线性规划单纯形法),而是一种解决多阶段决策最优化问题的思想方法。建模时需要定义以下五个基本要素:
1. 阶段(Stage)#
描述过程所处的步骤或阶段。常用阶段变量 k (k=1,2,…,n) 表示。阶段的划分通常根据时间、空间或逻辑演变特征确定。
2. 状态与状态变量(State)#
表示每个阶段开始时所处的自然状况或客观条件。用 sk 表示第 k 阶段的可达状态变量,Sk 表示第 k 阶段的所有可达状态的集合。
- 无后效性(马尔可夫性, Markov Property):状态必须具备该特征,即“未来的状态只取决于当前的状态和当前的决策,而与过去是如何到达这一状态的历史无关”。当前状态是过去历史的完整总结。
3. 决策与决策变量(Decision)#
表示在第 k 阶段当过程处于状态 sk 时,决策者可以作出的不同选择(决定)。决策变量用 uk(sk) 或 xk 表示。允许决策的集合用 Dk(sk) 表示,有 uk(sk)∈Dk(sk)。
4. 状态转移方程(State Transition Equation)#
描述过程由第 k 阶段的状态 sk 经过决策 uk 后,向第 k+1 阶段的状态 sk+1 演变的物理或逻辑规律:
sk+1=Tk(sk,uk)
其中 Tk 称为状态转移函数。
5. 指标函数与最优值函数(Value Function)#
- 指标函数:用来衡量全过程或某后部子过程效果好坏的数值指标(如总路程、总利润)。用 Vk,n 表示从第 k 阶段到第 n 阶段子过程的指标。指标函数必须具有可分离性并满足递推关系:
Vk,n(sk,uk,…,un)=vk(sk,uk)∗Vk+1,n(sk+1,uk+1,…,un)
(其中 ∗ 通常为加法或乘法)。
- 最优值函数:从第 k 阶段的状态 sk 开始,到过程终结所能获得的最佳(极大或极小)指标值,记为 fk(sk):
fk(sk)=optuk,…,un{Vk,n}
贝尔曼最优性原理与基本方程#
1. 最优性原理(Bellman’s Principle of Optimality)#
由理查德·贝尔曼(Richard Bellman)于 1953 年提出:
“作为整个过程的最优策略具有这样的性质:无论过去的状态和决策如何,对前面决策所形成的状态而言,余下的诸决策必须构成最优策略。”
简言之,最优策略的任何子策略也必须是对应子问题的最优策略。(可用反证法予以证明)。
2. 动态规划基本方程(递推方程)#
设指标函数为各阶段指标之和(如累积距离/成本):
(1) 逆序基本方程(从后向前递推)#
适合初始状态已知的情况:
fk(sk)=optuk∈Dk(sk){vk(sk,uk)+fk+1(sk+1)}
sk+1=Tk(sk,uk)
- 边界条件:fn+1(sn+1)=0 或给定值。
- 求解方向:从 k=n 开始逆推至 k=1。
(2) 顺序基本方程(从前向后递推)#
适合终止状态已知的情况:
fk(sk+1)=optxk{vk(sk,xk)+fk−1(sk)}
- 边界条件:f0(s1)=0。
动态规划连续变量极值问题求解示例#
以下展示利用微分学(求导)求解连续型动态规划基本方程的步骤。
案例 1:乘积极大化问题#
- 问题描述:将正数 c 分割为三个非负数 x1,x2,x3之和,使它们的乘积最大:
max∏i=13xis.t. ∑i=13xi=c, xi≥0
- 逆推建模:
- 阶段:设为 3 个阶段 (k=1,2,3)。
- 状态变量:sk 表示分配给第 k 阶段到第 3 阶段的可用资金余额。
- 初始状态 s1=c。
- 状态转移方程:sk+1=sk−xk。
- 决策变量:xk∈[0,sk]。
- 基本方程:
fk(sk)=max0≤xk≤sk{xk⋅fk+1(sk−xk)}
边界条件:f4(s4)=1。
- 递推求解:
- 第 3 阶段:
f3(s3)=max0≤x3≤s3{x3}=s3(此时最优决策 x3∗=s3)
- 第 2 阶段:
f2(s2)=max0≤x2≤s2{x2⋅f3(s2−x2)}=max0≤x2≤s2{x2(s2−x2)}
对 x2 求导并令导数为 0:s2−2x2=0⟹x2∗=2s2。
代回得:f2(s2)=(2s2)2。
- 第 1 阶段:
f1(s1)=max0≤x1≤s1{x1⋅f2(s1−x1)}=max0≤x1≤s1{x1(2s1−x1)2}
令目标函数对 x1 的一阶导数为 0,求极值点:
41(s1−x1)(s1−3x1)=0⟹x1∗=3s1(因 x1<s1)
由于初始状态 s1=c,得:
x1∗=3c⟹s2=32c⟹x2∗=3c⟹s3=3c⟹x3∗=3c
- 结论:当 x1=x2=x3=3c 时取得极大值,最大乘积为 (3c)3。
复习思考题#
- 如何理解状态变量的“无后效性”(马尔可夫性)? 如果一个动态系统具有后效性(即未来的状态与过去如何到达该状态的历史有关),我们应该如何对状态变量进行重新定义以使用动态规划?
- 写出动态规划逆序求解和顺序求解的基本方程及其边界条件,并说明在什么情况下选择逆推形式更方便,在什么情况下选择顺推形式更方便。
- 在解决多阶段决策问题时,动态规划与单纯的静态贪心算法(即每一步都选择当前阶段效益最大化的决策)相比,有什么本质区别? 请举例说明为什么“步步贪心”往往不能达到全局最优。