数学建模最佳旅游路线的选择模型.docx
《数学建模最佳旅游路线的选择模型.docx》由会员分享,可在线阅读,更多相关《数学建模最佳旅游路线的选择模型.docx(15页珍藏版)》请在冰豆网上搜索。
数学建模最佳旅游路线的选择模型
2012高教社杯全国大学生数学建模竞赛
承诺书
我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们将受到严肃处理。
我们参赛选择的题号是(从A/B/C/D中选择一项填写):
B
我们的参赛报名号为(如果赛区设置报名号的话):
12
所属学校(请填写完整的全名):
鲁东大学
参赛队员(打印并签名):
1.张亭
2.任雪雪
3.卜范花
指导教师或指导教师组负责人(打印并签名):
日期:
2010年8月2日
赛区评阅编号(由赛区组委会评阅前进行编号):
2010高教社杯全国大学生数学建模竞赛
编号专用页
赛区评阅编号(由赛区组委会评阅前进行编号):
赛区评阅记录(可供赛区评阅时使用):
评
阅
人
评
分
备
注
全国统一编号(由赛区组委会送交全国前编号):
全国评阅编号(由全国组委会评阅前进行编号):
最佳旅游路线的选择模型
摘要:
本文研究的是最佳旅游路线的选择问题,此问题属于旅行商问题,我们建立了路径最短,花费最少,省钱、省时、方便三个模型。
根据周先生的不同需求,我们用改良圈算法和多目标规划解决了该问题,之后我们结合实际情况对三个模型进行科学地误差分析,并分析了该算法的复杂性。
针对问题一,题目中给出了100个城市的经纬度,要求我们为周先生设计一条最短的旅行路线,即从驻地出发,经过每个城市恰好一次,再回到驻点。
由此可知,此问题属于旅行商问题。
首先,我们按附件所给各城市的顺序编号
,以两城市间的直线距离代替实际距离。
然后,我们运用改良圈算法求解旅行商问题,以任意两点之间的最短距离矩阵为权重,利用
邻接矩阵构造无向图
,据题意不知周先生的起始地点,因此利用Matlab软件重复进行100次改良圈算法即以每一个城市为出发点,从100个Hamilton圈得到了最优圈
,即最短的旅行路线。
其最短的旅游线路长度为
公里。
针对问题二,该问题的目的是为周先生设计最经济的旅行方案,我们同样运用问题一所建的改良圈算法模型,将模型一中的权值矩阵“最短距离”换为“最少花费”,建立模型二。
本题规定周先生旅游的起始城市为第一个城市,同样利用费用矩阵
构造无向图
,再利用Matlab软件进行
次改良圈算法,就会得到最优圈
,即花费最少的旅行路线,其最少花费为
元。
针对问题三,这里根据周游退休后以享受为主,在模型一、模型二结果的基础上,我们设定原则:
优先考虑方便,当两地乘坐飞机所用的费用比乘坐豪华大巴所用费用高不出某个范围时,则乘坐飞机。
此处通过动态规划来实现此方案,在最经济、最短的路线的基础之上,通过改换乘坐方式,使最终的花费偏离出最小花费的值在我们的允许范围内,从而达到了省钱、省时又方便的目的。
最终得到满足周游先生自身需要的旅行方案。
之后我们结合实际情况对三个模型进行科学误差分析,并分析了所用算法的复杂性,同时对我们解决旅行商所采用的算法进行了评价,这使我们对旅行商问题有了更深一步的理解。
关键词:
旅行商问题;改良圈算法;动态规划;误差分析;
1问题重述
周先生退休后想到各地旅游,计划到100个城市旅游。
需要我们按下面要求制定出行方案。
(1)按地理位置(经纬度)设计最短路旅行方案。
数据见Matlab的mat数据文件(文件名为第2题B.mat),其中
表示对应点的经度,
表示对应点的纬度。
(2)假设任意两个城市之间都有豪华大巴和飞机航线,乘坐飞机的价格是两点间距离1.5倍(单位:
元),豪华大巴的价格是分段的,在500公里之内是距离的2倍,超过500公里且在1000公里之内的是距离的1.4倍,超过1000公里的是距离的1.1倍,如果2010年5月1日零时周先生从第一个城市出发,每个城市停留24小时,可选择航空、豪华大巴,设计最经济的旅行方案。
(3)假设豪华大巴和飞机都可以随到随走,飞机的速度是1000公里/小时,豪华大巴的速度是100公里/小时,要综合考虑省钱、省时又方便,设定你的评价准则,建立数学模型,修订你的方案。
(4)对算法作复杂性、可行性及误差分析。
(5)关于旅行商问题提出对所采用的算法的理解及评价。
2条件假设与符号约定
2.1条件假设
(1)假设在旅途中的车速一定,且不考虑突发事件干扰飞机或豪华大巴的行程;
(2)假设本题所涉及的城市中,每两个城市之间都有直达的航班和豪华大巴;
(3)假设两城市之间距离用城市之间的直线距离来表示;
(4)假设不考虑买不上票和机车晚点等情况;
(5)假设不考虑机票和豪华大巴打折情况。
2.2符号约定
:
表示城市的个数;
:
两个城市
之间的距离,
;
:
初始圈;
,
;
:
任意两点之间所花费的最小费用构成的距阵;
3问题分析
3.1问题一
题目中给出了100个城市的经纬度,要求我们为周游设计一条最短的旅行路线,即从驻地出发,经过每个城市恰好一次。
由此可知,此问题是属于旅行商问题,我们可以考虑运用改良圈算法求解此问题。
按附件所给各城市的顺序编号
,用两城市间的直线距离代表两城市的距离,我们可以考虑以任意两点之间的最短距离为权重,利用
构造无向图
,考虑到没有给出起点,如果以某一城市为出发点,利用改良圈算法得到的最优圈未必是最优解,所以我们将利用Matlab软件编程重复进行
次改良圈算法,将会得到最优圈
,从而保证最优解,即最短的旅行路线。
用终点返回起点构成的闭合回路最为最短路线的长度。
这样就会为周游先生设计一条最短的旅游线路。
3.2问题二
本问题的目标是给周游先生设计最经济的旅行方案,我们考虑可以同样运用问题一所建的模型,将模型一中的权值“最短距离”换为“最少花费”,建立模型二。
本题规定了周游先生旅游的起始城市为第一个城市,因此同样利用
构造无向图
,再利用Matlab软件进行
次改良圈算法,就会得到最优圈
,即花费最少的旅行路线。
用终点返回起点构成的闭合回路作为花费最少的旅游路线。
这样就会为周游先生设计一条最经济的旅游线路。
3.3问题三
针对问题三,这里根据周游退休后以享受为主,在模型一、模型二结果的基础上,我们可以考虑设定原则:
优先考虑方便,当两地乘坐飞机所用的费用比乘坐豪华大巴所用费高不出某个范围时,则乘坐飞机。
考虑通过动态规划来实现此方案,在最经济、最短的路线的基础之上,通过改换乘坐方式,若最终的花费偏离出最小花费在我们的允许范围内,则接受此方案,达到了省钱、省时又方便的目的。
最终得到满足周游先生自身需要的旅行方案。
之后我们会结合实际情况对三个模型进行科学误差分析,并分析所用算法的复杂性,同时对我们解决旅行商问题所采用的算法进行评价,这使我们对旅行商问题有更深一步的理解。
4模型建立及求解
4.1问题一
4.1.1旅行商问题的基本理论
某旅行商欲往n个城市推销货物,从某个城市出发,沿途经过各个城市一次后返回出发城市,要确定一条行走的路线,使得总路径最短。
这个问题称为旅行商问题(TSP)[1]。
用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的Hamilton圈
。
称这种圈为最优圈。
与最短路问题及连线问题相反,尽管目前还没有求解旅行商问题的有效算法。
但是却有一个可行的办法是求一个Hamilton圈,然后适当修改以得到具有较小权的另一个Hamilton圈。
修改的方法叫做改良圈算法。
设初始圈
(1)对于
构造新的Hamilton圈:
它是由C中删去的边
而得到的。
若
,则以
(2)转
(1),直至无法改进,停止。
用改良圈算法得到的结果几乎可以肯定不是最优的。
为了得到更高的精确度,在不给定起始位置的前提下,可以选择不同的初始圈,重复进行
次算法,以求得精确的结果。
4.1.2旅行商问题的数学表达式
设城市的个数为
是两个城市
之间的距离,
(
表示走过城市
的路,
表示没有选择走这条路)。
则有
(各起点和终点外,各边不构成圈)
4.1.3模型一求解
按附件所给各城市的顺序编号
,用两城市间的直线距离代表两城市的距离,我们以任意两点之间的最短距离矩阵为权重矩阵,利用
构造无向图
,据题意并不知周先生的起始地点,因此利用Matlab软件重复进行
次改良圈算法,尝试以每一个城市为出发点(算法见附录),首先设
,按改良圈算法求出此时的最优圈后,改变初始圈
依次进行下去,求出符合要求的最短距离的最优圈
,保证了从终点返回到出发点的距离也最短,即周游先生的最短旅行方案,如下:
51→62→72→7→86→33→70→74→60→35→40→34→3→96→45→11→55→6→69→77→38→81→42→17→28→76→47→63→84→46→90→5→48→21→52→27→19→15→1→36→23→65→75→12→66→13→57→20→95→4→39→85→9→10→24→2→73→61→25→26→37→53→14→41→58→67→18→22→68→54→91→32→92→16→30→78→100→89→83→8→79→88→44→94→31→64→87→43→82→71→50→49→29→59→97→93→56→80→98→99
我们运用Matlab软件模拟出了周先生最短的旅游线路,见图1。
其中每一个‘*’表示每个城市,折线表示旅游线路,标有
的城市是周先生旅行的起点,标有99的城市是周先生旅游的终点,由终点
返回起点
所构成的闭合回路就是周先生最短的旅行路线,其长度为
公里。
图1模拟最短旅游线路示意图
4.2问题二
对于问题二,我们同样运用问题一中所建的模型一,将模型一中的权值“最短距离”换为“最少花费”,建立模型二。
利用下面的分段函数求出花费最小的矩阵
:
问题二中规定了周游先生旅游的起始城市为第一个城市。
因此利用
为
构造无向图
,再利用Matlab软件进行
次改良圈算法(算法见附录),就会得到最优圈
,即花费最少的旅行路线。
如下:
1→15→36→71→82→43→87→31→64→50→49→29→5→48→21→52→27→19→23→65→75→12→66→13→57→20→95→39→4→94→44→88→85→9→10→24→2→73→61→25→26→37→53→67→18→22→68→54→91→32→58→14→41→83→8→79→97→93→56→98→80→59→63→84→90→46→47→76→86→33→70→74→60→7→72→62→51→28→17→42→81→38→77→69→11→45→3→96→35→40→34→55→6→92→99→16→30→78→89→100
我们运用Matlab软件模拟出了周先生最经济的旅游线路,见图2。
其中每一个‘*’表示每个城市,折线表示旅游线路,标有1的城市是周先生旅行的起点,标有100的城市是周先生旅游的终点,由终点100返回起点1所构成的闭合回路就是周先生最经济的旅行路线,其长度为
元。
图2模拟最经济旅游线路示意图
4.3问题三
4.3.1多目标规划思想
基于选择既省钱、省时又方便的最佳旅游方案,我们建立了用序贯式算法求解多目标规划[2]的模型。
序贯式算法的核心是根据优先级的先后次序,将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
求解目标规划的序贯算法:
对于
求解单目标规划
其最优目标值为
,当
时,约束(4)为空约束。
当
时,
所对应的解
为目标规划的最优解。
4.3.1模型的求解
城市
方式
城市
方式
城市
方式
城市
方式
1→15
飞机
75→12
飞机
26→37
飞机
80→59
大巴
15→36
飞机
12→66
飞机
37→53
飞机
59→63
大巴
36→71
飞机
66→13
飞机
53→67
飞机
63→84
飞机
71→82
飞机
13→57
飞机
67→18
飞机
84→90
飞机
82→43
大巴
57→20
飞机
18→22
飞机
90→46
大巴
43→87
飞机
20→95
飞机
22→68
飞机
46→47
大巴
87→31
飞机
95→39
飞机
68→54
飞机
47→76
大巴
31→64
飞机
39→4
飞机
54→91
飞机
76→86
飞机
64→50
大巴
4→94
大巴
91→32
飞机
86→33
飞机
50→49
飞机
94→44
飞机
32→58
飞机
33→70
大巴
49→29
大巴
44→88
飞机
58→14
飞机
70→74
飞机
29→5
飞机
88→85
大巴
14→41
飞机
74→60
飞机
5→48
飞机
85→9
飞机
41→83
大巴
60→7
大巴
48→21
飞机
9→10
飞机
83→8
飞机
7→72
飞机
21→52
飞机
10→24
飞机
8→79
飞机
72→62
飞机
52→27
大巴
24→2
飞机
79→97
大巴
62→51
飞机
27→19
飞机
2→73
飞机
97→93
飞机
51→28
大巴
19→23
大巴
73→61
飞机
93→56
飞机
28→17
大巴
23→65
飞机
61→25
飞机
56→98
飞机
17→42
飞机
65→75
飞机
25→26
飞机
98→80
飞机
42→81
飞机
81→38
飞机
45→3
大巴
34→55
大巴
16→30
飞机
38→77
大巴
3→96
飞机
55→6
飞机
30→78
飞机
77→69
飞机
96→35
大巴
6→92
大巴
78→89
飞机
69→11
大巴
35→40
飞机
92→99
飞机
89→100
飞机
11→45
飞机
40→34
飞机
99→16
飞机
4.4问题四
4.4.1科学地可行性、误差分析
上述算法思想是理想化的模型,在实际的旅游问题中,不仅要考虑路程的长短,还要考虑时间和费用。
通过建立数学模型的机理进行了深入剖析后,我们有效的掌握了解“旅游线路”问题,即为周先生寻找出一条既省钱、省时又方便的最佳旅游方案。
现在就根据上述算法做出较科学可行性和误差分析。
在实际问题中,我们考虑的不只是问题中所给的交通工具,现实中各交通工具的速度、票价也各不相同,甚至有些城市之间没有直达车,从省钱的角度考虑,可以全部选择飞机旅行,由于所有客运价格均由铁道部规定,而模型一采用的是城市间的直线距离,根据城市的经纬计算出两两城市之间的距离,不考虑突发事件干扰飞机或豪华大巴的行程的情况下,可以在出行之前按照最短路径,可以预算出旅行所花费的最短时间和费用,具有一定的可行性,实际性。
但是一般情况下路程越长花费的时间越多,所花的路费也越多,但在实际情况中飞机并不是按直线的航路飞行,两城市之间的直线距离可能是最短的,但按照豪华大巴运行的轨迹来看并不一定是最短的,因此所花费的时间和金钱就不一定是最少的。
而模型一是按照两城市之间的直线距离来求最短路径,这样模型一中必然存在着较大误差。
一般情况下,所采用的交通工具确定,两城市间的旅行时间就确定了。
所以用时间来计算既省时又经济的旅行路径,产生的误差更小,因此模型二与实际联系更加紧密。
使模型贴近实际,通用性强。
4.4.2复杂性分析
本题中,所旅游的城市数目较多,我们用动态规划方法求解,毫无疑问,计算量和储存量都很大,在求解时耗费了较多的时间。
4.5模型的评价
本文研究的是最佳旅游路线的选择问题,此问题属于旅行商问题,我们建立了路径最短,耗时最少,经济、省时、方便三个模型,根据周先生的不同需求,我们用改良圈算法和多目标规划解决了选择最佳路线的问题。
针对问题一,知此问题属于旅行商问题。
首先,我们按附件所给各城市的顺序编号
,用两城市间的直线距离代表两城市的距离,简化问题。
然后,我们运用改良圈算法求解旅行商问题,以任意两点之间的最短距离矩阵为权重,利用Matlab软件重复进行100次改良圈算法即以每一个城市为出发点,得到了最优圈,即最短的旅行路线。
针对问题二,我们同样运用问题一所建的模型用到的改良圈算法,将模型一中的权值矩阵“最短距离”换为“最少花费”,建立模型二。
同样利用Matlab软件进行
次改良圈算法,就会得到最优圈,即花费最少的旅行路线。
针对问题三,这里根据周游退休后以享受为主,在模型一、模型二结果的基础上,我们设定原则:
优先考虑方便,当两地乘坐飞机所用的费用比乘坐豪华大巴所用费用高不出一个范围时,则乘坐飞机。
我们给任意两地之间耗时最少的矩阵和花费最少的矩阵赋不同的权值。
通过动态规划来实现,最终得到满足周游先生自身需要的旅行方案。
之后我们结合实际情况对三个模型进行科学误差分析,并分析了所用算法的复杂性,同时对我们解决旅行商所采用的算法进行了评价,这使我们对旅行商问题有了更深一步的理解。
5模型的改进
模型一中我们把问题简单化,以两城市间的直线距离代替实际距离。
这种假设只是为了解题方便,模型进一步完善就要把路程更接近于实际得到的路程,这样才更有说服力。
建模型一、模型二、模型三的时候,都忽略了政府的宏观调控,市场经济,石油价格等对票价的的影响,事实上,在我国政府的策略,市场经济,石油价格等因素都会对旅游票价有影响,所以,模型的改进也要考虑政策的影响。
参考文献:
[1]司守奎.数学建模算法与程序[M],第五章图与网络:
P87-89,2007.
[2]司守奎.数学建模算法与程序[M],第二十三章目标规划:
P397-400,2007.
[3]王振龙,时间序列分析,北京:
中国统计出版社,2002年。
[4]韩中庚,长江水质综合评价与预测的数学模型,工程数学学报第22卷第7期:
P47-P52,2005年。
附录:
********************************************************************
问题一最短旅行方案的Matlab源程序
*********************************************************************
clc,clear
%主函数:
functionmain
loadmydata
globald
d=zeros(100);
C=zeros(100,102);
fori=1:
100
forj=1:
100
d(i,j)=6378.140*acos(sin(y0(i)*pi/180)*sin(y0(j)*pi/180)...
+cos(y0(i)*pi/180)*cos(y0(j)*pi/180)*cos((x0(i)-x0(j))*pi/180));
end
end
xlswrite('juli',d,'sheet1')
[i,j,y]=find(d);
a=sparse(i,j,y);
a=tril(a);
L=size(d,1)
fori=1:
100
c1=[i1:
100100];
[circle,long]=modifycircle(c1,L);
c2=[i1001:
100];%改变初始圈,该算法的最后一个顶点不动
[circle2,long2]=modifycircle(c2,L);
iflong2long=long2;
circle=circle2;
end
changdu(i)=long;
C(i,:
)=circle;
circle,long
end
[zuiyou,I]=min(changdu);
circle0=C(I,:
)
xlswrite('luxian1.xls',circle0,'sheet1')
x=[x0(circle0(1:
end-1))x0(51)];
y=[y0(circle0(1:
end-1))y0(51)];
scatter(x,y,'*')
holdon
plot(x,y)
xlabel('经度')
ylabel('纬度')
gtext('51');
gtext('99');
%被调用函数:
function[circle,long]=modifycircle(c1,L);
globald
flag=1;
whileflag>0
flag=0;
form=1:
L-3
forn=m+2:
L-1
ifd(c1(m),c1(n))+d(c1(m+1),c1(n+1))<...
d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:
n)=c1(n:
-1:
m+1);
end
end
end
end
long=d(c1
(1),c1(L));
fori=1:
L-1
long=long+d(c1(i),c1(i+1));
end
circle=c1;
*********************************************************************
问题二最经济旅行方案的Matlab源程序
*********************************************************************
clc,clear
d=xlsread('juli.xls');
w=zeros(100)
fori=1:
99
forj=i+1:
100
ifd(i,j)<=1500
w(i,j)=1.5*d(i,j);
end
ifd(i,j)>1500
w(i,j)=1700+(d(i,j)-1000)*1.1;
end
end
end
w=w+w’
xlswrite('feiyong',w,'sheet1');
functionmain
clc,clear
loadmydata
ug=xlsread('feiyong')
[i,j,y]=find(ug);
a=sparse(i,j,y);
a=tril(a);
L=size(ug,1);
c1=[12:
99100];
[circle,long]=modifycircle(c1,L);
c2=[11002:
99];%改变初始圈,该算法的最后一个顶点不动
[circle2,long2]=modifycircle(c2,L);
iflong2long=long2;
circle=circle2