图论网络规划

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图论练习

汪帆 23 土规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):

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):

由表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)

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

相关文档
最新文档