西工大数模B题 公园内道路设计问题.docx
《西工大数模B题 公园内道路设计问题.docx》由会员分享,可在线阅读,更多相关《西工大数模B题 公园内道路设计问题.docx(31页珍藏版)》请在冰豆网上搜索。
西工大数模B题公园内道路设计问题
摘要
最短路程问题是现实生活中常见问题,在商业利润估算、生产生活、运输路线选择等方面都有重要意义。
本题的实际情景为公园内部建设道路,在保证公园边缘8个入口之间最短路径不大于两点之间距离1.4倍的前提条件下,使内部道路总长度最短。
对于问题一,考虑到最终结果只算公园内部的道路长度总和,所以本着“能用边缘就用边缘,不能则选用最短路径“的原则,第一步先算出任意两点间距离,利用
算法算出最短路径;第二步取任意一点,利用最小生成树的办法,依次取点;最后利用1.4倍的约束条件得到最短路程。
公式描述如下:
最终算出结果为393米,示意图请参见正文。
对于问题二,由于没有限定道路结点,所以根据1.4倍的约束条件联想到利用椭圆来进一步缩小取点范围,但这样便无法短时间内找到准确值,所以只能给出模型并估测出期望结果。
所做的模型为重叠面积概率模型,第一步以任意两点为焦点,以1.4倍的焦距为长轴长作椭圆,筛选有效覆盖面积的椭圆,得到覆盖程度不同的区域;第二步将覆盖程度视为符合要求的点落入的概率,计算出最大覆盖程度区域的坐标范围;第三步在区域中划分精度并做出程序计算区域中点到入口点的最短距离,比较后得出最佳点。
根据以上算法得到预期结果为358米,示意图请参见正文。
对于问题三,在问题二上增加一块不可利用的矩形区域,可继续借助问题二的模型,但要重新确定交叉点的范围。
此问题中,由于矩形湖在公园右边,承接问题二得知,该湖只影响右边的交叉点。
所以左边的交叉点位置不必改变,只需确定右边的交叉点即可。
并在此基础上利用问题二的模型继续求解。
最终解得的结果为365米。
目录
1.问题重述1
1.1问题背景1
1.2问题提出2
2基本假设3
3.基本符号3
4模型建立3
4.1问题13
4.1.1问题分析3
4.1.2模型建立求解4
4.2问题28
4.2.1问题分析8
4.2.2模型建立求解8
4.3问题312
4.3.1问题分析12
4.3.2模型建立求解12
5.模型评价和推广16
5.1问题1模型16
5.2问题2模型16
5.3问题3模型16
6.参考文献16
7.附录17
1.问题重述
1.1问题背景
西安某大学计划建一个形状为矩形或其他不规则图形的公园,不仅为了美化校园环境,也是想为其学生提供更的生活条件。
公园计划有若干个入口,现在你需要建立一个模型去设计道路让任意两个入口相连(可以利用公园四周的边,即默认矩形的四条边上存在已经建好的道路,此道路不计入道路总长),使总的道路长度和最小,前提要求是任意的两个入口之间的最短道路长不大于两点连线的1.4倍。
主要设计对象可假设为如图所示的矩形公园,其相关数据为:
长200米,宽100米,1至8各入口的坐标分别为:
P1(20,0),P2(50,0),P3(160,0),P4(200,50),
P5(120,100),P6(35,100),P7(10,100),P8(0,25)。
1.2问题提出
问题一:
假定公园内确定要使用4个道路交叉点为:
A(50,75),B(40,40),C(120,40),D(115,70)。
问如何设计道路可使公园内道路的总路程最短。
建立模型并给出算法。
画出道路设计,计算新修路的总路程。
问题二:
现在公园内可以任意修建道路,如何在满足条件下使总路程最少。
建立模型并给出算法。
给出道路交叉点的坐标,画出道路设计,计算新修路的总路程。
问题三:
若公园内有一条矩形的湖,新修的道路不能通过,但可以到达湖四周的边。
重复完成问题二 的任务。
其中矩形的湖为R1(140,70),R2(140,45),R3=(165,45),R4=(165,70)。
注:
以上问题中都要求公园内新修的道路与四周的连接只能与8个路口相通,而不能连到四周的其它点。
2基本假设
1.计算任意两入口点之间的道路总长度与两入口连线距离关系时,将矩形边的长度算在其中。
2.问题三中小矩形的边长算入道路总长度。
3.基本符号
Vi
任一入口点
s.tPiPj
点Pi、Pj之间最短路程
点V0、V1间的弧
d(V0,V1)
弧V0V1的权值
S
道路长度总和(不含矩形边)
V(i,j)
点i,j之间的路径
4模型建立
4.1问题1
4.1.1问题分析
该问题给出了公园内已知的四个交叉点A(50,75),B(40,40),C(120,40),D(115,70)。
在1.任意的两个入口之间的最短道路长不大于两点连线的1.4倍,2.道路会经过四个交叉点这两个前提下。
我们考虑的问题是:
如何使公园内道路的总长度和最小。
4.1.2模型建立求解
由题所给出的条件可以看出,这与最短路问题联系密切,于是考虑用几何知识和Dijkstra算法Floyd算法来建立问题的模型。
由题将八个入口及四个交叉点依次设为:
1,2,3,4,5,6,7,8,9,10,11,12。
方法:
任取边界上一入口点Vi,以此点为起始点,由上面第二步所得的数据分别比较Vi与其他点的距离,得出Vi的最短路径Vij,再以j点为起始点用同样方法比较出最短路径Vjk.同理依次求的最短路径。
再验证是否满足两个入口之间的最短道路(含矩形边)长不大于两点连线的1.4倍,若不满足,则再通过比较后添加最优路径。
第一步:
利用Matlab软件计算出任意两点间的距离。
第二步:
利用Floyd算法及Lingo软件求解出任意两点间的最短路径。
代码见附录1。
距离见附录2。
第三步:
利用Dijkstra算法求解最优路径。
引入对Dijkstra算法的描述:
1.初始时令S={V0},T={其余顶点},T中顶点对应的距离值,若存在,d(V0,Vi)为弧上的权值,若不存在,d(V0,Vi)为∝
2.从T中选取一个其距离值为最小的顶点W且不在S中,加入S
3.对T中顶点的距离值进行修改:
若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值,重复上述步骤2、3,直到S中包含所有顶点,即S=T为止。
具体求解描述:
<1>
首先以1点为起始点,比较2,8两点和1点构成的路径长短可知最短路径为(1,2)路。
再以2点为起始点,比较3,8,10,11这四个点与2点所构成路径长短可知最短了路径为(2,10)路。
以此类推,可初步得出最短路径为:
1-2-10-9-6-7-8-1和6-5-12-11-3-4两部分组成。
<2>
验证是否满足两个入口之间的最短道路长不大于两点连线的1.4倍这一条件。
同时考虑公园边界道路不算入道路总长,故若使道路总长最短,则在满足条件的情况下尽量利用公园边界。
具体方法:
任取八个入口中的一个,由于在同一边的点无需比较,故只比较其与不在同一边的点是否满足最短道路长不大于两点连线的1.4倍,如不满足,增添最优道路。
若无小于1.4|ij|的路径,增添新路。
<1>从8点开始,分别比较(8,7),(8,6),(8.5),(8,4)计算可得皆有满足条件路径,无需增添。
<2>同理计算可得4,6,7点和其他非同边点皆有满足条件路径。
而5点与1,2两点没有满足条件的路径,需增添道路。
由于1,2,3点已经在之前计算过,不必重复计算。
<3>考虑5点和1,2两点的问题。
利用枚举法,列举出5-9,5-10,5-2,12-9,12-10,12-2,11-10,11-2这几种假设路线。
再利用最短路径(不含矩形边)和最短道路(含矩形边)长不大于两点连线的1.4倍这两个条件进行筛选,最后得出增添5-9为最优路径。
则最短路径如图所示,
根据公式
得最短路长S=
=32+41+36+29+74+30+30+57+64=393米
4.2问题2
4.2.1问题分析
在本问题中公园内可以任意修建道路,故若使总路程最短,则公园内的交叉点选取应遵循最优原则。
同时满足1.任意的两个入口之间的最短道路长不大于两点连线的1.4倍,2.公园内新修的道路长最短这个前提条件。
同时应充分利用1.4这个数字,进行数学建模。
4.2.2模型建立求解
由题目所给条件,可分析此问可以利用几何知识和概率的方法进行建模和求解。
第一步:
分析任意的两个入口之间的最短道路长不大于两点连线的1.4倍这个条件,可以联想利用几何中椭圆的定义,以任意两点作为椭圆焦点(其直线距离为焦距),同时以1.4为椭圆长轴长,利用Matlab绘制椭圆。
则交叉点只可以在椭圆内。
而椭圆间的交叉公共区域就是道路交叉点的存在范围。
椭圆参数见附录3
引入椭圆定义:
平面上到两定的的距离之和为常值的点的轨迹。
第二步:
通过对几何图形的分析和和椭圆覆盖比例的对比,筛选出一些不必考虑的椭圆,进一步缩小重叠区域的范围,以此得出交叉点的区域范围和个数。
第三步:
将交叉点区域确定在一定范围后,利用C语言编程软件计算出区域内使路径最短的交叉点,则此2个交叉点为所求最优路径交叉点,同时可得经过这两个交叉点的最短路径。
具体求解描述:
<1>从1点开始,将1点看做椭圆的1个焦点,分别以2,3,4,5,6,7,8点为椭圆另一个焦点,则1点与其他点的直线距离为焦距2c,同时在每个椭圆中长轴2a=1.4×2c。
同理再依次以其他点为固定焦点,画出椭圆,则总共可画出28个。
代码见附录4.
<2>再通过对八个入口坐标的分析,筛去那些可以通过走公园外边的点,以及在同一边上的两点,这些点构成的椭圆可以略去,不必计入考虑范围。
故筛选得需保留的椭圆交点坐标为:
1-6,1-8,2-5,2-6,2-7,3-4,3-5,3-6,3-7,4-5.因此图像可简化为由十个椭圆构成的图,同时对比分析其中重叠区域最密集的部分,则可确定出有两个交叉点及其范围区间,设定两交叉点分别为9,10点。
<3>经过分析推测,可以得出两种优化方案,如图所示,分别对两种情况利用C程序进行对比论证。
H形算法:
此时1-8,3-4这两组点已为定值,则计算V15,V16,V25,V26,V27,V35,V36,V37这些点之间的路径长。
其中V36有3-10-5-6,3-10-9-6,3-2-9-6这三种路径,V37有3-10-5-6-7,3-10-9-6-7,3-2-9-6-7这三种路径。
利用公式:
,且满足两个入口之间的最短道路长不大于两点连线的1.4倍这个条件。
编写程序,将已固定的区域范围划分为无数个极微小的点,使交叉点在这些点上依次运算一遍,最后由程序比较获得最短路径长及此时的两交叉点近似坐标。
(代码见附录5)
(1)双Y形算法:
此时1-8组点已为定值,则计算V25,V26,V35,V36,V37这些点之间的路径长。
其中V36有3-10-5-6,3-2-9-6两种路径。
套用H形的方法编写程序后进行运算求解出最短路径及此时的交叉点坐标。
(代码见附录6)
<4>结果对比:
H形可获得的最优路径的最短路程长为371米,交叉点坐标为(65,58),(107,65)。
双Y形可获得的最优路径的最短路程为358米,交叉点坐标为(60,78),(173,44)。
对比后可得双Y形较H形更优,则在建立模型下最优路径为双Y形路径,最短路程长为358米。
4.3问题3
4.3.1问题分析
该问题在是建立在问题二的基础上加入了一个矩形湖(如图所示),湖的四个点坐标分别R1(140,70),R2(140,45),R3(165,45),R4(165,70),新建路径不能直接穿过。
验证问题二的路径是否穿过矩形湖,不穿过则问题得解,否则应分两种情况考虑:
(1)对于问题二中所求得的交叉点向矩形湖引垂线,并连接最近入口形成新的路径;
(2)重新确定新的范围,利用问题二的方法确定新的交叉点和路径;
最后比较
(1)、
(2)两种情况,得出最优解。
4.3.2模型建立求解
此模型与问题二的模型相似,主要步骤如下:
(1):
验证问题二的路径是否满足问题三,若不满足,确定新路径(分两种情况);
(2):
分别按照
(1)
(2)两种情况建立模型确定新路径,具体方法见下文;
(3):
比较验证新的路径是否满足题目要求(公园任意两个入口之间的最短道路长不大于两点连线的1.4倍)以及是否是最优解(总的道路长度是否最短);
(4):
根据比较得出正确答案。
模型建立过程的具体流程图
具体求解描述:
说明:
由于湖在公园靠右部分,只影响右边那个交叉点,故左半部分保持不动,只考虑右半部分。
模型一
问题二得出的交点连接公园入口点3,4,5,如图所示:
其中A1(148,70),B1(165,52),Z(173,43.5)
道路设计图为
总距离S=
=409(米)
模型二:
利用椭圆,分别以3,4,5入口为焦点,1.4倍距离为长轴分别作椭圆,以5入口向湖引切线,得到A,B,C三个区域,如图所示
若交叉点在A区域,则作一个包含区域A的矩形(X为140—160,Y为—35)并将该矩形分割成很小的网格正方形(间距为0.1),计算在区域A内网格的点分别到入口3,4,5的距离并求和,其中和最小的点即为交叉点。
这可以通过编写成序来实现,并能求出最短路径及交叉点的近似坐标。
(具体程序见附录7)
交叉点在B、C区域内的方法同上。
经过程序运行后,得出交叉点坐标为J(181.1,48),交叉点到3,4,5入口的路径和为153米,如图所示
其中W(155,70),X=(165,62),J(181,48)
道路设计图如图所示:
总距离S==365.00(米)
分析比较,模型二的设计更为合理。
新修路的总路程为:
S=
=365(米)
5.模型评价和推广
5.1问题1模型
对于问题1所建立的模型,在利用Dijkstra算法求解最优路径时,可能会遇到在求解的过程中在某一点会存在多支符合条件的分支路径是,这时需要进行主观分析判断,可能会存在不严谨不精确之处,造成最后结果会出现误差。
只可利用灵活多样的方式求的近似最优方案。
该模型可以优化为从不同的点出发,多次运用最小生成树法,来减小主观性带来的不严谨性,从而推广应用到运输生产领域。
5.2问题2模型
对于问题二建立的模型,存在几处不足和缺点:
(1)在利用椭圆进行几何建模时,存在缺漏,因为利用椭圆时,等于默认构成椭圆的两点之间的只存在一个点或只有一条直线。
这里忽略了两点间存在一个以上点的情况,可能会存在不严谨,不合理之处,造成最后结果会出现误差。
故会存在一定的局限性。
(2)由椭圆间的重叠面积概率进行信息获取和确定交叉点范围时,由于数据的复杂程度过高,在确定区域范围时难免会存在误差和遗漏的可能,因此在确定范围并利用C语言程序进行模拟时会存在误差。
(3)在利用C语言程序对已知区域进行微小量划分,并使交叉点在区域内进行穷举运算时,会存在固有的精度误差,结果导致最终的最短路程长和交叉点坐标出现误差,用此方法得出准确无误差值是不现实的,因此用近似估计法,尽可能的将变量精度划分细化,期望得到近似最优方案。
5.3问题3模型
问题三直接利用问题二的模型是假定小矩形的边长可以直接利用,这样简化了问题,但算法上与问题二基本相同,所以没有多少创新。
该问题还可以考虑点和边都避开小矩形而获得最短路程的方案,使得该问题更具有现实意义和研究意义。
6.参考文献
1.《数学建模基础》,北京工业大学出版社,薛毅著;
2.《优化技术与Matlab优化工具箱》,机械工业出版社,赵继俊著;
3.《控制系统Matlab计算与仿真》,国防工业出版社,黄忠霖、黄京著;
4.《概率统计教程》,清华大学出版社,姚孟臣著;
7.附录
附录1Lingo求各点最小距离代码
附录2各点间的最小距离
附录3椭圆参数及求参代码
附录4Matlab绘制所有椭圆代码
附录5H型求交点代码
附录6双Y型求交点代码
附录7问题三代码
附录1
sets:
nodes/1..12/;
arcs(nodes,nodes):
d;
endsets
data:
d=030140187141101100328145108118
3001101581221011085675418196
1401100641081601801621331265783
187158640941721962021521608187
14112210894085110142741006030
1011011601728502583296010485
100108180196110250764767125109
3256162202142837607143121123
8175133152742947710367865
45411261601006067433608080
108815781601041251217880030
11896838730851091236580300;
enddata
calc:
@for(nodes(k):
@for(nodes(k1):
@for(nodes(k2):
@for(nodes(k3):
@for(nodes(k4):
@for(arcs(i,j):
d(i,j)=@smin(d(i,j),d(i,k)+d(j,k),d(i,k)+d(k,k1)+d(j,k1),d(i,k)+d(k,k1)+d(k1,k2)+d(j,k2),d(i,k)+d(k,k1)+d(k1,k2)+d(k2,k3)+d(j,k3),
d(i,k)+d(k,k1)+d(k1,k2)+d(k2,k3)+d(k3,k4)+d(j,k4))))))));
endcalc
附录2
附录3
x=[20,50,160,200,120,35,10,0];
y=[0,0,0,50,100,100,100,25];
a=zeros(8,8);
b=zeros(8,8);
x0=zeros(8,8);
y0=zeros(8,8);
th=zeros(8,8);
fori=1:
8,
forj=1:
i-1;
x0(i,j)=0.5*(x(i)+x(j));
y0(i,j)=0.5*(y(i)+y(j));
d(i,j)=sqrt((x(i)-x(j))*(x(i)-x(j))+(y(i)-y(j))*(y(i)-y(j)));
a(i,j)=1.4*d(i,j);
b(i,j)=0.5*(sqrt(a(i,j)*a(i,j)-d(i,j)*d(i,j)));
th(i,j)=atan((y(i)-y(j))/(x(i)-x(j)));
end
end
>>x0(x的中点坐标)
x0=
00000000
35.00000000000
90.0000105.0000000000
110.0000125.0000180.000000000
70.000085.0000140.0000160.00000000
27.500042.500097.5000117.500077.5000000
15.000030.000085.0000105.000065.000022.500000
10.000025.000080.0000100.000060.000017.50005.00000
>>y0(y的中点坐标)
y0=
00000000
00000000
00000000
25.000025.000025.000000000
50.000050.000050.000075.00000000
50.000050.000050.000075.0000100.0000000
50.000050.000050.000075.0000100.0000100.000000
12.500012.500012.500037.500062.500062.500062.50000
>>th(倾斜角)
th=
00000000
00000000
00000000
0.27090.32180.896100000
0.78540.9601-1.1903-0.55860000
1.4219-1.4219-0.6747-0.29420000
-1.4711-1.1903-0.5880-0.25730000
-0.8961-0.4636-0.15500.12440.55861.13421.43820
>>a(长半轴)
a=
00000000
42.00000000000
196.0000154.0000000000
261.5416221.359489.643700000
197.9899170.8918150.7846132.07570000
141.5662141.5662224.1093241.3732119.0000000
140.6983150.7846252.3886275.0564154.000035.000000
44.821978.2624226.7179282.1790198.1136115.8706105.92920
>>b(短半轴)
b=
00000000
14.69690000000
68.585753.8888000000
91.520577.459731.368800000
69.282059.799752.763646.21690000
49.537949.537978.421984.463041.6413000
49.234152.763688.317696.249753.888812.247400
15.684427.386179.334798.742169.325340.546337.06750
>>
>>d(两焦点距离)
d=
0000000
30.0000000000
140.0000110.000000000
186.8154158.113964.03120000
141.4214122.0656107.703394.3398000
101.1187101.1187160.0781172.409485.000000
100.4988107.7033180.2776196.4688110.000025.00000
32.0