高速公路问题
摘要
本题目是关于最优化求解的问题,根据不同地貌上建造成本的不同,找出A、B两地高速路的最低建造成本路线。在相同地貌中修建高速公路,建造费用与公路长度成正比的情况下,以确定最便宜的路线为目标建立了非线性规划模型来确定在各个地貌交界处的汇合点。求解过程利用MATLAB编程求解实现。分别从不考虑过定点,考虑过定点和过定点与高速路转弯处角度大与140度等约束条件,层次化求解。
关键词:建造费用最优化非线性规划MATLAB
1问题提出
A城和B城之间准备建一条高速公路,B城位于A城正南20公里和正东30公里交汇处,它们之间有东西走向连绵起伏的山脉。公路造价与地形特点有关,下图给出了整个地区的大致地貌情况,显示可分为三条沿东西方向的地形带。
你的任务是建立一个数学模型,在给定三种地形上每公里的建造费用的情况下,确定最便宜的路线。图中直线AB显然是路径最短的,但不一定最便宜。而路径ARSB过山地的路段最短,但是否是最好的路径呢?你怎样使你的模型适合于下面两个限制条件的情况呢?
1.当道路转弯是,角度至少为140。
2.道路必须通过一个已知地点(如P)。
2问题分析
在建设高速公路时,总是希望建造费用最小。如果要建造的起点、终点在同一地貌中,那么最佳路线则是两点间连接的线段,这样费用则最省。因此本问题是一个典型的最优化问题,以建造费用最小为目标,需要做出的决策则是确定在各个地貌交界处的汇合点。
3模型假设
1、假设在相同地貌中修建高速公路,建造费用与公路长度成正比;
2、假设在相同地貌中修建高速为直线。在理论上,可以使得建造费用最少,当然实际中一般达不到。
i x :在第i 个汇合点上的横坐标(以左下角为直角坐标原点)
i =1,2,3,4;
5x =30(指目的地B 点的横坐标);
i l :第i 段南北方向的长度(i =1,2,3,4,5);
i S :在第i 段上地所建公路的长度(i =1,2,3,4,5)。
由问题分析可知:
1S =2121x l +;
2S =22122)(x x l -+;
3S =23223)(x x l -+;
4S =24324
)(x x l -+; 5S =25425)(x x l -+;
1C :平原每公里的造价(单位:万元/公里)
; 2C :高地每公里的造价(单位:万元/公里)
; 3C :高山每公里的造价(单位:万元/公里)
。 4模型建立
在A 城与B 城之间建造一条高速公路的问题可以转化为下面的非线性规划模型。优化目标是在A 城与B 城之间建造高速公路的费用。
min 5544332211)(S C S C S C S C S C x f ++++=
)4,3,2,1(300..=≤≤i x t s i
5模型求解
这里采用MATLAB 编程求解。
MATLAB 程序见附录
模型求解时,分别取i C 如下。
平原每公里的造价
C=400万元/公里;
1
高地每公里的造价
C=800万元/公里;
2
高山每公里的造价
C=1200万元/公里。
3
6模型结果及分析
通过求解可知,为了使得建造费用最小。建造地点的选择宜采取下列结果。不考虑过p点x1=13,x2=15.1,x3=16.2,x4=28.3
建造总费用为2.2607亿元。
考虑过p点x1=11,x2=13.1,x3=14.2,x4=28.3
建造总费用为2.26145亿元。
考虑过p点与角度x1=11,x2=13.1,x3=15.2,x4=28.3
建造总费用为2.26739亿元。
7参考文献
[1] 司守奎,孙玺菁.数学建模算法与应用.北京:国防工业出版社.2011.
[2] 李桂成.计算方法.北京:电子工业出版社.2005.
[3] 赵静,但琦.数学建模与数学实验.北京:高等教育出版社.2008.
[4] 刘仁云.数学建模方法与数学实验.北京:中国水利水电出版社.2011.
8附件
不考虑过p点程序
clc;
C=[400,800,1200];
L=[4,4,4,4,4];
min=1000000000000000;
for x1=1:30
for x2=(x1+0.1):30
for x3=(x2+0.1):30
for x4=(x3+0.1):30
x5=30-x4
ss=C(1)*sqrt(L(1)^2+x1^2) + C(2)*sqrt(L(2)^2+(x2-x1)^2) + ...
C(3)*sqrt(L(3)^2+(x3-x2)^2) + ...
C(1)*sqrt(L(4)^2+(x4-x3)^2)+C(2)*sqrt(L(5)^2+(30-x4)^2);
if min>ss
min=ss;
a=[x1,x2,x3,x4,x5];
end
end
end
end
end
min
a
考虑过P点程序
clc;
C=[400,800,1200];
L=[4,4,4,4,4];
min=1000000000000000;
ax=12;
for x1=1:ax
for x2=(ax+0.1):30
for x3=(x2+0.1):30
for x4=(x3+0.1):30
x5=30-x4
ss=C(1)*sqrt(L(1)^2+x1^2) + C(2)*(sqrt(2^2+(ax-x1)^2)+sqrt(2^2+(x2-ax)^2)) + ... C(3)*sqrt(L(3)^2+(x3-x2)^2) + ...
C(1)*sqrt(L(4)^2+(x4-x3)^2)+C(2)*sqrt(L(5)^2+(30-x4)^2);
if min>ss
min=ss;
a=[x1,x2,x3,x4];
end
end
end
end
end
min
a
考虑角度与过P点程序
clc;
clear all;
C=[400,800,1200];
L=[4,4,4,4,4];
min=1000000000000000;
ax=12;
for x1=1:ax
for x2=(ax+0.1):30
if (atan(x1/4)+atan((x2-x1)/4))*180/pi>50&(atan(x1/4)+atan((x2-x1)/4))*180/pi<130 for x3=(x2+0.1):30
if
(atan((x2-x1)/4)+atan((x3-x2)/4))*180/pi>50&(atan((x2-x1)/4)+atan((x3-x2)/4))*180/pi <130
for x4=(x3+0.1):30
if
(atan((x4-x3)/4)+atan((x3-x2)/4))*180/pi>50&(atan((x4-x3)/4)+atan((x3-x2)/4))*180/pi <130
x5=30-x4
if
(atan((x4-x3)/4)+atan((x3-x2)/4))*180/pi>50&(atan((x4-x3)/4)+atan((30-x4)/4))*180/pi <130
ss=C(1)*sqrt(L(1)^2+x1^2) + C(2)*(sqrt(2^2+(ax-x1)^2)+sqrt(2^2+(x2-ax)^2)) + ...
C(3)*sqrt(L(3)^2+(x3-x2)^2) + ...
C(1)*sqrt(L(4)^2+(x4-x3)^2)+C(2)*sqrt(L(5)^2+(30-x4)^2); if min>ss
min=ss;
a=[x1,x2,x3,x4];
end
end
end
end
end
end
end
end
end
min
a