动态规划是解决多阶段决策过程最优化的一种数学方法。
如果某阶段状态给定后,则在这阶段以后过程的发展不受这阶段以前各段状态的影响。换句话说,过程的过去历史只能通过当前的状态去影响它未来的发展,当前的状态是以往历史的一个总结。这个性质称为无后效性(即马尔科夫性)。
无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。即,最优策略的子策略总是最优的。可以利用该原理,通过局部最优来逆推全局最优。
- 线性规划和非线性规划研究的问题通常与时间无关,故又称为静态规划。
- 动态规划、静态规划都属于数学规划范围,都是在若干约束条件下的函数极值问题,都利用迭代法去逐步求解。
- 一些静态规划只要适当引入阶段变量、状态、决策等就可以转化为动态规划问题。
- 动态规划研究的问题与时间有关,研究具有多阶段决策过程的一类问题,将问题的整体按时间或空间的特征分成若干个前后衔接的时空阶段,把多阶段决策问题表示为前后有关联的一系列单阶段决策问题,然后逐个加以解决,从而求出整个问题的最优决策序列。
规划类型 |
内容 |
与时间关系 |
问题类型 |
解决方案 |
静态规划 |
线性规划、非线性规划 |
无关 |
|
一定条件下可转换为动态规划问题 |
动态规划 |
动态规划 |
有关 |
多阶段决策 |
|
解法 |
适用情况 |
逆序解法 |
已给定初始状态 |
顺序解法 |
已给定终止状态 |
maxz=x1⋅x22⋅x3
{x1+x2+x3=cxi≥0,c>0i=1,2,3
使用逆推法解答上述问题。
解
设第k阶段初始状态为sk,有最优值函数fk(sk)。
令⎩⎪⎪⎨⎪⎪⎧s3=x3s2=x2+s3s1=x1+s2=c⇒ 0≤x3=s3⇒ 0≤x2≤s2⇒ 0≤x1≤s1=c
根据逆推法(最优解从后向前传递)有
f3(s3)=s3=x3max(x3)f2(s2)=0≤x2≤s2max[x22f3(s3)]f1(s1)=0≤x1≤s1max[x1f2(s2)]
明显f3(s3)有最优值s3,递推有
f2(s2)=0≤x2≤s2maxx22(s2−x2)记作0≤x2≤s2maxh2(s2,x2)
- ∂x2∂h2=2x2s2−3x22=0 ⇒ x2=32s2
- ∂x22∂h2=2s2−6x2,∂x22∂h2∣∣∣∣x2=32s2=−2s2<0
故f2(s2)∣∣∣∣x2=32s2=274s23,继续递推有
f1(s1)=0≤x1≤s1maxx1274(s1−x1)3记作0≤x1≤s1maxh1(s1,x1)
- ∂x1∂h1=0 ⇒ x1=41s1
综上
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧x1=41cx2=32(c−x1)=21cx3=s3=s2−x2=41c
maxz=f1(s1)=641s14=641c4
如果由起点A经过P点和点H而到达终点G是一条最短路线,则由点P出发经过H点到达终点G的这条子路线,对于从点P出发到达终点的所有可能选择的不同路线来说,必定也是最短路线。
寻找最短路线的方法,就是从最后一段开始,用由后向前逐步递推的方法,求出各点到G点的最短路线,最后求得由A点到G点的最短路线。

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

这五台设备如何分配给甲乙丙各工厂,才能使盈利最大。
解
将分配过程分为三个阶段
- 给甲厂分配x1台
- 给乙厂分配x2台
- 给丙厂分配x3台
|
甲 |
乙 |
丙 |
|
s1 |
√ |
√ |
√ |
s1=∑i=1nxi=5 |
s2 |
× |
√ |
√ |
s2=s1−x1=x2+x3 |
s3 |
× |
× |
√ |
s3=s2−x2=x3 |
s4 |
× |
× |
× |
s4=s3−x3=0 |
{fk(sk)=0≤xk≤skmax[Px(xk)+fk+1(sk−xk)]f4(s4)=0k=3,2,1
- xk:分配给第k个工厂的设备台数
- sk:分配给第k个至第n个工厂一共的设备台数
- Pk(xk):xk台设备分配到第k个工厂所得的盈利值
- fk(sk):sk台设备分配到第k个至第n个工厂一共所得的盈利值
使用逆推法
f3(s3)=x3max[P3(x3)+f4(s4)]=x3maxP3(x3)
因为此时只有一个工厂,有多少台设备就全部分配给工厂丙,故它的盈利值就是该段的最大盈利值。

f2(s2)=x2max[P2(x2)+f3(s2−x2)]

f1(5)=x1max[P1(x1)+f2(5−x1)]

综上可得
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x1=2x2=2x3=1maxf1(5)=21