动态规划求最短路径的两种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态规划
1.最短路线问题
解(1):将上图该画成下图:
记a (1,2)=4,a(1,3)=5,依次类推,表示每个点和值的关系。 逆序递推方程:
⎪⎩⎪⎨
⎧==+++=0)6
(61,2,3,4,5)}1(1),({min )(s f k k s k f k u k s k d k u
k s k f
A
B 1
B 2
C 1 C 2
C 3 C 4
D 1
D 2 D 3
E 1 E 2
F
4
5
2
3 6 8 7 7
5
8
4
5
3
4
8
4
3
5 6 2 3
1
4 3
1
2
3
4 5 6 7
8
9 10
11
12
13
4
5
2
3 6 8 7 7
5
8
4
5
3
4 8
4
3
5 6 2 3
1
4 3
如图各状态:
逆序递推,找出上一个状态到下一阶段的最小路径值。 例如,当K=4时,状态 它们到F 点需经过中途 点E ,需一一分析从E 到 F 的最短路:先说从D1到F 的最短路 有两种选择:经过 E1, E2, 比较最短。
这说明由 D1 到F 的最短距离为7,其路径为
A
B 1
B 2
C 1 C 2
C 3 C 4
D 1 D 2 D 3
E 1 E 2
F
4
5
2
3 6 8
7 7
5
8
4
5
3
4
8
4
3
5 6
2 3
1 4 3
第1阶段 第2阶段 第3阶段 第4阶段 第5阶段
状态 1
状
态 2
状
态
3
状态 4
状态 5
状态 6
)}
(),(),(),(min{)(252141511414E f E D d E f E D d D f ++=.
7}35,43min{=++=.11F E D →→},,{3214D D D S =
a=[0,4,5,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf 4,0,inf,2,3,6,inf,inf,inf,inf,inf,inf,inf 5,inf,0,inf,8,7,7,inf,inf,inf,inf,inf,inf inf,2,inf,0,inf,inf,inf,5,8,inf,inf,inf,inf inf,3,8,inf,0,inf,inf,4,5,inf,inf,inf,inf inf,6,7,inf,inf,0,inf,inf,3,4,inf,inf,inf inf,inf,7,inf,inf,inf,0,inf,8,4,inf,inf,inf inf,inf,5,4,inf,inf,inf,0,inf,inf,3,5,inf inf,inf,inf,8,5,3,8,inf,0,inf,6,2,inf inf,inf,inf,inf,inf,4,4,inf,inf,0,1,3,inf inf,inf,inf,inf,inf,inf,inf,3,6,1,0,inf,4 inf,inf,inf,inf,inf,inf,inf,5,2,3,inf,0,3 inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,4,3,0]; s8=min(a(8,11)+a(11,13),a(8,12)+a(12,13)); s9=min(a(9,11)+a(11,13),a(9,12)+a(12,13)); s10=min(a(10,11)+a(11,13),a(10,12)+a(12,13)); s4=min(a(4,8)+s8,a(4,9)+s9); s5=min(a(5,8)+s8,a(5,9)+s9); s6=min(a(6,9)+s9,a(6,10)+s10); s7=min(a(7,9)+s9,a(7,10)+s10); s2=[a(2,4)+s4,a(2,5)+s5,a(2,6)+s6]; s2=min(s2);
s3=[a(3,5)+s5,a(3,6)+s6,a(3,7)+s7]; s3=min(s3);
s1=min(a(1,2)+s2,a(1,3)+s3)
运行结果为:
s8 = 7 s9 = 5 s10 = 5 s4 = 12 s5 = 10 s6 = 8 s7 = 9 s2 =13
s3 = 15 s1 = 17
结果分析:s 表示每个点到终点的最短距离,那么最短路程为17。
依据数据从图中可推出最短路径为:
F E D C B A →→→→→2221
解(2):运用Floyd算法求取动态规划中最短距离及路线。MATLAB程序:
a=[0,4,5,inf,inf,inf,inf,inf,inf,inf,inf,inf,inf
4,0,inf,2,3,6,inf,inf,inf,inf,inf,inf,inf
5,inf,0,inf,8,7,7,inf,inf,inf,inf,inf,inf
inf,2,inf,0,inf,inf,inf,5,8,inf,inf,inf,inf
inf,3,8,inf,0,inf,inf,4,5,inf,inf,inf,inf
inf,6,7,inf,inf,0,inf,inf,3,4,inf,inf,inf
inf,inf,7,inf,inf,inf,0,inf,8,4,inf,inf,inf
inf,inf,5,4,inf,inf,inf,0,inf,inf,3,5,inf
inf,inf,inf,8,5,3,8,inf,0,inf,6,2,inf
inf,inf,inf,inf,inf,4,4,inf,inf,0,1,3,inf
inf,inf,inf,inf,inf,inf,inf,3,6,1,0,inf,4
inf,inf,inf,inf,inf,inf,inf,5,2,3,inf,0,3
inf,inf,inf,inf,inf,inf,inf,inf,inf,inf,4,3,0];
n=size(a,1);
D=a;
path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end;
end;
end;
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j); path(i,j)=path(i,k); end; end; end; end; D(1,13) w1=path(1,13); w2=path(w1,13); w3=path(w2,13); w4=path(w3,13); w5=path(w4,13); w=[1,w1,w2,w3,w4,w5]