第11章 动态规划
动态规划是制定一系列相关决策时的一种数学方法,提供系统化的方法来寻求最优解,具有一定程度上的独创性和洞察力,以识别何时、如何 通过动态规划解决问题。
范例:
驿站马车问题 https://blog.youkuaiyun.com/qq_44486439/article/details/105693657
动态规划的特征
· 问题可以分为几个阶段 stage,每个阶段都有一个策略决策 policy decision。如例题中,每去下一个地方就是一个stage,选择哪条路就是一个policy decision。
· 每个阶段都有一些与该阶段的开始有关的状态 states。例题中,每个阶段的状态是相关的州/地区
· 每个阶段策略决策的结果都是从当前的状态变成下一阶段开始的状态
· 设计求解过程是为整个问题找到一个最优决策 optimal policy
· 已知目前的状态,对于剩余阶段的最优策略与先前阶段采用的策略无关。=> 最优决策依据你当前的状态,与你如何到达当前的状态无关 => principle of optimality
· 求解过程从为最后阶段找到最优策略开始
· 如果知道n+1阶段的最优策略,就可以确定第n阶段的最优策略,因而可以得到这种递推关系
f
n
∗
(
s
)
=
m
i
n
x
n
c
s
x
n
+
f
n
+
1
∗
(
x
n
)
f_n^*(s) = min_{x_n} {c_{sx_n} + f_{n+1}^*(x_n)}
fn∗(s)=minxncsxn+fn+1∗(xn)
· 运用这种递推关系时,求解过程从终点开始并一步步逆序移动 — 直到找到最初阶段的最优解,即整个问题的最优解
确定性动态规划
常见范例:工作分配问题
线性规划问题有四种假设:比例性、可加性、可分割性、确定性。工作分配问题(或其他动规问题)只需要可加性这一种
阶段n = 活动n (n=1,2,…N);
x
n
x_n
xn = 分配给活动n的资源数;
状态
s
n
s_n
sn = 可分配给剩余活动的资源数;
随机动态规划
下一阶段的状态不完全是由当前阶段的状态和决策策略决定的,而是对于下一状态将会有一个概率分布。然而,这个概率分布仍然完全由当前阶段的状态和策略决策决定
f n ( s n , x n ) = ∑ i = 1 S p i [ C i + f n + 1 ∗ ( i ) ] f_n(s_n, x_n) = \sum_{i=1}^S p_i [C_i + f_{n+1}^*(i)] fn(sn,xn)=∑i=1Spi[Ci+fn+1∗(i)], 其中 f n + 1 ∗ ( i ) = m i n x n + 1 f n + 1 ( i , x n + 1 ) f_{n+1}^*(i) = min_{x_{n+1}} f_{n+1}(i,x_{n+1}) fn+1∗(i)=minxn+1fn+1(i,xn+1)
例题:确定次品限额
注意:题目说只需要生产一个产品,生产L个都是次品的概率是
(
1
/
2
)
L
(1/2)^L
(1/2)L
这个问题的动态规划模型是:
阶段n = 第n个生产周期 n=1,2,3
xn = 阶段n的产品数量
状态sn = 从阶段n开始的仍然需要的成品数量(1或0)
在初始阶段
s
1
=
1
s_1 = 1
s1=1 ,如果后来至少得到一个成品,那么状态变为0,后续不再需要任何成本。
目标 =
f
n
(
s
n
,
x
n
)
f_n(s_n, x_n)
fn(sn,xn) 阶段n,…3的全部期望成本,
f
n
∗
(
0
)
=
0
f_n^*(0) = 0
fn∗(0)=0
因此,
f
n
(
1
,
x
n
)
=
K
(
x
n
)
+
x
n
+
(
1
/
2
)
x
n
f
n
+
1
∗
(
1
)
+
[
1
−
(
1
/
2
)
x
n
]
f
n
+
1
∗
(
0
)
f_n(1,x_n) = K(x_n) + x_n + (1/2)^{x_n} f_{n+1}*(1) + [1-(1/2)^{x_n}] f_{n+1}^*(0)
fn(1,xn)=K(xn)+xn+(1/2)xnfn+1∗(1)+[1−(1/2)xn]fn+1∗(0)
=
K
(
x
n
)
+
x
n
+
(
1
/
2
)
x
n
f
n
+
1
∗
(
1
)
=K(x_n) + x_n + (1/2)^{x_n} f_{n+1}*(1)
=K(xn)+xn+(1/2)xnfn+1∗(1)
----下一个状态不再需要产出 也就是说本次生产出了合格品,下一次还需要产出,说明本次的xn都还是次品
f
n
∗
(
1
)
=
m
i
n
x
n
=
0
,
1
,
.
.
.
K
(
x
n
)
+
x
n
+
(
1
/
2
)
x
n
f
n
+
1
∗
(
1
)
f_n^*(1) = min_{x_n = 0,1,...} K(x_n) + x_n + (1/2)^{x_n} f_{n+1}^*(1)
fn∗(1)=minxn=0,1,...K(xn)+xn+(1/2)xnfn+1∗(1)
最终结果:第一阶段先生产2个,如果都是次品,第二阶段再生产2或3个,如果再是次品,第三阶段生产3或4个;