动态规划

基本概念

动态规划是解决多阶段决策过程最优化的一种数学方法。

马尔科夫性

如果某阶段状态给定后,则在这阶段以后过程的发展不受这阶段以前各段状态的影响。换句话说,过程的过去历史只能通过当前的状态去影响它未来的发展,当前的状态是以往历史的一个总结。这个性质称为无后效性(即马尔科夫性)

最优性原理

无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。即,最优策略的子策略总是最优的。可以利用该原理,通过局部最优来逆推全局最优。

动态规划和静态规划

规划类型 内容 与时间关系 问题类型 解决方案
静态规划 线性规划、非线性规划 无关 一定条件下可转换为动态规划问题
动态规划 动态规划 有关 多阶段决策

解决动态规划的方法

解法 适用情况
逆序解法 已给定初始状态
顺序解法 已给定终止状态

maxz=x1x22x3\max z = x_1 ⋅ {x_2}^2 ⋅ x_3
{x1+x2+x3=cc>0xi0,i=1,2,3\begin{cases} x_1 + x_2 + x_3 = c & c>0 \\ x_i ≥ 0, & i = 1,2,3 \end{cases}

使用逆推法解答上述问题。

设第kk阶段初始状态为sks_k,有最优值函数fk(sk)f_k(s_k)

{s3=x3   0x3=s3s2=x2+s3   0x2s2s1=x1+s2=c   0x1s1=c\begin{cases} s_3 = x_3 & ⇒\ \ \ 0 ≤ x_3 = s_3 \\ s_2 = x_2 + s_3 & ⇒\ \ \ 0 ≤ x_2 ≤ s_2 \\ s_1 = x_1 + s_2 = c & ⇒\ \ \ 0 ≤ x_1 ≤ s_1 = c \end{cases}

根据逆推法(最优解从后向前传递)有

f3(s3)=maxs3=x3(x3)f2(s2)=max0x2s2[x22f3(s3)]f1(s1)=max0x1s1[x1f2(s2)]\begin{array}{l} f_3(s_3) = \max\limits_{s_3 = x_3} (x_3) \\ f_2(s_2) = \max\limits_{0 ≤ x_2 ≤ s_2} [{x_2}^2f_3(s_3)] \\ f_1(s_1) = \max\limits_{0 ≤ x_1 ≤ s_1} [{x_1}f_2(s_2)] \end{array}

明显f3(s3)f_3(s_3)有最优值s3s_3,递推有

f2(s2)=max0x2s2x22(s2x2)记作max0x2s2h2(s2,x2)f_2(s_2) = \max\limits_{0 ≤ x_2 ≤ s_2} {x_2}^2(s_2-x_2) \xrightarrow{记作} \max\limits_{0 ≤ x_2 ≤ s_2} h_2(s_2, x_2)

f2(s2)x2=23s2=427s23f_2(s_2)\Big|_{x_2 = \frac{2}{3}s_2} = \dfrac{4}{27} {s_2}^3,继续递推有

f1(s1)=max0x1s1x1427(s1x1)3记作max0x1s1h1(s1,x1)f_1(s_1) = \max\limits_{0 ≤ x_1 ≤ s_1} x_1 \dfrac{4}{27} (s_1 - x_1)^3 \xrightarrow{记作} \max\limits_{0 ≤ x_1 ≤ s_1} h_1(s_1, x_1)

综上

{x1=14cx2=23(cx1)=12cx3=s3=s2x2=14c\begin{cases} x_1 = \dfrac{1}{4}c \\ x_2 = \dfrac{2}{3}(c - x_1) = \dfrac{1}{2}c \\ x_3 = s_3 = s_2 - x_2 = \dfrac{1}{4}c \end{cases}

maxz=f1(s1)=164s14=164c4\max z = f_1(s_1) = \dfrac{1}{64}{s_1}^4 = \dfrac{1}{64}c^4

最优路径问题

求解方法

如果由起点AA经过PP点和点HH而到达终点G是一条最短路线,则由点PP出发经过HH点到达终点GG的这条子路线,对于从点PP出发到达终点的所有可能选择的不同路线来说,必定也是最短路线。

寻找最短路线的方法,就是从最后一段开始,用由后向前逐步递推的方法,求出各点到G点的最短路线,最后求得由A点到G点的最短路线。

资源分配问题

将数量一定的一种或若干种资源,恰当地分配给若干个使用者,且使目标函数为最优。

在应用动态规划方法处理这类静态规划问题时,通常以把资源分配给一个或几个使用者的过程作为一个阶段,把问题中的变量xi为决策变量,将累计的量或随递推过程变化的量选为状态变量。

这五台设备如何分配给甲乙丙各工厂,才能使盈利最大。

将分配过程分为三个阶段

  1. 给甲厂分配x1x_1
  2. 给乙厂分配x2x_2
  3. 给丙厂分配x3x_3
 
s1s_1 s1=i=1nxi=5s_1 = \sum_{i=1}^{n} x_i = 5
s2s_2 × s2=s1x1=x2+x3s_2 = s_1 - x_1 = x_2 + x_3
s3s_3 × × s3=s2x2=x3s_3 = s_2 - x_2 = x_3
s4s_4 × × × s4=s3x3=0s_4 = s_3 - x_3 = 0

{fk(sk)=max0xksk[Px(xk)+fk+1(skxk)]k=3,2,1f4(s4)=0\begin{cases} f_k(s_k) = \max\limits_{0≤x_k≤s_k} [P_x(x_k) + f_{k+1}(s_k - x_k)] & k=3,2,1 \\ f_4(s_4) = 0 \end{cases}

使用逆推法

f3(s3)=maxx3[P3(x3)+f4(s4)]=maxx3P3(x3)f_3(s_3) = \max\limits_{x_3} [P_3(x_3) + f_4(s_4)] = \max\limits_{x_3} P_3(x_3)

因为此时只有一个工厂,有多少台设备就全部分配给工厂丙,故它的盈利值就是该段的最大盈利值。

f2(s2)=maxx2[P2(x2)+f3(s2x2)]f_2(s_2) = \max\limits_{x_2} [P_2(x_2) + f_3(s_2 - x_2)]

f1(5)=maxx1[P1(x1)+f2(5x1)]f_1(5) = \max\limits_{x_1} [P_1(x_1) + f_2(5 - x_1)]

综上可得

{x1=2x2=2x3=1maxf1(5)=21\begin{cases} x_1 = 2 \\ x_2 = 2 \\ x_3 = 1 \\ \max f_1(5) = 21 \end{cases}