自来水管的连接问题 3.docx
- 文档编号:23257236
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:53
- 大小:298.55KB
自来水管的连接问题 3.docx
《自来水管的连接问题 3.docx》由会员分享,可在线阅读,更多相关《自来水管的连接问题 3.docx(53页珍藏版)》请在冰豆网上搜索。
自来水管的连接问题3
自来水管道连接问题
摘要
自来水是人们日常生活中不可缺少的生活要素,然而自来水管网的组建却有
很多问题需要解决。
一般来说,我们假设管网中任意两个用户之间存在直线段相连,但是在连接过程中,有些区域是必须绕开的,这些必须绕开的区域我们称为障碍区域。
为了节约成本,需要找到最优的连通路线,使距离最短。
对于问题一,为判断各点是否为有效用户,利用角度的方法来找出在障碍区内的无效用户。
首先由所给信息在坐标系中画出所有用户点及障碍区顶点坐标,再找出能够包围障碍区域的最小矩形。
考虑矩形中各点,将该点与障碍区域各顶点依次连接,算出相邻两条线段之间的交角α1,α2,α3,……(αi<180°)并算得它们的总和为α。
若α<360°,则该点不再障碍区域内,即为有效用户;若α=360°,则该点在障碍区域内,即为无效用户。
最后确定了第4,23,36,99号点处在障碍区域内,为无效用户,其余所有点为有效用户。
对于问题二,应用最优化模型来求最小连通距离。
先通过障碍区域顶点与用户点的直线方程筛选有效用户之间的有效线段,构造有效线段的带权临接矩阵,将无效线段的距离赋值无穷大,利用带权临接矩阵,使用Kruskal最小生成树算法解出最小连通图,并解得最小连通距离为。
最后,对模型进行了分析,并对此做出了改进。
考虑到两有效用户点之间可以用通过第三点的折线连接而使线路更短。
在第一步改进中,先分别加入障碍区的十四个顶点中的一个再次生成有效线段的带权临接矩阵,求得各自的最小连通距离。
在这十四个距离中,最小值为643.8404。
接下来加入十四个障碍区域顶点中的两个顶点后发现都比加入一个顶点时距离要长。
分析加入多个顶点距离变大的原因后,确定应加入区域四的顶点3(90,75)获得最小距离。
在上步改进基础上进行第二步改进,对连接线路中两相邻线段的夹角进行分析,当且仅当夹角为锐角时,可作较短边上的高以代替较长边,此时该三个有效用户点仍然连通,而路径长度可以大大缩小。
对此改进方法进行模型求解,最终确定了最优路径。
关键字:
管道连接内外点角度判断最小生成树Kruskal权值矩阵
1
目录
第一部分:
问题重述………………………………………………………………
问题一………………………………………………………………
问题二………………………………………………………………
第二部分:
问题分析……………………………………………………………
问题一………………………………………………………………
问题二………………………………………………………………
第三部分:
模型假设………………………………………………………………
第四部分:
符号说明………………………………………………………………
第五部分:
模型的建立与求解……………………………………………………
5.1问题一的模型建立与求解…………………………………………
5.1.1在坐标系中画出各用户点及障碍区域的图像……………………
5.1.2作出包含各障碍区域的最小矩形,找出其中的用户点…………
5.1.3矩形区域中,求用户点与障碍区顶点连线间夹角并求和………
5.1.4判断有效用户点……………………………………………………
5.1.5模型求解………………………………………………………………
5.2问题二的模型建立与求解…………………………………………
5.2.1筛选有效用户间的有效线段………………………………………
5.2.2用最小生成树连接有效线段………………………………………
5.2.3模型求解………………………………………………………………
第六部分:
模型检验………………………………………………………………
第七部分:
模型的优缺点分析……………………………………………………
第八部分:
模型的推广与改进……………………………………………………
参考文献
附录
2
一问题重述
自来水是人们日常生活中不可缺少的生活要素,然而自来水管网的组建却有很多问题需要解决。
一般来说,我们假设管网中任意两个用户之间存在直线段相连,但是在连接过程中,有些区域是必须绕开的,这些必须绕开的区域我们称为障碍区域。
问题一:
本题给出了若干个可能的用户的地址的横纵坐标,以及各个障碍区域的顶点坐标(见附录),我们需要根据这些数据信息确定出哪些用户为有效用户。
可能的用户的含义是:
如果用户的地址不在障碍区域内,那么该用户就是需要使用自来水的用户(即有效用户),否则如果用户的地址在障碍区域内,那么该用户就是无效用户。
已知障碍区域各顶点坐标,对应障碍区域就是覆盖这些要覆盖的点的最小凸集。
问题二:
在找出所有有效用户后,设计一个算法,避开障碍区域,将有效用户全部连接起来,使连接的距离总和最小。
二问题分析
本问题主要根据各用户和障碍区的数据信息,对各用户点进行检测,找出有效用户的点,再设计一个算法,将全部有效用户连接起来,使得路径不经过障碍区域,并且连接路线总和最小。
问题一:
根据题目可知,当用户点在障碍区域外时,为有效用户;当用户点在障碍区域内时,为无效用户。
为找出所有的有效用户点,可将目标区域缩小。
分别作出包含各障碍区域的最小矩形,考虑对矩形区域中的用户点,将该点与障碍区域各顶点按顺序依次连接,再算出相邻两条线段的交角α1,α2,α3,……(αi<180°)并算得它们的总和为α。
若α<360°,则该点不再障碍区域内,即为有效用户;若α=360°,则该点在障碍区域内,即为无效用户。
问题二:
解决问题2需要两步。
第一需筛选有效用户之间的有效线段。
将任意两个有效用户用线段连接,如果任意两个用户点之间的线段通过障碍区域之内,则为无效线段,作剔除处理,筛选出有效线段。
第二步,根据筛选出来的有效用户点和有效线段生成最小生成树连接有效用户点,画出连接路线图形,并计算生成树长度。
接下来需要设计程序将所有有效用户点连接起来,并使管道总距离最小。
但相较以往最小生成树问题又有着其特别之处,就是障碍区域的干扰,即管道无法穿过障碍区,这使得坐标系并非是一个连通区域。
可以将穿过障碍区的线段赋权值为无穷大,利用Kruskal算法,生成最优路径。
三模型假设
1.假设所给数据全部真实可靠。
3
2.任何两个用户点之间都可以直接连接。
3.不在障碍区里的用户都能够通过自来水管获得自来水供应。
4.假设障碍区域的边界是标准的直线。
5.障碍区域就是障碍顶点围成的凸多边形区域。
7.要保证在任意两点间线段不过障碍区的情况下求解连接形成的最短路线。
四符号约束与说明
符号
说明
(xi,yi)i=1,2,3...
障碍区域各顶点坐标
(ai,bi)i=1,2,3…
各用户点的坐标
αi,i=1,2,3…
用户点与障碍区顶点各相邻连线的夹角
(αi<180°)
当αi>180°时,取其为360°-αi
α
所有夹角之和
αi(k,j)
区域i中第k个点的j个角
N
有效用户点的个数
NUM
记录任意两用户点之间可用线段连接起来且不过障碍区的线段
DIS
连接的长度
M
最小生成树的点以及连接的信息
Sum
最小生成树管道的总长
Inf
邻接矩阵中对应无效线段的位置的值
五模型的建立与求解
5.1.问题一的模型建立与求解
4
本题已知各用户点与障碍区域的坐标信息,可应用角度的方法判断哪些为有效用户。
分为四个步骤:
一是先在坐标系中描出各用户点及障碍区顶点坐标。
二
是由各障碍区域顶点作出包含该区域的最小矩形,并找出矩形区域内的用户点。
三是将矩形区域中某用户点与对应区域顶点连线,并求出相邻两条线段的交角α1,α2,α3……(αi<180°)四是将这些角度加和得α,若α=360°,说明该用户点在障碍区域内,为无效用户;若α<360°,说明该用户点在障碍区域外,为有效用户。
5.1.1在坐标系中画出各用户点及障碍区域的图像
根据题目中给出的各用户点和各障碍区域顶点的坐标信息,在matlab中编出程序(见附录Ⅰ),可得如下图像:
图一障碍区域与各用户点示意图
5.1.2作出包含各障碍区域的最小矩形,并找出其中的用户点
设某障碍区域各顶点坐标为A(x1,y1),B(x2,y2),C(x3,y3)……
5
则取
p=min(x1,x2,x3…)q=max(x1,x2,x3…)
r=min(y1,y2,y3…)s=max(y1,y2,y3…)
故包含该障碍区域的最小矩形即为X=p,X=q,Y=r,Y=s四条直线所围成的矩形。
对于任意用户点M(x,y),若满足p 在matlab编出程序运行(见附录Ⅱ),可得到图像,如下图所示: 图二包含障碍区的最小矩形 记矩形从左到右依次为区域一,二,三,四,通过比较在最小矩形区域的条件,得到在各个区域的内点和边界点,用MATLAB编程(见附录III)可得如下表格: (共计16个点)表一: 区域一 区域二 区域三 区域四 最小矩形内点标号 99 67,22,16,36, 33,4,54 35,83,77 90,23,89, 37,84 标号对应的坐标 (6.4781,17.0793) (34.1971,36.7568) (35.2868,30.4999) (40.5706,56.7829) (41.8649,41.1953) (44.5096,32.0036) (48.5982,33.3951) (54.1674,31.2685) (46.5994,72.6632) (52.2590,71.5883) (54.6571,69.9213) (73.7306,90.8398) (81.3166,87.4367) (87.5742,80.4872) (84.6221,74.4566) (88.0142,89.2842) 5.1.3将矩形区域中用户点与障碍区顶点连线,求各相邻连线间夹角并求和 设矩形区域内某个用户点坐标为M(a,b),M与障碍区域各顶点连线后,某相邻两条线断分别为MA,MB. 设A点坐标(x1,y1),B点坐标(x2,y2),则向量MA=(x1-a,y1-b),向量MB=(x2-a,y2-b),MA与MB的内积为 MA·MB=|MA||MB|cosθ 则θ= 用matlab编写程序实现算法(见附录Ⅳ),可得如下示意图(以包含五边形障碍区的矩形中两点G,F为例) 点G分别与五边形的顶点A,B,C,D,E相连见洋红色连线,记∠AGB,∠BGC,∠CGD,∠DGE,∠EGA分别为α2(4,1),α2(4,2),α2(4,3),α2(4,4),α2(4,5). 点F与五边形的顶点A,B,C,D,E相连见蓝绿色连线.记为∠DFE,∠EFA,∠AFB,∠BFC.分别为α2(1,1),α2(1,2),α2(1,3),α2(1,4),α2(1,5). 7 图三用户点与障碍区顶点连线 用MATLAB分别按区域一,区域二,区域三,区域四中各点与顶点的夹角(必须是相邻两边且角度小于180°)记为αi(k,j)。 以表一中最小矩形内的点按从左到右从上到下的顺序按区域标记为1,2,3……依次类推。 得到表二: 区域 点标号 指定角 弧度 角度 求和 一 99 α1(1,1) 2.4398 139.7902 360.0180 α1(1,2) 1.9431 111.3314 α1(1,3) 1.9006 108.8964 二 67 α2(1,1) 0.9431 54.0356 258.3810 α2(1,2) 0.4732 27.1124 α2(1,3) 0.1309 7.5000 α2(1,4) 0.7076 40.5425 α2(1,5) 2.2548 129.1905 22 α2(2,1) 0.8053 46.1403 207.7487 二 α2(2,2) 0.3873 22.1907 α2(2,3) 0.1178 6.7494 α2(2,4) 0.5025 28.7911 α2(2,5) 1.8130 103.8772 16 α2(3,1) 0.6683 38.2908 232.3115 α2(3,2) 0.6169 35.3458 α2(3,3) 0.2336 13.3843 α2(3,4) 1.7937 102.7714 α2(3,5) 0.7421 42.5192 36 α2(4,1) 1.4905 85.3994 360.0010 α2(4,2) 0.7152 40.9780 α2(4,3) 0.2252 12.9030 α2(4,4) 1.8144 103.9575 α2(4,5) 2.0379 116.7631 33 α2(5,1) 1.4089 80.7240 330.3215 α2(5,2) 0.4160 23.8350 α2(5,3) 0.1532 8.7777 α2(5,4) 0.9045 51.8240 α2(5,5) 2.8826 165.1608 4 α2(6,1) 2.4205 138.6844 359.9950 α2(6,2) 0.4000 22.9183 α2(6,3) 0.1644 9.4194 α2(6,4) 0.9386 53.7778 α2(6,5) 2.3596 135.1951 54 α2(7,1) 1.8418 105.5274 211.0547 α2(7,2) 0.2488 14.2552 α2(7,3) 0.1424 8.1589 α2(7,4) 0.7665 43.9172 α2(7,5) 0.6841 39.1960 三 35 α3(1,1) 1.4975 85.8004 211.3699 α3(1,2) 1.8445 105.6821 α3(1,3) 0.3471 19.8874 83 α3(2,1) 2.0674 118.4533 310.9270 α3(2,2) 2.7133 155.4606 α3(2,3) 0.6460 37.0131 77 α3(3,1) 0.5266 30.1720 130.1646 α3(3,2) 1.1359 65.0823 α3(3,3) 0.6093 34.9103 四 90 α4(1,1) 1.3579 77.8020 285.1153 α4(1,2) 1.1302 64.7557 α4(1,3) 2.4881 142.5576 23 α4(2,1) 2.7044 154.9507 359.9951 α4(2,2) 1.5989 91.6102 α4(2,3) 1.9798 113.4342 89 α4(3,1) 3.0768 176.2877 352.5753 α4(3,2) 1.9593 112.2596 α4(3,3) 1.1175 64.0280 37 α4(4,1) 1.6914 96.9101 306.9335 α4(4,2) 2.6785 153.4667 α4(4,3) 0.9871 56.5567 84 α4(5,1) 2.3285 133.4132 266.8266 α4(5,2) 1.2331 70.6514 α4(5,3) 1.0954 62.7618 5.1.4判断有效用户点 由题目所给信息,障碍区域最多为五边形,下面对三、四、五边形,就利用角度判断障碍区域内外点的方法给出证明。 三角形四边形五边形 (1)三角形情况: 9 内点D与顶点A,B,C分别连接得向量DA,DB,DC,各相邻两向量的夹角分别为α1,α2,α3,将△ABC分成△ADB,△ADC,△BDC,由三角形内角和为180°,则α1+α2+α3=3×180°-180°=360°。 外点E与顶点A,B,C分别连接得向量EA,EB,EC,取相邻两向量的夹角分别为α1,α2,EA,EB相邻时∠AEB﹥180°时角度相加依然会小于360°。 即记为 α1+α2+∠AEB﹤360°。 (2)四边形,五边形情况类似讨论。 所以若α<360°,则该点不再障碍区域内,即为有效用户;若α=360°,则该点在障碍区域内,即为无效用户。 5.1.5模型求解 由以上分析,当用户点对应的全部夹角和α=360°(近似)时,该点为无效用户;否则,该点为有效用户。 在夹角的计算过程中,存在四舍五入的情况,会产生微小误差,所以α近似360度就可认为是无效用户。 现对1.3中表二的数据进行分析,可以看出,标号为4,23,36,99的点处,α近似为360°,故第4,23,36,99号点处在障碍区域内,为无效用户,其余所有点不在障碍区域内,为有效用户。 找出无效用户后,再作出障碍区域与各用户点的图像如下: (其中红点表示无效用户) 图四障碍区中的无效用户 10 5.2问题二的模型建立与求解 为了求出将所有用户连接起来,并且路程最短的方法,应当将问题分为两步: 一、筛选有效用户之间的有效线段;二、将有效用户用有效线段连接起来,并且连接的距离总和最小。 5.2.1筛选有效用户间的有效线段 (1)运用矩阵的方法求解两直线之间的交点坐标 如果任意两个有效用户点的坐标分别为A(x1,y1)、B(x2,y2),同一障碍区任意两个顶点坐标为M(x3,y3)、N(x4,y4)。 则两直线方程分别为: (1) (2); 则由解线性方程组的方法有 ,线性方程组的的系数矩阵为: ; ; 在运用Matlab求解该线性方程组时,不妨把 分别设为: 可以求得 =A\ 。 (2)判断线段是否为有效线段 若求得的交点坐标为P(x,y),则通过向量关系PM= PN,可以求的 。 若 0,则该线段为有效线段;若 <0,则要考虑向量关系PA= PB,若 0,则该线段为有效线段,否则,该线段为无效线段。 5.2.2用最小生成树连接有效线段 若要在N个用户之间连接自来水管道,由于每一个用户与其余N-1个用户之间都可能连接自来水管道。 因此,在N个用户之间,最多可能连接N(N-1)/2条自来水管道然而,在连接N个用户之间的管道时,最少只需连接N-1条管道。 也就是说只需要N-1条管道线路就可以把N个用户之间的自来水管道连通。 现在要考虑在连接N个用户的自来水管道的同时要保证所有的管道长度之和最短,这就涉及了最优化的问题。 利用Kruskal算法思想设计Matlab程序进行最小生成树所需边的筛选,并且设计算法将筛选出来的构成最小生成树的各边连接起来,求出最短路径长度,并画出连接图形。 现利用Kruskal算法思想求解最小生成树 设计96个用户之间的带权图,并作出邻接矩阵DIS,再根据求得的有效线段 11 与无效线段对邻接矩阵进行修改,将邻接矩阵中对应无效线段的位置赋值无穷大,可以得到一个新的邻接矩阵DIS。 接下来,用冒泡排序法对所有有效线段长度按从小到大的顺序进行排序。 这时,需要借助Kruskal算法进行最小生成树的计算。 然后把最小生成树对应边的线段长度、起点、终点信息记录在矩阵EE中。 生成最小生成树时,从长度最短的边开始选取。 首先不妨设一个1×96的标记向量l用于记录被选取的点的序号,初始状态向量l的各元素依次为各用户序号,在选取线段为边后,将对应两点的序号m与n取最小值,并将向量l中所有与m位置元素相等的元素位置及所有与n位置的元素相等的元素位置都赋值为该最小值,如此循环知道向量l中所有元素均相等时停止;同时可以设一向量R来依次记录被选点的序号,直到所有用户点被无重复地被记录。 在按线段长度从小到大的顺序选择边时,设线段端点用户的序号为m与n。 这时需要考虑如下4种情况: <1>如果在向量R中m和n均没有被记录,则该线段可以被选为最小生成树的边,将对应线段的信息记录在矩阵EE中,同时在R中添加记录m和n的值,并按照上述步骤更新向量l。 <2>如果在向量R中m被记录而n没有被记录,则该线段可以被选为最小生成树的边,将对应线段的信息记录在矩阵M中,同时在R中添加记录n的值,并按照上述步骤更新向量l。 <3>如果在向量R中n被记录而m没有被记录,则该线段可以被选为最小生成树的边,将对应线段的信息记录在矩阵EE中,同时在R中添加记录m的值,并按照上述步骤更新向量l。 <4>如果在向量R中m和n均被记录,则需要借助向量l来判断是否该线段可以被选为最小生成树的边: a.如果向量l中对应的m位置与n位置的元素值相等,则该线段不是最小生成树的边,直接跳过到下一步判断。 b.如果向量l中对应的m位置与n位置的元素值不相等,则该线段是最小生成树的边,将对应线段的信息记录在矩阵M中,同时只需要更新向量l。 通过上述方法,即可产生最小生成树,其各边信息记录在矩阵M中。 5.2.3模型求解 设计Matlab程序求出最小生成树长度并将各边连接起来(见附录) 要计算最小生成树的长度只需要借助for循环将EE矩阵中记录长度相加即可。 可以求得最小生成树的长度为sum= 最后借助plot函数画出最小生成树的图形,如下所示 12 图五最小生成树生成图 六模型检验 可以通过对所画最小生成树图形的观察看是否有回路由图易知图形中无回路则通过修改最小生成树中任意边的连接并计算修改后的最小生成树的长度sum’与sum进行比较。 可得sum’>sum,则该模型所生成的最小生成树的长度最短即运用该模型进行自来水管道的连接所需要的自来水管长度最短。 七模型的优缺点分析 7.1优点: (1)在判断有效用户点时,将所有可能的无效用户限制在各个矩形区域内,缩小了查找的范围,使求解过程变得简洁,易操作。 (2)巧妙的利用了内外点角度关系,直接将求得的角度和与360°比较,可以清晰地看出用户点是否在障碍区域内,从而找出无效用户。 7.2缺点: (1)在判断有效用户点过程中,所使用的角度方法只适用于障碍区域为凸多边形的情况,具有一定的局限性。 (2)在计算各相邻线段交角以及由弧度制转化为角度制时,进行了四舍五入,故所得的角度和与360°无法严格相等,会产生一定的微小偏差。 13 (3)在用最小生成树求解最短路问题的模型中,路径都是用由有效用户点为端 点的线段连接的,然而在实际情况下,当加入障碍区顶点或者其他一些点后,可能会使路径更短。 八模型的推广与改进 为了得到能够遍历所有有效用户点的最短连通线路,在用最小生成树求得的最短路问题解的基础上,有必要对本模型作进一步改进,以使连通距离更短。 由于本题连接路径是用由有效用户点为端点的线段连接的,然而在实际情况中,可加入第三个点,使两有效用户点之间用通过第三点的折线连接,由此得到的水管道总长可能会更短。 8.1模型的第一步改进: 由于障碍区域的存在,可以使用以下方法: 在障碍区14个顶点中,任选其中一个加入96个有效
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自来水管的连接问题 自来 水管 连接 问题