网站大量收购闲置独家精品文档,联系QQ:2885784924

利用Matlab编程计算最短路径及中位点选址2.docVIP

利用Matlab编程计算最短路径及中位点选址2.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用Matlab编程计算最短路径及中位点选址2

§19. 利用Matlab编程计算最短路径及中位点选址 1、最短路问题 两个指定顶点之间的最短路径。 例如,给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。 以各城镇为图的顶点,两城镇间的直通铁路为图相应两顶点间的边,得图。对的每一边,赋以一个实数—直通铁路的长度,称为的权,得到赋权图。的子图的权是指子图的各边的权和。问题就是求赋权图中指定的两个顶点间的具最小权的轨。这条轨叫做间的最短路,它的权叫做间的距离,亦记作。 求最短路已有成熟的算法:迪克斯特拉(Dijkstra)算法,其基本思想是按距从近到远为顺序,依次求得到的各顶点的最短路和距离,直至(或直至的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。 (i) 令,对,令,,。 (ii) 对每个(),用 代替。计算,把达到这个最小值的一个顶点记为,令。 (iii). 若,停止;若,用代替,转(ii)。 算法结束时,从到各顶点的距离由的最后一次的标号给出。在进入之前的标号叫T标号,进入时的标号叫P标号。算法就是不断修改各项点的T标号,直至获得P标号。若在算法运行过程中,将每一顶点获得P标号所由来的边在图上标明,则算法结束时,至各项点的最短路也在图上标示出来了。 例1: 某公司在六个城市中有分公司,从到的直接航程票价记在下述矩阵的位置上。(表示无直接航路),请帮助该公司设计一张城市到其它城市间的票价最便宜的路线图。 用矩阵(为顶点个数)存放各边权的邻接矩阵,行向量、、、分别用来存放标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量 ; 存放始点到第点最短通路中第顶点前一顶点的序号; 存放由始点到第点最短通路的值。 求第一个城市到其它城市的最短路径的Matlab程序如下: 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=find(d(tb)==min(d(tb))); temp=tb(tmpb(1)); pb(temp)=1; end d 运行输出,第一个城市到其它城市的最短路径长度,即: d = 0 35 45 35 25 10 2、选址问题-以中位点选址为例 中位点选址问题的质量判据为:使最佳选址为止所在的定点到网络图中其他顶点的最短路径距离的总和(或者以各个顶点的载荷加权求和)达到最小。 例2:某县下属七个乡镇,各乡镇所拥有的人口数a(vi)(i=1,2,…,7),以及各乡镇之间的距离wij(i,j=1,2,…,7)如图所示。现在需要设立一个中心邮局,为全县所辖的七个乡镇共同服务。试问该中心邮局应该设在哪一个乡镇(图中的哪一个顶点)? 图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(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; 运行后输出最短距离矩阵,即ShortPath ShortPath = 0 3.0000 5.0000 6.3000 9.3000 4.

文档评论(0)

jixujianchi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档