不同城市之间确定最短路线是动态规划中最典型的一种案例,对于这一问题的MATLAB实现一般有以下几个难点,本文将就这几个问题分别进行阐述,并写出了相应的计算程序。
一、网络图数据的存储方式
BH=[1,3,2,2,1];
s(1,1:BH(2),1:BH(1))=[6;3;3];
s(2,1:BH(3),1:BH(2))=[6,8,7;5,6,4];
s(3,1:BH(4),1:BH(3))=[6,8;7,9];
s(4,1:BH(5),1:BH(4))=[5,6];
二、最短距离的计算
for L=2:n
for
H2=1:BH(L)
for H1=1:BH(L-1)
mnp(H1)=s(L-1,H2,H1)+mn(L-1,H1);
end
[mn(L,H2),nummin(L-1,H2)]=min(mnp);
mnp=ones(1,max(BH)).*inf;
end
end
[dmin,nummin(L,1)]=min(mn(n,1:BH(n)));
三,求最佳路线
NO(1)=nummin(n,1);
for L=2:n
NO(L)=nummin(n+1-L,NO(L-1));
end
四、求最佳路线每一个阶段的距离
NUM=fliplr(NO);
for L=1:n-1
D(L)=s(L,NUM(L+1),NUM(L));
end
函数计算文件
function dynp1
clear; clc;
BH=[1,3,2,2,1];
s(1,1:BH(2),1:BH(1))=[6;3;3];
s(2,1:BH(3),1:BH(2))=[6,8,7;5,6,4];
s(3,1:BH(4),1:BH(3))=[6,8;7,9];
s(4,1:BH(5),1:BH(4))=[5,6];
[dmin,NUM,D]=smin(BH,s)
function [dmin,NUM,D]=smin(BH,s) n=length(BH); %状态个数
s;
mnp=ones(1,max(BH)).*inf; mn(1:BH(1))=0; %初始状态指标函数值
for L=2:n
for
H2=1:BH(L)
for H1=1:BH(L-1)
mnp(H1)=s(L-1,H2,H1)+mn(L-1,H1); %计算某一阶段状态决策点到出发点的距离
end
[mn(L,H2),nummin(L-1,H2)]=min(mnp); %计算某一阶段决策点到出发点的最短距离
mnp=ones(1,max(BH)).*inf;
end
end
[dmin,nummin(L,1)]=min(mn(n,1:BH(n)));
NUM(n)=nummin(n,1);
for L=n:-1:2
NUM(L-1)=nummin(L-1,NUM(L)); %计算最佳路线点
end
for L=1:n-1
D(L)=s(L,NUM(L+1),NUM(L)); %计算最佳路线点相邻俩点之间的距离
end
D;
NUM;
dmin;