图论网络规划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图论练习
汪帆2011306200513 土规1202
1某城市要建立一个消防站,为该市所属的七个区服务,如图所示,问应设在那个区,才能使它至最远区的路径最短。
图5.1.1 城市点线模型图
解:分析:要求建立的消防站离最远区的路径最短,即要求出任意两点间最优路径,而后从最优路径中选取最大值中的最小值。具体方法则要运用
Warshall-Foryd算法求出该图的路由表,从而根据路由表中的最优路线,寻求V1-V7到每一点的最优路径,并比较各路径中最长路径的大小,择取最小值即为题中之所问。
(1),建立权矩阵:
A=[0 3 inf inf inf inf inf ;
3 0 2 inf 1.8 2.5 inf;
Inf 2 0 6 2 inf inf ;
Inf inf 6 0 3 inf inf ;
Inf 1.8 2 3 0 4 inf;
Inf 2.5 inf inf 4 0 1.5;
Inf inf inf inf inf 1.5 0]
(2),运用Warshall-Foryd算法,调用floyd(A)函数,求出该图的路由表(程序详见附录5.1):
表5.1.1 任意两点间最优路径表(路由表)
V1 V2 V3 V4 V5 V6 V7 V1 0 3 5 7.8 4.8 5.5 7 V2 3 0 2 4.8 1.8 2.5 4 V3 5 2 0 5 2 4.5 6 V4 7.8 4.8 5 0 3 7 8.5 V5 4.8 1.8 2 3 0 4 5.5 V6 5.5 2.5 4.5 7 4 0 1.5 V7 7 4 6 8.5 5.5 1.5 0
(3),结果分析:上述n n ij )V (V ⨯=矩阵为对称阵,主对角线为0,即消防站所建立的位置。其具体涵义为:消防站建立在V i 处时对应各个城市的最短路径,如此可以建立表5.1.2:
表5.1.2 各点建立消防站的最远城市及其两者距离表
消防站点 最远城市 两者距离
V1 V4 7.8 V2 V2 4.8 V3 V7 6 V4 V7 8.5 V5 V7 5.5 V6 V5 7 V7 V4 8.5
从表5.12可以看出,比较最远距离,不难看出,当消防站点选在V2城市时,其离最远城市的最优距离为最优:4.8。故而,应将消防站建立在V2城市。
2某矿区有七个矿点,如图所示,已知各矿点每天的产矿量,现要从这七个矿点选一个来建造矿厂,问应选在哪个矿点,才能使各矿点所产的矿运到选矿厂所在地的总运力(千吨公里)最小。
图5.2.1 矿区点线模型图
解:分析:总运力与两个因素有关:矿点与矿厂的距离、矿点产矿量,且都是正比的关系,故而应当把矿点与矿厂的距离L 和矿点产矿量X 的成绩当做运力,进而将运力当做权矩阵的元,运用Warshall-Foryd 算法求出该图的路由表,从而根据路由表中的最优路线,寻求V1-V7到每一点的最优路径,再将最优路径加总,进而寻求7个预设厂址中的最优路径总值的最小值的点即为所求矿厂点。
(1),距离矩阵:
L=⎥⎥⎥
⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0,5.1inf,inf,inf,inf,inf,5.1,0,4inf,inf,,4inf,inf ,4,0,1,2inf,inf,inf inf,,1,0,6inf,inf,inf inf,,2,6,0,2inf,inf ,4inf,inf,,2,0,3inf inf,inf,inf,,inf ,3,0 产量矩阵:
[]4,1,6,1,7,2,3=X
(2),权矩阵(运算程序见附录5.1):
X i L *:).,(A = i=1:7
⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=0 1.5000 Inf Inf Inf Inf Inf 6 0 24 Inf Inf 8 Inf Inf 4 0 1 14 Inf Inf Inf Inf 6 0 42 Inf Inf Inf Inf 12 6 0 4 Inf Inf 4 Inf Inf 14 0 9Inf Inf Inf Inf Inf 6 0A
(3),运用Warshall-Foryd 算法,调用floyd(A)函数,求出该图的路由表
(程序详见附录5.2.2):
(4),结果分析
由表5.2.1可知,厂址预设与该址到各个矿区的最优路径表清晰而明朗,并在表中最后一栏中的总运力可以观察出:当把V3设为矿厂时,其总运力最小,为57。故而应当选取V3矿区建立矿厂。
附录
5.1
function [D,R]=floyd(A)
D=A;n=length(D);
for i=1:n
for j=1:n
R(i,j)=i;
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j) end end end hl=0; for i=1:n if D(i,i)<0 hl=1; break; end end if(hl==1) fprintf('有负回路') break; end end 5.2.1 %求权矩阵。 n=7; for i=n A=[L(i,:).*X] end