1994年A题逢山开路问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1994年A 题逢山开路问题
1.问题提出
要在一山区修建公路,首先测得一些地点的高程,数据见表26-1(平面区域0≤x ≤5600,0≤y ≤4800表中数据为坐标点的高程,单位:米).
(2000,4800)附近有一山口湖,其最高水位略高于1350米,雨季在山谷中形成一溪流,经调查知,雨量最大时溪流最高水面宽度W 与(溪流最深处的)x 坐标的关系可近似表示为
5)2
2400x (
)x (W 4
/3+-= (2400≤x ≤4000) 公路从山脚(0,800)处开始,经居民点(4000,2000)至矿区(2000,4000),已知路段工程成本及对路段坡度(上升高程与水平距离之比)的限制如表26-2
(1)试给出一种线路设计方案,包括原理、方法及比较精确的线路位置(含桥梁、隧道),并估算该方案的总成本.
(2)如果居民点改为3600≤x ≤4000,2000≤y ≤2400的居民区,公路只要经过居民区即可,那么你的方案有什么改变?
2.问题的简单分析
本问题保留了工程实际背景的一些基本特征,涉及到地貌环境等自然条件以及施工能力,费用系数等人为因素,这些在实际的工程设计上必须考虑的重要因素我们在解决本题时则须注意取舍,抓信要害,在用数学模型解题时,除了从数学角度上思考之外,适当的考虑有关实际因素,从总体上设计,这对于我们建立合理的数学模型提供了重要的依据,也会使我们得到的方案行之有效,本题在这方面表现得更加明显,
本问题要求提供在山区修建工路线设计方案,实际上,是要给出工程允许的条件下(指工程种类对坡度的限制)使方案总成本尽可能经济的设计,为此,我们应该注意到费用系数(工程成本),从中会发现,桥梁、隧道的成本远远高于一般公路,因此,就希望桥梁、隧道建设得尽量短一些,甚至让一般公路绕变,再考虑一般公路,由于工程成本以”元/米”为单位,因此,最小费用路径就是两点间的最短路径.这样,我们综合上面的分析,采取的主要步骤如下(读者可参照根据表26-1绘制的地形图如图26-1) (1)确定桥头和隧道口的若干候选点,使桥梁和隧道尽量短;
(2)寻求从山脚S 到桥西头B1,从桥东头B2到居民点R,从R 到隧道南口D1和从隧道北口D2到矿区M 四段路的最短路,也即最小费用路径;
(3)综合考虑建桥和隧道的费用,从候选路径中得到全局最小费用路线。
3.地形的三维图
为了对该山区有一个立体形象,我们做出它的三维图,读者可以轻易的辨别河谷及山脉走势
A={{370,470,550,600,……,150,250},{510,620,730,800, ……,350,320},……,{1350,1370,1390, ……,210,150} };
(注:数据未列全,读者可根据表1输入.)
ListPlot3D[A/400]
其中,各轴单位为400米.或许下面的图形更清楚些.
ListPlot3D[A/400,HiddenSurface→False,Boxed→False]
二、实验的内容和步骤
1.模型假设
由于本问题的复杂性,故将给出一系列假设以简化实际操作中遇到的麻烦,读者不难发现它们是合理的.
(1)地貌假设题目提供的数据是精确和充分的,所给地区地形是连续的,不存在断层和悬崖.
(2)路线假设
①只考虑公路为一几何线而不计其宽度,忽略横向坡度对宽度的限制;
②设计路线时,不考虑路线急转变角度、缓急的限制.
(3)桥梁假设桥梁长度大于溪流水面最宽时的宽度且高于水面.
(4)环境假设
①该地区工程地质条件都满足工程建设的要求,不存在对工程建设有害因素,如地震带、溶岩地区等;
②不考虑气候条件等的影响;
③该地区内无原公路可利用.
2.插值拟合
从表2可以看了它提供了相当多的数据,尽管如此,由于横、纵坐标是以400米为单位给出海拨高度,这对于找寻最小费用路线是粗疏的,所以需要对其补充数据,根据地貌假设,采取较为熟悉的分段线性插值值进行拟合.
Do[do[f[400.j,400.i]=A[[i+1,j+1]],{i,1,12}],{j,o,14}];\
Do[f[0.,400.i]=A[[i+1,1]],{i,o,12}];\
Do[f[400.i,0.]=A[[1,i+1]],{i,0,14}];
fun[{x_,y_}]:=Sum[f[1.x,400.j] 1[j,y],{j,o,12}]/;Mod[x,400]==0;\
1[j_,y_]:=(y-400.(j-1))/(400.j-400.(j-1))/;400(j-1)<=y<=400j&&j! =0;\
1[j_,y_]:=(y-400.(j+1))/(400.j-400.(j+1))/;400j<=y<=400(j+1)&&j! =12;\
1[j_,y_]:=0/;! (400(j-1)<=y<=400(j+1))&&0<=y<=4800;\
fun[{x_,y_}]:=Sum[f[400.i,1.y]1[i,x],{i,0,14}]/;Mod[y,400]==0;\
1[I_,x_]:=(x-400.(i-1))/(400.i-400.(i-1))/;400(i-1)<=x<=400i&&i! =0;\
1[I_,x_]:=(x-400.(i+1))/(400.i-400.(i+1))/;400 i<=x<=400(i+1)&&i! =14;\
1[I_,x_]:=0/;! (400(i-1)<=x<=400(i+1))&&0<=x<=5600;\
fun[{x_,y_}]:=Sum[fun{400.i,1.y}]1[I,x],{i,0.14}]
以上程序首先利用插值基函数l[j,y]对横坐标具有400的倍数特征进行拟合,给出高程.类似的,又给出了纵坐标具有400的倍数特征的点的高程.最后,做出的函数fun[x,y]将可以给出任意点的高程.我们可以画出它的图形,请读者与前面的作图比较.
Plot3D[fun[x,y],{x,0,5600},{y,0,4800}]
3.桥头候选点的确定
首先要对山谷地形有所了解,三维图中已经提供了一些信息,再来看看密度图,或许能有所帮助.
ListDensityPlot[A]
对于密度图,颜色越深越低洼,颜色越浅海拨越高.综合考虑,可将谷底近似看做一条直线,谷的两侧也是基本对称的.由此可以给出形成溪流时两岸的方程. 设谷底方程为
x+y=4800 (2400≤x ≤4000).
考虑到韪给出的雨量最大时溪流水面宽度W 与(溪流最深处的)x 坐标的近似关系式 W(x)=)4000x 2400(5)2
2400x (
4
/3≤≤+- 为单调增函数(为什么?),故两岸方程图象呈喇叭形(如图),下面求西岸方程.在西岸任取一点(a,b),则过此点且与x+y=4800垂直的方程为 x-y=a-b
它与x+y=4800的交点横坐标是 c=(a-b+4800)/2
于是,过点(a,b)的河宽为W(c).参考图26-2.可知,点(a,b+2
2
W( c))满足方程x+y=4800,即 a+ b+
2
2
W( c)=4800 由(a,b)是西岸任意点,故(26-1)式即是西岸方程,将其整理可得
5)4
y x (
)y x 4800(24
/3+-=-- 同理,东岸方程为 5)4
y x (
)4800y x (24
/3+-=-+ 为了使桥的长度较短,所以建桥最好使桥正跨在两岸的界线上,由于桥梁对坡度值限制为0,即要求桥的两端海拨相等.这样需考虑两端的竖坐标,另外,溪流宽度W(x)是关于x 的增函数(为什么?),因此桥址选在上游,比如横坐标在区间(2400,2800)内,这里采取对横坐标每10米为一段逐点搜录的办法,使所选桥址点满足方程(26-2)、(26-3),且竖坐标相差不大. Module[{B1,B2,p,q,u},\
B1=Table[{2400+10 I,FindRoot[(2400-10 i-y) Sqrt[2]==(2400+10 i-y)/4^(.75)+5,{y,2300-10 i}][[1,2]]},{i,1,40}];\
B2=Table[{2400+10 I,FindRoot[(-2400+10 I+y)Sqrt[2]==((2400+10 i -Y)/4^(.75)+5,{y,2300-10 i}][[1,2]]},{I,1,40}];\
Do[p[k]=fun[{B1[[k,1]],B1[[k,2]]}];q[k]=fun[{B2[[k,1]],B2[[k,2]]};u[k]={},{d,1,40}];\ Do[Do[If[Abs[p[i]-q[j]]<=.2,u[i]=Union[{B1[[i]],B2[[j]]}.u[i]],{j,1,40}];\ Print[u[i]],\ {i,1,14}]\]
它首先选取横坐标在(2400,2800)内西、东两岸上的点分别存入B1、B2,求得竖坐标后,以东、西两点海拨这差不大于0.2米作为衡量可建桥的标准.将选好的点存在u[i]再以表的形式显示..注意这并不严格满足坡度对桥梁的限制,但若桥长50米,其坡度仅0.004,况且实际施工时可以在附近勘探选取符合条件的点或进行技术处理,我们这里仅是大约地点.需要强调,建桥必须满足桥梁假设. 还可以计算桥的成本,只要键入桥两头横、纵坐标即可. CostBride[{x1_,y1_},{x2_,y2_}]:=\
2000Sqrt[(x1-x2)^2+(y1-y2)^2+(fun[{x1,y1}]-fun[{x2,y2}])^2]
需要指出,桥成本最低的点并不是我们确定桥址的依据,应综合几个候选点,求得总成本最低的点作为桥址. 4.隧道口的位置
由于隧道的成本很高,且长度超过300米后增加一倍,因此考虑使隧道长小于300米.这需要让公路爬升到一定高度,那么哪座山峰满足要求呢?可利用下面的函数画出x 为任意值的横断面图进行比较.. Mountain[x_]:=Plot[fun[{x,y}].{y,0,4800}]
事实上,利用表26-1我们可以确定在x=4400得的山峰上挖隧道,因为它的南北两边地势下隆都很快.如图26-3,这是x=4400处横截面图(部分),若隧道长300米且为水平时,我们容易求出它的海拨 h=1500-)m (1266)
600
650
1(400650
300=+⨯⨯, 从而隧道口选在横标为4400、海拨高于1266米处,通过平面解析几何容易确定几组候点. 5.最短路的确定
我们已经确定了桥梁和隧道口的几组候选方案,下面就需找出简单分析里提到的四条最短路径,亦即最少费用路线.这里采用图论中求最短路的标号法.图表示一个图G=(V ,E),V 是顶点V 1,V 2…,V 8的集合,E 是连接顶点的弧的集合,弧旁的数字不妨看作两顶点间的距离(用L ij 表示V i 到V j 的距离;对于不相邻两顶点的距离如L 18,记为∞在编程中可以记为一个极其大的数).标号法的基本思想是:从起点V 1开始,逐步地寻找到达各点的最短路,在每一步都对每一个顶点计录一个数,称为该点标号,它表示V 1到该点的最短距离的上界(称T 标号),或者就是V 1到该点的最短距离(称P 标号).
它的具体算法是:①给始点V 1标上P 标号d(V 1)=0,给其它各点标上T 标号d(V j )=L 1j (j=2,3,…,N);②在所有T 标号中取最小者,譬如说d(V j0)=L 1j0,则把点V j0的T 标号改为P 标号,并重新计算具有T 标号的其它各点的T 标号:选点V j 的T 标号d(V j )与d(V j0)+L j0j 中较小者作为V j 的新的T 标号;③类似②的方法,在新取得的T 标号中确定P 标号.如此直到V i (i 是1到N 的某个自然数)具有P 标号.就求得了V 1到V i 的最短距离,进而可以确定V 1到V i 的最短路. 表26-3
1我们通过表26-3易确定V 1到其它各点的最短路,如V 1到V 8的最短路是V 1→V 3→V 4→V 8.
将标号法用于本题求最短路时,必须确定图的顶点集V 和弧集E.这可以在原网格的基础上构造,如将400×400加密为100×100,如图26-5.新格点构成图的顶点集V,图的弧集E 包括横、纵轴方向和对角线方向的路径,这时相邻两顶点V i 、V j 间的距离定义为(且考虑坡度限制)
⎪⎪⎩
⎪
⎪⎨⎧≤∆+∆∆∞≤∆+∆∆∆+∆+∆=125.00])y ()x [(|z |,125.00])y ()x [(|z |,])z ()y ()x [(d 2/1222/1222
/1222ij
顶点集V 和弧集E 一经确定,就可以直接用标号法求图上任一点到其它各点的最短路了.读者可以应用C 语
言或其它熟悉语言进行编程.
6.居民区的处理
在居民区确定一点作为居民点,将问题转化为前面已解决的居民点问题。