04. 动态规划
定义
动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。
动态规划是求解某类问题的一种方法,而不是一种特殊算法,没有标准的数学表达式和明确定义的一组规则。
动态规划的基本概念有:
-
阶段:对整个过程的自然划分,阶段变量一般用 k = 1 , 2 , … , n k=1,2,\dots,n k=1,2,…,n 表示;
-
状态:每个阶段开始时过程所处的自然状况,用 x k x_k xk 表示第 k k k 阶段的状态变量,用 X k X_k Xk 表示第 k k k 阶段的允许状态集合;
-
决策:一个阶段的状态确定后,作出各种选择从而演变到下一阶段的某个状态,用 u k ( x k ) u_k(x_k) uk(xk) 表示第 k k k 阶段处于状态 x k x_k xk 时的决策变量,用 U k ( x k ) U_k(x_k) Uk(xk) 表示 x k x_k xk 的允许决策集合;
-
策略:决策组成的序列。由第 k k k 到第 j j j 阶段的子过程策略记
p k j ( x k ) = { u k ( x k ) , … , u j ( x j ) } p_{kj}(x_k)=\{u_k(x_k),\dots,u_j(x_j)\} pkj(xk)={uk(xk),…,uj(xj)} -
状态转移方程:表示状态和决策确定下一状态的演变规律,记
x k + 1 = T k ( x k , u k ) , k = 1 , 2 , … , n x_{k+1}=T_k(x_k,u_k),k=1,2,\dots,n xk+1=Tk(xk,uk),k=1,2,…,n -
指标函数:衡量过程优劣的数量指标,记
V k , n ( x k , u k , x k + 1 , … , x n + 1 ) V_{k,n}(x_k,u_k,x_{k+1},\dots,x_{n+1}) Vk,n(xk,uk,xk+1,…,xn+1) -
最优值函数:使指标函数达到最优,记
f k ( x k ) = opt V k , n ( x k , p k n ) f_k(x_k)=\text{opt}V_{k,n}(x_k,p_{kn}) fk(xk)=optVk,n(xk,pkn)
其中 opt \text{opt} opt 可取 max \max max 或 min \min min。
如果一个问题能用动态规划方法求解,可以按下列步骤建立动态规划的数学模型:
- 将过程划分成恰当的阶段;
- 正确选择状态变量 x k x_k xk,确定允许状态集合 X k X_k Xk;
- 选择决策变量 u k u_k uk,确定允许决策集合 U k ( x k ) U_k(x_k) Uk(xk);
- 写出状态转移方程;
- 确定阶段指标;
- 写出基本方程。
典型问题
最短路线问题
状态:各段的初始位置 x k x_k xk;
决策:各个状态出发的走向 x k + 1 = u k ( x k ) x_{k+1}=u_k(x_k) xk+1=uk(xk);
阶段指标:相邻两段状态间的距离 d k ( x k , u k ( x k ) ) d_k(x_k,u_k(x_k)) dk(xk,uk(xk));
指标函数:阶段指标之和;
最优值函数:由 x k x_k xk 出发到终点的最短距离。
于是有基本方程:
f
k
(
x
k
)
=
min
u
k
(
x
k
)
[
d
k
(
x
k
,
u
k
(
x
k
)
)
+
f
k
+
1
(
x
k
+
1
)
]
,
f_k(x_k)=\min_{u_k(x_k)}[d_k(x_k,u_k(x_k))+f_{k+1}(x_{k+1})],
fk(xk)=uk(xk)min[dk(xk,uk(xk))+fk+1(xk+1)],
f n + 1 ( x n + 1 ) = 0 , k = n , … , 1 f_{n+1}(x_{n+1})=0,k=n,\dots,1 fn+1(xn+1)=0,k=n,…,1
利用该模型就可以算出最短路线。
例子
对于下图
可将其阶段划分为 k = 1 , 2 , 3 , 4 k=1,2,3,4 k=1,2,3,4。
- k = 1 k=1 k=1 时,有允许状态集合 X 1 = { A } X_1=\{A\} X1={A};
- k = 2 k=2 k=2 时,有允许状态集合 X 2 = { B 1 , B 2 , B 3 } X_2=\{B_1,B_2,B_3\} X2={B1,B2,B3};
- k = 3 k=3 k=3 时,有允许状态集合 X 3 = { C 1 , C 2 } X_3=\{C_1,C_2\} X3={C1,C2};
- k = 4 k=4 k=4 时,有允许状态集合 X 4 = { D } X_4=\{D\} X4={D};
进行逆序求解,令
f 4 ( D ) = 0 f_4(D)=0 f4(D)=0
则有
f k ( x k ) = min u k ( x k ) [ d ( x k , u k ( x k ) ) + f k + 1 ( x k + 1 ) ] f_k(x_k)=\min_{u_k(x_k)}[d(x_k,u_k(x_k))+f_{k+1}(x_{k+1})] fk(xk)=uk(xk)min[d(xk,uk(xk))+fk+1(xk+1)]
于是有
-
k = 4 k=4 k=4 时:
f 4 ( D ) = 0 f_4(D)=0 f4(D)=0 -
k = 3 k=3 k=3 时:
f 3 ( C 1 ) = d ( C 1 , D ) + f 4 ( D ) = 3 , f_3(C_1)=d(C_1,D)+f_4(D)=3, f3(C1)=d(C1,D)+f4(D)=3,f 3 ( C 2 ) = d ( C 2 , D ) + f 4 ( D ) = 4. f_3(C_2)=d(C_2,D)+f_4(D)=4. f3(C2)=d(C2,D)+f4(D)=4.
-
k = 2 k=2 k=2 时:
f 2 ( B 1 ) = min i [ d ( B 1 , C i ) + f 3 ( C i ) ] = d ( B 1 , C 2 ) + f 3 ( C 2 ) = 8 , f_2(B_1)=\min_{i}[d(B_1,C_i)+f_3(C_i)]=d(B_1,C_2)+f_3(C_2)=8, f2(B1)=imin[d(B1,Ci)+f3(Ci)]=d(B1,C2)+f3(C2)=8,f 2 ( B 2 ) = min i [ d ( B 2 , C i ) + f 3 ( C i ) ] = d ( B 2 , C 1 ) + f 3 ( C 1 ) = 6 , f_2(B_2)=\min_{i}[d(B_2,C_i)+f_3(C_i)]=d(B_2,C_1)+f_3(C_1)=6, f2(B2)=imin[d(B2,Ci)+f3(Ci)]=d(B2,C1)+f3(C1)=6,
f 2 ( B 3 ) = min i [ d ( B 3 , C i ) + f 3 ( C i ) ] = d ( B 3 , C 2 ) + f 3 ( C 2 ) = 6. f_2(B_3)=\min_{i}[d(B_3,C_i)+f_3(C_i)]=d(B_3,C_2)+f_3(C_2)=6. f2(B3)=imin[d(B3,Ci)+f3(Ci)]=d(B3,C2)+f3(C2)=6.
-
k = 1 k=1 k=1 时:
f 1 ( A ) = min i [ d ( A , B i ) + f 2 ( B i ) ] = d ( A , B 3 ) + f 2 ( B 3 ) = 9. f_1(A)=\min_{i}[d(A,B_i)+f_2(B_i)]=d(A,B_3)+f_2(B_3)=9. f1(A)=imin[d(A,Bi)+f2(Bi)]=d(A,B3)+f2(B3)=9.
因此可得最短距离为 9,最短路径为
A
→
B
3
→
C
2
→
D
A\to B_3\to C_2\to D
A→B3→C2→D
生产计划问题
阶段:自然时间;
状态:每阶段开始时的存储量 x k x_k xk;
决策:每个阶段的产量 u k u_k uk;
状态转移方程:
x
k
+
1
=
x
k
+
u
k
−
d
k
x_{k+1}=x_k+u_k-d_k
xk+1=xk+uk−dk
其中
d
k
d_k
dk 为每个阶段的需求量;
阶段指标:阶段的生产成本和储存费之和,设每阶段开工成本为
a
a
a,生产单位数量产品成本为
b
b
b,每阶段单位数量产品储存费为
c
c
c,即
v
k
(
x
k
,
u
k
)
=
c
x
k
+
{
a
+
b
u
k
,
u
k
>
0
0
v_k(x_k,u_k)=cx_k+\left\{\begin{aligned} &a+bu_k,u_k>0\\ &0 \end{aligned}\right.
vk(xk,uk)=cxk+{a+buk,uk>00
指标函数:阶段指标之和;
最优值函数:从状态
x
k
x_k
xk 出发到过程终结的最小费用,即
f
k
(
x
k
)
=
min
u
k
[
v
k
(
x
k
,
u
k
)
+
f
f
+
1
(
x
k
+
1
)
]
,
f_k(x_k)=\min_{u_k}[v_k(x_k,u_k)+f_{f+1}(x_{k+1})],
fk(xk)=ukmin[vk(xk,uk)+ff+1(xk+1)],
f n + 1 ( x n + 1 0 ) = 0 , k = n , … , 1. f_{n+1}(x_{n+1}^0)=0,k=n,\dots,1. fn+1(xn+10)=0,k=n,…,1.
其中 x n + 1 0 x_{n+1}^0 xn+10 表示过程终结时允许的存储量。
根据上述模型可解。