姓名:wagsyang
时间:星期五, 23. 十二月 2016 04:15下午
动态规划
对于一个求最短路径问题,比如:
我们可以枚举出每条路径,然后计算最短路径。在这个过程中,有些路径被重复计算,比如,distance(A-B1-C1-D1-E)和distance(A-B1-C1-D2-E),重复计算了distance(A-B1-C1),这样大大增加了运算量。使用动态规划可以避免重复计算。
动态规划的思想是通过将一个问题拆解为子问题,子问题拆解为子子问题,…,最后只计算一次这样子问题,子子问题,…,并把这些计算结果存储起来。当需要计算某个目标问题时,只需要递归地计算这个目标问题拆解的子问题,这些子问题只被计算一次,并保存,避免了重复计算。
比如以上的最短路径问题:
JN(x)=minSN(x){d[x,SN(x)+JN−1[SN(x)]}J1(x)=d(x,E)
其中,
JN(x)
表示由状态x到终点E的距离,
SN(x)
表示状态为x的下一级的选取状态。例如,
J2(C1)
表示为C级的C1状态到终点E的距离,
S2(C1)=D1
表示C1状态的下一级选择的状态为D1(原因如下)。
具体地:
N=1(D级)
J1(D1)=3J1(D2)=2J1(D3)=5无决策问题
N=2(C级)
J2(C1)=min⎧⎩⎨⎪⎪d(C1,D1)+J1(D1)d(C1,D2)+J1(D2)d(C1,D3)+J1(D3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪3+12+35+2⎫⎭⎬⎪⎪=4决策变量:S2(C1)=D1
J2(C2)=min⎧⎩⎨⎪⎪d(C2,D1)+J1(D1)d(C2,D2)+J1(D2)d(C2,D3)+J1(D3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪3+42+15+2⎫⎭⎬⎪⎪=3决策变量:S2(C2)=D2
J2(C3)=min⎧⎩⎨⎪⎪d(C3,D1)+J1(D1)d(C3,D2)+J1(D2)d(C3,D3)+J1(D3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪3+32+65+4⎫⎭⎬⎪⎪=6决策变量:S2(C3)=D1
N=3(B级)
J3(B1)=min⎧⎩⎨⎪⎪d(B1,C1)+J2(C1)d(B1,C2)+J2(C2)d(B1,C3)+J2(C3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪2+43+34+6⎫⎭⎬⎪⎪=6决策变量:S3(B1)=C1/C2
J3(B2)=min⎧⎩⎨⎪⎪d(B2,C1)+J2(C1)d(B2,C2)+J2(C2)d(B2,C3)+J2(C3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪1+42+33+6⎫⎭⎬⎪⎪=5决策变量:S3(B2)=C1/C2
J3(B3)=min⎧⎩⎨⎪⎪d(B3,C1)+J2(C1)d(B3,C2)+J2(C2)d(B3,C3)+J2(C3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪3+44+31+6⎫⎭⎬⎪⎪=7决策变量:S3(B3)=C1/C2/C3
N=4(A级)
J4(A)=min⎧⎩⎨⎪⎪d(A,B1)+J1(B1)d(A,B2)+J1(B2)d(A,B3)+J1(B3)⎫⎭⎬⎪⎪=min⎧⎩⎨⎪⎪3+65+54+7⎫⎭⎬⎪⎪=9决策变量:S4(A)=B1
最短路线为:A-B1-C1-D1-E或A-B1-C2-D2-E
通过以上例子可以很清楚地看到动态规划的思想——逆向递推,求子问题。
维特比算法
动态规划用途十分广泛,维特比算法是动态规划在HMM中的应用。因此其思想也还是动态规划。
维特比算法用于解决HMM的预测或者叫解码问题。具体的,已知模型参数
λ=(A,B,π)
和观测序列
O=(o1,o2,...,oT)
求在该观测序列下的概率
P(I|O)
最大的状态序列
I=(i1,i2,...,iT)
。
对于
P(I|O)
不好解决,我们可以用贝叶斯公式进行变换:
P(I|O)=P(IO)P(O)
对于分母P(O)的计算属于HMM的概率计算问题,因此重点在于解决分子项P(IO)。最终问题转化为:
maxi1,..,iT{P(i1,...,iT|o1,...,oT)}=>maxi1,..,iT{P(i1,...,iT,o1,...,oT)}
定义两个变量
δt(i)
和
ψt(i)
分别表示时刻t状态为i的所有单个路径
(i1,i2,...,it)
中概率最大值和概率最大值的第t-1个结点。即,
δt(i)=maxi1,..,it−1{P(it=i,it−1,...,i1,ot−1,...,o1)}
由定义可递推:
δt+1(i)==maxi1,..,it{P(it+1=i,it,...,i1,ot,...,o1)}max1≤j≤N[δt(j)aji]bi(ot+1)
维特比算法就是求解时刻T的最大概率,递推的计算前面的概率即子问题,所得出的结果就是最优路径。
此算法与上面动态规划的区别:
目标:最短路径vs最优路径
方法:
∑
路径之和vs
∏
概率乘积
着手点:有向图终点最大值vs有向图终点最大值
过程:递推求子问题vs递推求子问题
举个例子:
已知模型参数
λ=(A,B,π)
,
A=⎡⎣⎢⎢0.50.30.20.20.50.30.30.20.5⎤⎦⎥⎥,B=⎡⎣⎢⎢0.50.40.70.50.60.3⎤⎦⎥⎥,π=(0.2,0.4,0.4)T
已知观测序列O=(红,白,红),求最优路径(
i∗1,i∗2,i∗3
).
解:
t=1时,
δ1(i)=πibi(o1)
,
δ1(1)=0.10δ1(2)=0.16δ1(3)=0.28无决策变量
t=2时,
δ2(1)=max1≤j≤3[δ1(j)aj1]b1(o2)]=maxj⎧⎩⎨⎪⎪0.10∗0.50.16∗0.30.28∗0.2⎫⎭⎬⎪⎪∗0.5=0.0280,决策变量ψ2(1)=3δ2(2)=max1≤j≤3[δ1(j)aj2]b2(o2)]=maxj⎧⎩⎨⎪⎪0.10∗0.20.16∗0.50.28∗0.3⎫⎭⎬⎪⎪∗0.6=0.0504,决策变量ψ2(2)=3δ2(3)=max1≤j≤3[δ1(j)aj3]b3(o2)]=maxj⎧⎩⎨⎪⎪0.10∗0.30.16∗0.20.28∗0.5⎫⎭⎬⎪⎪∗0.3=0.0420,决策变量ψ2(3)=3
t=3时,
δ3(1)=max1≤j≤3[δ2(j)aj1]b1(o3)]=maxj⎧⎩⎨⎪⎪0.028∗0.50.0504∗0.30.042∗0.2⎫⎭⎬⎪⎪∗0.5=0.07560,决策变量ψ3(1)=2δ3(2)=max1≤j≤3[δ2(j)aj2]b2(o3)]=maxj⎧⎩⎨⎪⎪0.028∗0.20.0504∗0.50.042∗0.3⎫⎭⎬⎪⎪∗0.4=0.01008,决策变量ψ3(2)=2δ3(3)=max1≤j≤3[δ2(j)aj3]b3(o3)]=maxj⎧⎩⎨⎪⎪0.028∗0.30.0504∗0.20.042∗0.5⎫⎭⎬⎪⎪∗0.7=0.01470,决策变量ψ3(3)=3
P∗
为最优路径的概率,则
P∗=max1≤i≤3δ3(i)=0.0147
最优路径终点为
i∗3=3
,逆向递推得
t=2时,
i∗2=3
t=1时,
i∗1=3
最终,(
i∗1,i∗2,i∗3
)=(3,3,3)