动态规划求最短路径的两种方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]

相关文档
最新文档