苏北数学建模竞赛B题解答Word格式文档下载.docx
《苏北数学建模竞赛B题解答Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《苏北数学建模竞赛B题解答Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。
![苏北数学建模竞赛B题解答Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/14/a9bc1f12-509d-4045-a749-bca700ae9c0f/a9bc1f12-509d-4045-a749-bca700ae9c0f1.gif)
祁县乔家大院
河南
洛阳市龙门石窟
安徽
黄山市黄山
7小时
湖北
武汉市黄鹤楼
2小时
陕西
西安市秦始皇兵马俑
江西
九江市庐山
浙江
舟山市普陀山
假设:
(A)城际交通出行可以乘火车(含高铁)、长途汽车或飞机(不允许包车或包机),并且车票或机票可预订到。
(B)市内交通出行可乘公交车(含专线大巴、小巴)、地铁或出租车。
(C)旅游费用以网上公布为准,具体包括交通费、住宿费、景点门票(第一门票)。
晚上20:
00至次日早晨7:
00之间,如果在某地停留超过6小时,必须住宿,住宿费用不超过200元/天。
吃饭等其它费用60元/天。
(D)假设景点的开放时间为8:
00至18:
00。
问题:
根据以上要求,针对如下的几种情况,为该旅游爱好者设计详细的行程表,该行程表应包括具体的交通信息(车次、航班号、起止时间、票价等)、宾馆地点和名称,门票费用,在景点的停留时间等信息。
(1)如果时间不限,游客将十个景点全游览完,至少需要多少旅游费用?
请建立相关数学模型并设计旅游行程表。
(2)如果旅游费用不限,游客将十个景点全游览完,至少需要多少时间?
(3)如果这位游客准备2000元旅游费用,想尽可能多游览景点,请建立相关数学模型并设计旅游行程表。
(4)如果这位游客只有5天的时间,想尽可能多游览景点,请建立相关数学模型并设计旅游行程表。
(5)如果这位游客只有5天的时间和2000元的旅游费用,想尽可能多游览景点,请建立相关数学模型并设计旅游行程表。
二、模型假设与符号说明
2.1模型的基本假设
(1)每个景点仅经过一次。
(2)只考虑问题中提供的11个旅游景点,不考虑其他中转地点作为TSP的需求点。
(3)为使问题一定程度上简约化,将城市与路径抽象成点与直线的图论问题。
在问题
(2)中承认旅行中的车旅费用以及时间与两景点之间距离成正比,以距离的TSP替代时间的TSP。
不考虑绕路等特殊情况。
在建模时认为两地之间往返的费用时间差异可忽略。
(4)在求解费用最少问题时,模型假设时认为住宿,门票,车旅及餐费都必须包含在内。
(5)认为网上公布的机票与车票均可以在任意时刻获得,且班次误点等特殊情况不予考虑,忽略转站中的不合理因素。
(6)不考虑天气原因对选择交通工具的影响。
(7)关于两地间距离仅作比较参考,一切以路径为准。
2.2符号说明
符号
名称
G
赋权图矩阵
C
图中的元素(景点)
n
景点的个数
D
赋权图的描述矩阵
T
访问顺序集合
L
最优解(最小费用或最短路程)
dti,ti+1
时间ti到ti+1的TSP描述
m
蚂蚁的总数量
k
蚂蚁的编号
bi(t)
t时刻位于城市i的蚂蚁数目
τij(t)
t时刻路径(i,j)上的信息量
Г
t时刻C中两两景点之间的残留信息素浓度集合
P
初始时刻各路径上的信息素量
g(C,L,Г)
寻优有向图
tabuk
第k只蚂蚁的禁忌搜索表
pkij(t)
蚂蚁k在t时刻由i城市转向j城市的转移概率
α
信息启发式因子
β
期望启发式因子
ηij(t)
启发函数
ρ
信息素挥发系数
△τkij(t)
t时刻k蚂蚁在路径ij上留下的信息素量
Q
蚂蚁携带的信息素量
Lk
本次循环中第k只蚂蚁所走的路程长度
NC
所记录的循环次数
NCmax
最大循环次数
三模型的建立与求解
3.1基本蚁群算法求解权值不变时单一目标值TSP问题的最优化模型
3.1.1TSP问题的图论阐述
将旅游景点图优化成完全带权图,问题即可抽象成图论问题:
令赋权图为G=(C,L),其中C={C1,C2,……Cn}为节点,表示各个景点的集合;
L={Lij|Ci,Cj
C}表示各个景点之间的路径,每两个景点间的路径lij都有相关的权值dij与之对应,从而建立起一个D=(dij)矩阵,权值可以表示距离、费用、路径等。
由于题目的相关要求可以抽象出一个典型旅行商问题的数学模型:
minL=
3.1.2基本的蚁群算法模型
基本思想:
蚁群算法是一种通过模拟自然界蚂蚁寻径的行为的进化算法。
蚂蚁群找到食物时,它们总能找到一条从食物到巢穴之间的最优路径。
这是因为蚂蚁在寻找路径时会在路径上释放出一种特殊的信息素,当它们碰到一个还没有走过的路口时,就随机地挑选一条路径前行,与此同时释放出与路线长度有关的信息素,路径越长,释放的激素浓度越低,当后来的蚂蚁再次碰到这个路口的时候,选择激素浓度较高路径概率就会相对较大,这样形成了一个正反馈。
最优路径上的激素浓度越来越大,而其它的路径上激素浓度却会随着时间的流逝而消减。
这样,整个蚁群最终会找出最优路径。
用bi(t)表示城市i的蚂蚁数目,
表示t时段路径(i,j)上的信息量,n表示景点的个数,m为蚂蚁的总数量,则m=
初试时刻,各条路径上信息量相等,均为P,
(0)=P。
又因为蚂蚁不能重复经过同一个城市,因此建立禁忌表(或记录未走过的路径Jk)tabuk(k取正整数)来记录蚂蚁走过的城市,并随时间做动态调整。
被随机分散在
个节点的
只蚂蚁同时出发,按照下面的概率公式逐次访问各个城市节点:
蚂蚁
以概率
访问下一个节点:
在这里,有
表示边
上的信息素强度。
表示由节点
到节点
的启发函数,显然距离越长期望度越低,所以在此将
设为
。
随着时间的推移,可能会出现两种情况:
①之前各蚂蚁留下的信息素逐渐消失;
②经过多次循环后,路径上的残留信息素过多,淹没了期望程度对蚂蚁选择路径的影响。
为了避免这两种情况,在每一只蚂蚁完成一次循环后,我们对引入参数
对残留的信息素进行更新。
为信息素的挥发速率,是在[0,1]间取值的可变量,用于控制两种信息素的比重。
设经过
个时间单位后,蚂蚁完成一次循环,各路径上的信息素的量根据以下式子作出调整:
:
蚂蚁在本次循环中留在路径
留在路径
当蚁群完成了所有的节点的访问后,在原路返回的过程中,根据所得的解的好坏去修改路径上的信息素强度,以此来引导其他蚂蚁对该路径的选择,从而达到群体协作的目的,最后判断系统是否满足停止的条件(停止条件可以是最大的迭代次数,计算机运行时间,或者是达到系统所要达到的数据精度等),如果条件不满足,则蚁群又重新开始搜索路径,建立新的解;
否则,系统将退出运行,将所得的结果输出。
从上面可以看出,蚁群优化算法的基本思想就是质量越好的解和距离越短的路径就越能吸引更多的蚂蚁。
蚁群正是通过这种反复记忆和学习的过程,得到了最短路径,即全局最优解。
我们将各城市的经纬度通过球面坐标系的转化分别投影到一个二维平面上点的横纵坐标,在求解的时候可直接求出两地的直线距离,即为
3.1.3基本蚁群算法的算法流程
在本题中,基本蚁群算法的具体实现步骤如下:
1.参数初始化:
令t=0;
设置最大循环次数NcMax,循环次数Nc=0;
将m只蚂蚁置于n个节点上,在每个节点i放置bi(t)只蚂蚁;
初始化每条边(i,j)上的信息素量τij(0)=c为一个常量,初始时刻∆τijk(0)=0;
初始化禁忌表tabuk和路径表Lk。
2.设置索引号s=1,对k=1~m将蚂蚁k的起始城市放入禁忌表中,并重复以下步骤直至禁忌表填充完整:
对k=1~m,利用公式计算转移概率pij,根据伪随机比例规则选择下一景点,将蚂蚁k移动到下一景点j并将其填入禁忌表,同时记录蚂蚁k的路线,索引号自增。
3.对k=1~m,根据Lk的记录计算蚂蚁k所走循环路径的总长度,找到最佳路线
4.计算每只蚂蚁的信息素增量∆△τkij(t)
5.更新每条路径上的信息素量△τkij(t+n)
6.清空禁忌表及路线表。
7.Nc++,若Nc<
NcMax,返回步骤2,否则,循环结束。
图1基本蚁群算法的程序流程图
3.2蚁群算法的模型求解
3.2.1问题
(1)费用TSP问题的求解
根据蚁群算法的解题思路,编写MATLAB程序。
将各个景点的经纬度坐标转化为高斯坐标,便于MATLAB的作图。
建立文本输入参数,其中权值为两两景点之间的车费,旅游景点门票,住宿费以及餐费等。
在车费的选择上在两景点拥有的航班,列车以及长途客运之中选择费用最低的。
考虑到住宿的不确定性,以最坏的情况假设每天都需要住宿。
首先对参数进行初始化。
时间t=0,循环次数NC=0,最大循环次数NCMAX=200,蚂蚁所携带的信息素量为100,初始时刻△τkij(0)=0,蚂蚁数量m=11,景点数n=11,信息启发式因子为1,期望启发式因子为5,信息素挥发系数为0.7,程序运行5次,取相对最优解。
MATLAB运行结果为:
Shortest_Route=
1181695341072
Shoetest_Length=
750.5
对运行结果的数据进行处理,可以得到以下结论:
(1)最省钱的旅行方案为:
徐州出发——洛阳市龙门石窟——西安市秦兵马俑——山西祁县乔家大院——青岛市崂山——北京八达岭长城——江西九江庐山——黄山市黄山——常州中华恐龙园——舟山市普陀山——武汉市黄鹤楼——返回徐州,反向亦可。
(2)具体行程:
时间
事件
费用
5.113:
40-5.119:
25
从徐州出发,乘1085普快(硬座)到达洛阳
34元
5.119:
25-5.28:
00
入住于洛阳东宣假日酒店
198元+60元(吃饭等其他费用)
5.28:
00-5.211:
在洛阳市龙门石窟游玩3小时
120元
5.217:
55-5.223:
06
从洛阳出发,乘1184/1181普快(硬座)到达西安
28元
5.223:
06-5.308:
入住于西安西安华清豪泰商务会所
130元+60元
5.308:
00-5.310:
在西安市秦始皇兵马俑游玩2个小时
90元
5.320:
52-5.407:
45
从西安出发,乘2670普快(硬座)到达太原
45元
5.408:
30-5.409:
44
从太原出发,乘L7815(硬座)到达祁县
13元
5.409:
44-5.412:
在祁县乔家大院游玩3个小时
40元+60元
5.414:
55-5.416:
08
从祁县出发,乘4626次列车(硬座)返回太原
7元
5.421:
36-5.508:
从太原出发,乘K884/K881K-快速(硬座)到达青岛
5.508:
45-5.514:
在青岛市崂山游玩6个小时
100元+60元
5.520:
07-5.605:
38
从崂山出发,乘T26T-特快(硬座)到达北京
116元
5.608:
00-5.611:
在北京八达岭长城游玩3个小时
45元+60元
5.612:
14-5.704:
14
从北京出发,乘坐1453普快(硬座)到达九江
145元
5.708:
00-5.715:
在九江市庐山游玩7个小时
180元+60元
5.719:
42-5.723:
07
从庐山出发,乘坐K13/K12K-快速(硬座)到鹰潭
41元
5.723:
11-5.804:
从鹰潭出发,乘坐K156K-快速(硬座)到黄山
51元
5.808:
00-5.815:
在黄山市黄山游玩7个小时
230元+60元
5.819:
10-5.904:
46
从黄山出发,乘K8420/K8417K-快速(硬座)到常州
73元
5.908:
00-5.912:
在常州市恐龙园游玩4个小时
160元+60元
5.922:
30-5.1005:
19
从常州出发,乘坐K57/K78K-快速(硬座)到宁波
5.1006:
30-5.1008:
40
从宁波出发,乘坐大巴+快艇到达普陀山
70元
5.1008:
40-5.1014:
在舟山市普陀山游玩6个小时
5.1014:
40-5.1016:
50
从普陀山出发,乘坐大巴+快艇返回宁波
5.1021:
28-5.1107:
16
从宁波出发,乘坐Z32/Z33Z-直特(硬卧)到武昌
143元
5.1108:
00-5.1110:
在武汉市黄鹤楼游玩2个小时
80元+60元
5.1116:
54-5.1204:
13
从汉口出发,乘坐2614/2615普快(硬座)返回徐州
39元
总计:
3201元
表1问题1的具体行程
3.2.2问题
(2)时间TSP问题的求解
在本问题这一经典的TSP问题模型中,通过对于模型之中城市的集合L={Lij|Ci,Cj
C},可以建立一个与之对应的描述矩阵D=(dij)描述。
由于问题中的限制条件以及时间的不可控性,在假设中选择使用距离的TSP替代时间的TSP。
根据网络上的数据可知,若选择单一交通工具,旅途中的时间与旅途的长度成正比,而在本题的情况下可以乘坐的航班较少,在不考虑费用的情况下,可以近似认为选择的交通工具只有长途汽车与火车两种,且不同车种和班次之间的速度差异可以忽略。
那么,仍然根据蚁群算法的解题思路,使用各个城市的经纬度,转化为高斯坐标进行定位,而两两景点之间的有向线段的权值用城市之间的距离表示,根据一些既定的班次并对距离做了调整(可参见附录)。
在MATLAB算法中对参数初始化后运行程序,运行5次得相对最优解如下:
12117108695431
Shortest_length=
5179
作图结果如下:
图2MATLAB运行结果
对程序运行结果进行处理,可以得到以下结论:
(1)按地理经纬度考虑,在蚁群算法循环200次的结果下,给旅游者提供以下相对最优的方案:
徐州出发——常州中华恐龙园——舟山市普陀山——黄山市黄山——九江市庐山——武汉市黄鹤楼——洛阳市龙门石窟——西安市秦始皇兵马俑——祁县乔家大院——北京市八达岭长城——青岛市崂山——返回徐州,反向旅行一样不再赘述。
(2)按照此结果,画出地图上的仿真模拟图:
图3旅行路线仿真模拟图
(3)根据原题中的假设,制定具体的旅游计划如下:
5.109:
35-5.115:
从徐州出发,乘K58/K55(硬座)到达常州
5.115:
19-5.208:
入住于常州福兰特连锁旅店晋陵店
189元+60元(吃饭等其他费用)
5.208:
00-5.212:
在常州市恐龙园游玩4小时
160元
5.214:
40-5.216:
从常州出发,乘东方航空公司MU5692到达北京
960元
5.219:
10-5.221:
15
从北京机场换乘中国南方航空股份有限公司CZ3185到达宁波
1180元
5.221:
15-5.308:
入住于宁波格调时尚宾馆
148元
5.306:
30-5.308:
40-5.314:
200元+60元
5.314:
40-5.316:
5.316:
50-5.409:
02
02-5.418:
从宁波出发,乘K8498K-快速(硬座),中转K70/K67K-快速(硬座)到达黄山
92元
5.418:
25-5.508:
入住黄山宏村清和丹客栈
60元
00-5.515:
5.518:
28-5.603:
从黄山市出发,乘K70/K67(硬座),中转1586/1587普快(硬座)到达庐山
00-5.615:
5.619:
33-5.621:
从庐山出发,乘坐D3230D-动车(二等软座)到达汉口
80元
5.621:
46-5.708:
入住于武汉尚果创意酒店
169元
00-5.710:
5.710:
10-5.716:
35
从武汉出发,乘中国南方航空公司CZ8189,中转杭州,转乘G52717到达洛阳
1620元
5.716:
35-5.808:
198元
00-5.811:
游玩3个小时在洛阳市龙门石窟
120元+60元
5.811:
01-5.816:
05
从洛阳出发,乘坐K1130/K1131K-快速(硬座)到达西安
55元
5.816:
05-5.908:
入住于西安华清豪泰商务会所
130元
00-5.910:
90元+60元
5.910:
50-5.912:
从西安出发,乘坐中国南方航空公司CZ6319到达太原
310元
5.912:
27-5.913:
41
从太原出发,乘坐2602/2603到达祁县(硬座)
5.913:
41-5.916:
5.916:
49-5.918:
从祁县出发,乘坐L7816(硬座)到达太原
5.918:
15-5.919:
从太原出发,乘坐中国海南航空公司HU7371到达北京
300元
5.919:
35-5.1008:
入住于北京新宇桥宾馆
188元
00-5.1011:
在八达岭长城游玩3个小时
5.1013:
45-5.1015:
从北京出发,乘坐中国国际航空公司CA1575到达青岛
651元
5.1015:
05-5.1108:
入住于青岛海利鑫凤凰山庄
180元
00-5.1114:
在青岛市崂山游玩6小时
100元
5.1115:
25-5.1120:
20
从青岛出发,乘坐山东航空股份有限公司SC4823,中转徐州,乘坐中国四川航空公司3U8814到达徐州
1390元
表2问题2的具体行程
3.2试探法求解权值不变时有约束条件TSP问题的最优化模型
3.2.1在约束条件下TSP问题的模型建立
在问题3、4中增加了“费用在两千元以内”和“时间在5天以内”的约束条件,问题转化为求解汉密尔顿图子集在给定条件下的最优解,使得问题复杂度增加。
与无约束条件的单一权值问题相同,首先建立以图为基础的模型。
其中:
D=
为加权描述矩阵;
X=
为决策的0-1矩阵
对于(3)(4)问之中对于游览景点数最多的要求,0-1规划矩阵及其子集规模庞大,因此必须具体问题具体分析,结合本题实际情况,寻找行之有效的算法。
由于约束条件,应该先依据权值分配每个景点的优先级,再依据优先级对TSP问题进行动态分析,选取优先级高的景点试探满足一定条件之下的最优路线,并由蚁群算法得出固定的子集的路径最优解。
3.2.2模型的求解
1.问题(3)存在费用约束条件下的最优解
本题先用最小元素法进行估计,再由蚁群算法得到最优解,并用试探法验证合理性。
(1)改进的最小元素法
最小元素法的宗旨是每一步都取当前的最优值。
算法步骤为对费用矩阵D做n次下列循环:
在D中找到一个最小值Dij,令xij=1:
;
将D的第i列所有数据改为无穷大,如果
=n,可将D的i行数据全部改为正无穷大。
在循环过程中记录满足条件的xij和xij的个数。
由贪婪法,可得满足条件的最优解为徐州——北京——祁县——西安——洛阳——武汉——徐州,最小费用为1913元。
可以近似认为满足条件时最多的游览景点数为5.由于存在时