《利用Matlab编程计算最短路径及中位点选址.doc》由会员分享,可在线阅读,更多相关《利用Matlab编程计算最短路径及中位点选址.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date利用Matlab编程计算最短路径及中位点选址利用Matlab编程计算最短路径及中位点选址19. 利用Matlab编程计算最短路径及中位点选址1、最短路问题两个指定顶点之间的最短路径。例如,给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。以各城镇为图的顶点,两城镇间的直通铁路为图相应两顶点间的边,得图。对的每一边,赋以一个实数直通铁路的
2、长度,称为的权,得到赋权图。的子图的权是指子图的各边的权和。问题就是求赋权图中指定的两个顶点间的具最小权的轨。这条轨叫做间的最短路,它的权叫做间的距离,亦记作。求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距从近到远为顺序,依次求得到的各顶点的最短路和距离,直至(或直至的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。(i) 令,对,令,。(ii) 对每个(),用代替。计算,把达到这个最小值的一个顶点记为,令。(iii). 若,停止;若,用代替,转(ii)。算法结束时,从到各顶点的距离由的最后一次的标号给出。在进入之前的标号叫T
3、标号,进入时的标号叫P标号。算法就是不断修改各项点的T标号,直至获得P标号。若在算法运行过程中,将每一顶点获得P标号所由来的边在图上标明,则算法结束时,至各项点的最短路也在图上标示出来了。例1: 某公司在六个城市中有分公司,从到的直接航程票价记在下述矩阵的位置上。(表示无直接航路),请帮助该公司设计一张城市到其它城市间的票价最便宜的路线图。用矩阵(为顶点个数)存放各边权的邻接矩阵,行向量、分别用来存放标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量; 存放始点到第点最短通路中第顶点前一顶点的序号; 存放由始点到第点最短通路的值。求第一个城市到其它城市的最短路径的Matlab程序如下
4、:clear;clc;M=10000;a(1,:)=0,50,M,40,25,10;a(2,:)=zeros(1,2),15,20,M,25;a(3,:)=zeros(1,3),10,20,M;a(4,:)=zeros(1,4),10,25;a(5,:)=zeros(1,5),55;a(6,:)=zeros(1,6);a=a+a;pb(1:length(a)=0;pb(1)=1;d(1:length(a)=M;d(1)=0;temp=1;while sum(pb)length(a) tb=find(pb=0); d(tb)=min(d(tb),d(temp)+a(temp,tb); tmpb=
5、find(d(tb)=min(d(tb); temp=tb(tmpb(1); pb(temp)=1; endd 运行输出,第一个城市到其它城市的最短路径长度,即:d = 0 35 45 35 25 102、选址问题以中位点选址为例中位点选址问题的质量判据为:使最佳选址为止所在的定点到网络图中其他顶点的最短路径距离的总和(或者以各个顶点的载荷加权求和)达到最小。例2:某县下属七个乡镇,各乡镇所拥有的人口数a(vi)(i=1,2,7),以及各乡镇之间的距离wij(i,j=1,2,7)如图所示。现在需要设立一个中心邮局,为全县所辖的七个乡镇共同服务。试问该中心邮局应该设在哪一个乡镇(图中的哪一个顶点
6、)?图9.2.3第一步,用标号法求出每一个顶点vi至其它各个顶点vj的最短路径长度dij(i,j 1,2,7),并将其写成如下距离矩阵:第二步,以各顶点的载荷(人口数)加权,求每一个顶点至其它各个顶点的最短路径长度的加权和,可在Matlab环境下用矩阵运算求得:定义各顶点的载荷矩阵:输出结果:第三步,判断计算如下:第一步:clear;clc;M=10000;for i=1:length(a)pb(1:length(a)=0;pb(i)=1; d(1:length(a)=M;d(i)=0;temp=i;while sum(pb)length(a) tb=find(pb=0); d(tb)=min
7、(d(tb),d(temp)+a(temp,tb); tmpb=find(d(tb)=min(d(tb); temp=tb(tmpb(1); pb(temp)=1; end;ShortPath(i,:)=d;end;ShortPath; 运行后输出最短距离矩阵,即ShortPathShortPath = 0 3.0000 5.0000 6.3000 9.3000 4.5000 6.0000 3.0000 0 2.0000 3.3000 6.3000 1.5000 3.0000 5.0000 2.0000 0 2.0000 5.0000 3.5000 5.0000 6.3000 3.3000 2
8、.0000 0 3.0000 1.8000 3.3000 9.3000 6.3000 5.0000 3.0000 0 4.8000 6.3000 4.5000 1.5000 3.5000 1.8000 4.8000 0 1.5000 6.0000 3.0000 5.0000 3.3000 6.3000 1.5000 0第二步:A=3 2 7 1 5 1 4;S= ShortPath * A;运行后输出S,即每一个顶点至其它各个顶点的最短路径长度的加权和:S = 122.3000 71.3000 69.5000 69.5000 108.5000 72.8000 95.3000第三步:min(S)运行后输出S的最小值:ans = 69.5000判断:因为。所以,v3和v4都是图9.2.3的中位点。也就是说,中心邮局设在v3或v4都是可行的。-