旅游线路的优化设计(doc 30页)
旅游线路的优化设计(doc 30页)
一、问题重述
随着人们的生活不断提高,旅游已成为提高人们生活质量的重要活动。江苏徐州有一位旅游爱好者打算在今年的五月一日早上8点之后出发,到全国一些著名景点旅游,最后回到徐州。由于跟团旅游会受到若干限制,他(她)打算自己作为背包客出游。他预选了十个省市旅游景点,如附表1(见附录I)所示。
假设
(A)城际交通出行可以乘火车(含高铁)、长途汽车或飞机(不允许包车或包机),并且车
票或机票可预订到。
(B)市内交通出行可乘公交车(含专线大巴、小巴)、地铁或出租车。
(C)旅游费用以网上公布为准,具体包括交通费、住宿费、景点门票(第一门票)。晚上
20:00至次日早晨7:00之间,如果在某地停留超过6小时,必须住宿,住宿费用不超过200元/天。吃饭等其它费用60元/天。
(D)假设景点的开放时间为8:00至18:00。
问题:
根据以上要求,针对如下的几种情况,为该旅游爱好者设计详细的行程表,该行程表应包括具体的交通信息(车次、航班号、起止时间、票价等)、宾馆地点和名称,门票费用,在景点的停留时间等信息。
(1) 如果时间不限,游客将十个景点全游览完,至少需要多少旅游费用?请建立相关数
学模型并设计旅游行程表。
(2) 如果旅游费用不限,游客将十个景点全游览完,至少需要多少时间?请建立相关数
学模型并设计旅游行程表。
(3) 如果这位游客准备2000元旅游费用,想尽可能多游览景点,请建立相关数学模型
并设计旅游行程表。
(4) 如果这位游客只有5天的时间,想尽可能多游览景点,请建立相关数学模型并设计
旅游行程表。
(5) 如果这位游客只有5天的时间和2000元的旅游费用,想尽可能多游览景点,请建
立相关数学模型并设计旅游行程表。
二、问题假设
1、忽略乘坐出租车时经过收费路段所交的费用;
2、在每个城市中停留时,难免会遇到等车、堵车等延时情况,在此问题中我们不做考
即旅行商问题有些类似,所以本文将问题向TSP问题进行一定的转化,从而进行求解。
因为运用传统的动态规划解法,解法的空间复杂性和时间复杂性都十分庞大,不利于求解,所以采用蚁群算法,通过计算机Matlab软件进行编程得到路程最短的旅行路线。
因题目要求时间不限,用最少的旅游费用游览全部景点,而考虑到不同交通工具的速度和票价都不相同,各个旅馆的住宿费用也不相同,所以我们对其行程进行详细的安排,尽量减少其在交通和住宿上的费用,减少不必要的花费。
最后得出一个最少旅游费用的旅游行程表。
4.2问题二的分析
针对问题二,要求求出将旅游景点全游览完,所需的最少时间。因为考虑到交通工具的不同导致时间上的差异问题,所以仅用问题一的模型不能求解。但是由于任意两座城市之间都能相连接起来,且每座城市只经过一次,所以将任意两座城市之间的路程转变为时间,建立最优化模型,通过计算机Lingo软件进行编程,到时间最短的旅游路线。
然后,根据题目要求,再对其行程进行详细的安排,尽量避免不必要的时间。
最后得出一个最短时间的旅游行程表。
4.3问题三的分析
针对问题三,题目给出了限制条件,旅游费用不超过2000元。只用2000元游览完全部景点是不可能的,所以我们对其行程进行优化。
首先,将问题一的旅游行程根据旅游景点和交通路线划分成21个部分(包括10个景点和11条交通线路),并计算出每一个部分所要花费的旅游费用。
然后,对旅游行程进行优化计算,为了简化运算,我们假设交通线路上花费的费用只是简单相加。通过除去旅游景点计算出2000元以下的费用最优解。
最后得出一个2000元以下的旅游行程表。
4.4问题四的分析
针对问题四,题目也给出了限制条件,旅游时间不超过5天。只用5天游览完全部景点是不可能的,所以我们对其行程进行优化。解法与问题三大致相同。
首先,对问题二的旅游行程也根据旅游景点和交通路线划分成21部分(包括10个景点和11条交通线路),并计算出每一个部分所要花费的时间。
然后,对旅游行程进行优化计算,为了简化运算,我们假设交通线路上花费的时间只是简单相加。通过除去旅游景点计算出5天以内的时间最优解。
最后得出一个5天以内的旅游行程表
4.5问题五的分析
针对问题五,题目给出了两个限制条件,旅游费用不超过2000元,并且旅游时间在5天以内。只用5天和2000元游览完10个景点是不可能的,所以我们对其进行优化。
由于飞机价格非常高,所以我们基于第三问,并且结合第四问的数据对其进行优化。
首先,对旅游行程也根据旅游景点和交通路线划分成21部分(包括10个景点和11条交通线路),并计算出每一部分所要花费的时间和费用。
然后,对旅游行程进行优化计算,为了简化运算,我们假设交通线路上花费的时间和费用只是简单相加。通过除去旅游景点计算出2000元以下和5天以内的时间最优解。
最后得出一个最优旅游行程表。
三、模型的建立与求解
5.1问题一的求解
5.1.1建立图论的数学模型
将各个旅游景点之间的关系转化为图论问题,并做以下分析:
建立有向图(,)G V A =。其中12{,,......,}n V V V V =称为图G 的顶点集,V 中的每一个元素(1,2,......)i V i n =称为该图的一个顶点,在该题中表示n 城市;12{,,......}n A a a a =称为图G 的弧集,A 中的每个元素(,)k i j a V V =称为该图的一条从i V 到j V 的弧,在此题中表示各个城市两两连线的集合。[1]
设城市个数为n ,ij d 表示两个城市i 与j 之间的距离,ij x =0或1(1表示走过城市i 到城市j 的路,0表示没有选择走这条路)。本题可以向TSP 问题进行转化,则TSP 问题的数学模型为:
min ij ij i j
d x ≠∑
5.1.2建立蚂蚁算法的数学模型 (1)状态转移规则
因为蚂蚁k 不能重复经过一个城市,所以建立禁忌表(1,2,......)k tabu k m =来记录蚂蚁走过的城市,禁忌表随着时间做动态变化。
建立蚂蚁k 由i 城市转移到j 城市的状态转移概率如下:
[][][]()() ()()() 0 k ij ik k
k
is is ij s tabu k
t t j tabu t t p t j tabu αβατητηβ?????????=???∈?∑ (1)
上式中α为信息启发式因子,表示路径的相对重要性,是对所积累的信息素影响作用的一个加权值;β为期望启发式因子,表示能见度的相对重要性;
每只蚂蚁必须依据以城市距离和连接边上信息素的数量为变量的概率函数,决定选择下一个城市的概率。
每只蚂蚁必须根据禁忌表和概率函数寻找下一个城市,以保证该蚂蚁从起点出发经过所有城市有且只有一次,并且最终返回到起点。
(2)信息素的全局更新规则
当m 只蚂蚁成功的完成一次寻径过程之后,将选出目标函数值最小的路径,用以完成全局信息素的更新,使得较优解保留下来,对后继蚂蚁产生影响,加快收敛到最优解的速度。
设i ,j 为两个相连接点,则有:
()()()(,)1,,ij ij ij i j i j i j τρτρτ←??-+?? (2)
其中,变量(),ij i j τ?是在t 时刻,节点,i j 之间路上信息素的增加量
()()1,(),0
ij if i j global best tour L i j otherwise τ-?∈--?=??短
ρ是位于[0,1]上的
“激素”挥发因子;L 短为到目前为止所找到全局最短路径长度。 (3)信息素的局部更新
对于第k 只蚂蚁,在建立一个解得过程中也同时进行激素迹的更新,如果节点,i j 是它所选择路径上的两个相邻节点,规则如下:
()()()()1ij ij ij t t t τρτρτ←??-+??
否则,不更新。其中,0ρ<<1,0()ij t ττ?=,0τ是各条路上的信息素的初始值,通常取同一值,表示同一环境。
信息素的更新策略有很多种方法,每种更新策略的主要差别体现在()k
ij t τ?的求法上。我们规定蚂蚁在完成一个循环后更新所有路径上的信息素,其方程式为:
() k i,j 0 k
k
ij Q L t τ???=???蚂蚁本次循环经过()否则 (3) 上式中Q 表示蚂蚁携带信息素的量,其值的大小影响算法的收敛速度;k L 表示第k
只蚂蚁在本次循环中所走的路程总长度。 5.1.3基于蚁群算法的实现步骤[2]
本题基于蚁群算法的实现步骤如下:
1step :初始化。时间0t =,循环次数0c n =,设置最大循环次数为max c n ,
()00ij τ?=;
2step :循环次数c n ++;
3step :蚂蚁个数k ++;
4step :蚂蚁选择可以到达的城市,按照状态转移规则移动到下一个城市j ; 5step :对于城市j ,由于已经到达,所以添加到禁忌表中;
6step :
判断所有城市是否都经过,若未完全经过,表明蚂蚁个数没有达到m ,则转向执行3step ,否则执行7step ;
7step :由于信息素改变,要求按照公式(2)
(3)更新最短路径信息素,使得较优解保留,加快收敛到最优解的速度; 8step :
若max c c n n <表明没有满足终止条件,即转向执行2step ,否则执行9step ; 9step :输出最优结果。
5.1.4模型的求解
(1)求解城市之间的距离
首先,假设经线和纬线近似平行分布,根据附表2(见附录I )可知11座城市的经纬坐标。建立直角坐标系,以纬度最低的城市所在的纬线为x 轴,以经度最小的城市所在的经线为y 轴,计算11座城市的坐标。
将城市进行编号,计算相应城市间的距离得到附表3(见附录I ),得到编程数据(见附录II )。
(2)求解最短路径
利用上述蚁群算法的步骤,使用附录II 的数据,编写Matlab 程序,得出以下结果: Shortest_Route =
6 9 5 4 3 1 2 11
7 10 8
图一:Matlab模拟图
对上述结果进行处理,根据城市编号求出最优解为:
徐州→常州→舟山→黄山→九江→武汉→洛阳→西安→祁县→北京→青岛→徐州由上面结果可以在中国地图上模拟出最短路线,如下:
图二:问题一模拟路径图
5.1.5设计旅游行程表和求出总费用
我们根据蚁群算法得出游览全部景点的最短路径,在得出的最短路径的基础上,我们通过查阅火车票价、车次、运营时间,宾馆价格、名称等大量资料和数据,尽可能的减少其在行程上的花费,设计出如下旅游行程表:
日期时间行程
价格(元)
5月1日8:30—
15:45
乘坐L8449次列车(徐州
——常州)
34 16:00—
—21:00
游览常州市0 21:00—
—7:00
住宿于常州蓝色快舟营销
人连锁旅店
120
5月2日7:00—
—8:00
乘坐公交去中华恐龙园4 8:00—
—16:00
游览中华恐龙园160 16:00—
—17:00
乘坐公交返回4 17:00—
—22:30
游览常州市0 22:30—
—5:20
乘坐K75次列车(常州—
—宁波)
73
5月35:30—乘坐758W公交到白峰码16
日—8:00头——乘坐船到普陀山
8:00—
—14:00
游览普陀山200 14:00—
—16:00
返回宁波站16
16:00——22:15乘坐K8500次列车(宁波
——宣城)
63
22:15—
—1:30
候车0
并且得出最少的总旅游费用为3438元。
5.2问题二的求解
5.2.1模型的建立
基于第一问的模型,我们稍作改进。因为第二问要求安排时间最短的旅游行程表,而费用不限,由于飞机费用过大,所以在第一问我们未做考虑,但由于其时间比火车和汽车都要快的多,所以我们把飞机作为首要考虑对象加入第二问中。
第一问的模型中,是把任意两点之间的距离作为参数,从而进行求解,得出最短路径。在第二问中,我们把任意两点之间的所乘坐的交通工具的最短时间作为参数,建立时间最优化模型,结合Lingo软件(程序见附录III)求出经过所有旅游景点的花费时间最短的路线。
5.2.2模型的解释
在模型中,我们引入0-1变量,若通过两城市之间的路径,则赋值为1;若不通过两城市之间的路径,则赋值为0。对于无向图的最短时间路径问题,可以这样理解,从点到点和点到点的边,看成有向弧,其他各条边均看成有不同方向的双弧,因此,可以按照前面介绍有向图的最短时间路径问题来编程。[3]
5.2.3模型的求解
利用上述算法的步骤,使用附录II的数据,编写Lingo程序,得出以下结果:Variable Value Reduced Cost
X(1,2) 1.000000 322.0000
X(2,9) 1.000000 110.0000
X(3,11) 1.000000 90.00000
X(4,6) 1.000000 105.0000
X(5,3) 1.000000 100.0000
12953118107461
→→→→→→→→→→→
对上述结果进行处理,根据城市编号求出最优解为:
徐州→常州→西安→祁县→青岛→舟山→武汉→九江→黄山→北京→洛阳→徐州由上面结果可以在中国地图上模拟出最短路线,如下:
图三:问题二模拟路径图
5.2.4设计旅游行程表和求出总费用
我们根据最优化模型得出游览全部景点的最短时间路径,在得出的最短时间路径的基础上,我们通过查阅飞机票价、班次、运营时间,宾馆价格、名称等大量资料和数据,尽可能的减少其在行程上的花费,设计出如下旅游行程表:
表二:问题二的行程表(其余答案参见附录III)
日期时间行程价格(元)
X(6,1) 1.000000 280.0000 X(7,4) 1.000000 120.0000 X(8,10) 1.000000 215.0000 X(9,5) 1.000000 65.00000 X(10,7) 1.000000 484.0000 X(11,8) 1.000000 75.00000
5月1日8:00——
9:30
整理行装0 9:30——
15:30
乘坐K55次列车(徐州——常
州)
70 15:30——
21:00
游览常州市0 21:00——
7:00
住宿于常州蓝色快舟营销人
连锁旅店
120
5月2日7:00——
8:00
乘坐出租车到中华恐龙园40 8:00——
16:00
游览中华恐龙园160 16:00——
17:00
乘坐出租车返回40 17:00——
21:00
游览常州市0 21:00——
23:00
乘坐MU5638班次飞机(常州
——西安)
1110 23:00——
24:00
乘坐出租车到秦始皇兵马俑40
5月30:00——住宿于西安美宝宾馆后宰门138
日8:00店
8:00——
游览秦始皇兵马俑90 10:00
10:00——
乘坐出租车返回40 11:00
11:00——
游览西安0 13:00
并且得出最少的总旅游时间为210小时。
5.3问题三的求解
基于第一问得出的旅游行程表,我们对其进行优化。由于题目给出了约束条件,旅游经费不超过2000元,所以我们将行程划分为21部分(包括10个景点和11条线路)。
然后统计出每一部分所要花费的经费,如下表所示:
由上表可以看出,黄山、普陀、九江和常州所花费的经费占10个旅游景点的前4位,这四个景点的总经费大约为915元,所以先不考虑黄山、普陀、九江和常州这四个景点。
然后使其从青岛开始出发,尽量避免这四个景点。
对其余的景点根据最短路径重新安排行程,避免住宿,减少不必要的花费。
日期时间行程价格(元)
5月1日8:00——
23:30
整理行装0 23:30——
8:00
乘坐K1025次列车(徐州—
—青岛)
70
5月2日8:00——
9:00
乘坐311W公交车到崂山风
景区
7 9:00——
17:00
游览崂山150 17:00——
18:00
乘坐311W公交车返回7 18:00——
20:00
游览青岛市0 20:00——
5:30
乘坐T26次列车(青岛——
北京)
116
5月3日5:30——
7:00
休息0
7:00——8:00乘坐地铁2号线和公交车到
八达岭
20
8:00——
13:00
游览八达岭45
13:00——14:00乘坐地铁2号线和公交车返
回
20
14:00——
22:00
游览北京市0 22:00——
23:30
休息0
23:30——13:30乘坐2603次列车(北京——
祁县)
94
5月4日13:30——
14:30
乘坐公交车到乔家大院2 14:30——
18:00
游览乔家大院40 18:00——
19:00
乘坐公交车返回2 19:00——
20:30
游览祁县0
很大的差距,所以我们重新旅游行程表进行优化,对黄山、普陀、九江和常州这四个旅游景点进行分析,安排行程。发现只有添加九江这个景点旅游费用不会超支,所以设计
出如下行程表:
日期时间行程价格(元)
5月1日8:00——
23:30
整理行装0 23:30——
8:00
乘坐K1025次列车(徐州—
—青岛)
70
5月2日8:00——
9:00
乘坐311W公交车到崂山风
景区
7 9:00——
17:00
游览崂山150 17:00——
18:00
乘坐311W公交车返回7 18:00——
20:00
游览青岛市0 20:00——
5:30
乘坐T26次列车(青岛——
北京)
116
5月3日5:30——
7:00
休息0 7:00——乘坐地铁2号线和公交车到20
8:00
八达岭
8:00——
13:00
游览八达岭45
13:00——14:00乘坐地铁2号线和公交车返
回
20
14:00——
22:00
游览北京市0 22:00——
23:30
休息0
23:30——13:30乘坐2603次列车(北京——
祁县)
94
并且得出旅行费用为1994元。
由上面结果可以在中国地图上模拟出最短路线,如下:
图四:问题三模拟路径图
5.4问题四的求解
基于第二问得出的旅游行程表。我们对其进行优化。由于题目给出了约束条件,旅游时间不超过5天,也就是120小时,所以我们将行程划分为21部分(包括10个景点和11条线路)。
然后统计出每一部分所要花费的时间,如下表所示:
徐州常州西安太原青岛舟山
1.529.514719.521.5武汉九江黄山北京洛阳
2121.517.513.54
徐州——常州常州—
—西安
西安—
—太原
太原—
—青岛
青岛—
—舟山
舟山—
—武汉
620.75 1.25 1.52
武汉——九江九江—
—黄山
黄山—
—北京
北京—
—洛阳
洛阳—
—徐州
5102 1.57.5
由上表可以看出,常州、舟山、九江和武汉所花费的时间占10个旅游景点的前4位,这4个景点的总时间大约为93.5小时,但是根据路程上所花的时间来看,武汉所花的时间要少于黄山,所以先不考虑常州、黄山、九江、舟山这四个景点。
然后,考虑到如果从洛阳开始出发,没有飞机能够直达,早上出发会遇到住宿的问题,从而浪费时间,然而从北京开始出发能够避免此问题,所以从北京出发对其余的景点根据最短路径重新安排行程。
日期时间行程价格(元
)
5月1日8:00——
9:30
整理行装0 9:30——
10:45
乘坐KN2904班次飞机(徐州
——北京)
690 10:45——
11:30
乘坐出租车到八达岭40 11:30——
14:30
游览八达岭45 14:30——
15:15
乘坐出租车返回40 15:15——
16:40
乘坐MU743班次飞机(北京
——青岛)
618 16:40——
22:00
游览青岛市0 22:00——
7:00
住宿于常州蓝色快舟营销人
连锁旅店
120
5月2日7:00——
8:00
乘坐出租车到崂山风景区40 8:00——
14:00
游览崂山150
14:00——
15:00
乘坐出租车返回40
15:00——16:40乘坐SC4607班次飞机(青岛
——太原)
690
16:40——
17:40
乘坐出租车到达乔家大院40 17:40——
22:00
游览祁县0 22:00——
8:00
住宿于平遥怡兴驿同福客栈98
经过计算,新的旅游行程所花费的时间大约为91小时,与题目给出的120小时还有很大的差距,所以我们重新旅游行程表进行优化,对常州、舟山、九江和黄山这四个旅游景点进行分析,安排行程。发现只有添加常州这个景点对时间安排最合理,所以设计出如下行程表:
日期时间行程价格(元)
5月1日8:00——
9:30
整理行装0 9:30——
10:45
乘坐KN2904班次飞机(徐州
——北京)
690 10:45——乘坐出租车到八达岭40
11:30
11:30——
14:30
游览八达岭45 14:30——
15:15
乘坐出租车返回40
15:15——16:40乘坐MU743班次飞机(北京
——青岛)
618
16:40——
22:00
游览青岛市0
22:00——
7:00住宿于常州蓝色快舟营销人
连锁旅店
120
5月2日7:00——
8:00
乘坐出租车到崂山风景区40 8:00——
14:00
游览崂山150 14:00——
15:00
乘坐出租车返回40 15:00——
16:40
乘坐SC4607班次飞机(青岛
——太原)
690 16:40——
17:40
乘坐出租车到达乔家大院40