1、 1 2007 高教社杯全国大学生数学建模竞赛 承 诺 书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则 . 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。 我们知道,抄袭别人的成果是违反竞赛规则的 , 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。 我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受 到严肃处理。 我们参赛选择的题号是(从 A/B/C/D 中选择一项填写): B 我
2、们的参赛报名号为(如果赛区设置报名号的话): 所属学校(请填写完整的全名): 重 庆 大 学 参赛队员 (打印并签名 ) : 1. 熊国刚 2. 王杰 3. 黎明 指导教师 或 指导教师组负责人 (打印并签名 ): 龚劬 日期: 2007 年 9 月 21 日 赛区评阅编号(由赛区组委会评阅前进行编号) : 2 2007 高教社杯全国大学生数学建模竞赛 编 号 专 用 页 赛区评阅编号(由赛区组委会评阅前进行编号): 赛区评阅记录(可供赛区评阅时使用): 评 阅 人 评 分 备 注 全国统一编号(由赛区组委会送交全国前编号): 全国评阅编号(由全国组委会评阅前进行编号): 3 乘公交,看奥运
3、【摘要】 本文要解决的问题是以即将举行的 08 年北京奥运会为背景而提出的。人们为了能现场观看奥运会,必然会面对 出行方式与路线选择的问题。因此如何快速、高效地从众多可行路线中选出最优路线成为了解决此问题的关键。 鉴于公交系统网络的复杂性,我们没有采用常规的 Dijkstra 算法,而采用了高效的广度优先算法。其基本思想是从经过起(始)点的路线出发,搜寻出转乘次数不超过两次的可行路线,然后对可行解进行进一步处理。为满足不同查询者要求,我们对三个问题都分别建立了以时间、转乘次数、费用最小为目标的优化模型。 针对问题一(只考虑公汽系统),我们建立了模型一并通过 VC+编程得到了任意两个站点间的多种
4、最优路线,并得出所求站点间最优 路线的最优值,如下表所示: 出发站 终点站 S3359 S1828 S1557 S0481 S0971 S0485 S0008 S0073 S0148 S0485 S0087 S3676 最短耗时 ( min) 64 106 106 67 106 46 最少 转乘次数(次) 1 2 1 1 2 2 最少费用(元) 3 3 3 2 3 3 模型二是根据问题二(同时考虑公汽和地铁系统)建立的,同样用 VC+编程得到所求站点间的最优路线,如下表所示: 出发站 终点站 S3359 S1828 S1557 S0481 S0971 S0485 S0008 S0073 S01
5、48 S0485 S0087 S3676 最短耗时 ( min) 64 106 96 55 87.5 33 最少 转乘次数(次) 1 2 1 1 2 0 最少费用(元) 3 3 3 2 3 3 对问题三(将步 行考虑在内)我们建立了模型三的优化模型,然后在模型改进里又建立了图论模型。 本文的主要特点在于,所用算法的效率十分显著。在对原始数据仅做简单预处理的条件下,搜索任意站点间的最优路线所需的平均时间不超过 0.5 秒。另外,本文所建立的模型简单、所用算法比较清晰,易于程序实现,对公交线路自主查询计算机系统的实现具有现实指导作用。 关键字: 转乘次数 广度优先算法 查询效率 实时 系统 4 一
6、 问题的重述 传承华夏五千年的文明,梦圆十三亿华夏儿女的畅想, 2008 年 8月 8日这个不平凡的日子终于离我们越来越近 了! 在观看奥运的众多方式之中,现场观看无疑是最激动人心的。为了迎接 2008 年奥运会,北京公交做了充分的准备,首都的公交车大都焕然一新,增强了交通的安全性和舒适性,公交线路已达 800条以上,使得公众的出行更加通畅、便利。但同时也面临多条线路的选择问题。为满足公众查询公交线路的选择问题,某公司准备研制开发一个解决公交线路选择问题的自主查询计算机系统。 这个系统的核心是线路选择的模型与算法,另外还应该从实际情况出发考虑,满足查询者的各种不同需求。需要解决的问题有: 1、
7、仅考虑公汽线路,给出任意两公汽站点之间线路选 择问题的一般数学模型与算法。并根据附录数据,利用模型算法,求出以下 6对起始站到终到站最佳路线。 (1)、 S3359 S1828 (2)、 S1557 S0481 (3)、 S0971 S0485 (4)、 S0008 S0073 (5)、 S0148 S0485 (6)、 S0087 S3676 2、同时考虑公汽与地铁线路,解决以上问题。 3、假设又知道所有站点之间的步行时间,请你给出任意两站点之间线路选择问题的数学模型。 二 符号说明 iL:第 i条公汽线路标号 ,i=1,2 10400,当 i 520 时 , iL表示上行公汽路线 , 当i
8、 520 时 , iL 表示与上行路线 i 520L 相对应的下行公汽路线; i,gS:经过第 i条公汽路线的第 g个公汽站点标号; jT:第 j 条地铁路线标号 , j=1,2; j,hD:经过第 j 条地铁线路的第 h 个地铁站点标号; nLS:转乘 n次的路线; kT:选择第 k 种路线的总时间; kN1:选择第 k 种路线公汽换乘公汽的换乘次数; kN2:选择第 k 种路线地铁换乘地铁的换乘次数; kN3:选择第 k 种路线地铁换乘公汽的换乘次数; kN4:选择第 k 种路线公汽换乘地铁的换乘次数; k,mW :第 k 种路线、乘坐第 m辆公汽的计费方式,其中: 5 k,mW1 表示实
9、行单一票价, k,mW2 表示实行分段计价; k,mCL :第 k 种路线,乘坐第 m辆公汽的费用; kC:选择第 k 种路线的总费用; kmMS, :选择第 k 种路线,乘坐第 m辆公汽需要经过的公汽站个点数; k,nMD :选择第 k 种路线,乘坐第 n路地铁需要经过的地铁站个点数; k,mFS :表示对于第 k 种路线的第 m路公汽的路线是否选择步行, k,mFS 为 0-1变量, k,mFS 0 表示不选择步行, k,mFS 1 表示选择步行; k,nFD :对于第 k 种路线的第 n 路地铁的路线是否选择步行, k,nFD 为 0-1 变量,k,nFD 0 表示不选择步行, k,nF
10、D 1 表示选择步行; 三 模型假设 3.1 基本假设 1、相邻公汽站平均行驶时间 (包括停站时间 ): 3 分钟 2、相邻地铁站平均行驶时间 (包括停站 时间 ): 2.5 分钟 3、公汽换乘公汽平均耗时: 5 分钟 (其中步行时间 2 分钟 ) 4、地铁换乘地铁平均耗时: 4 分钟 (其中步行时间 2 分钟 ) 5、地铁换乘公汽平均耗时: 7 分钟 (其中步行时间 4 分钟 ) 6、公汽换乘地铁平均耗时: 6 分钟 (其中步行时间 4 分钟 ) 7、公汽票价:分为单一票价与分段计价两种; 单一票价: 1 元 其中分段计价的票价为: 0 20 站: 1 元 21 40 站: 2 元 40 站
11、以上: 3 元 8、地铁票价: 3 元(无论地铁线路间是否换乘) 9、假设同一地铁站对应的任意两个公汽站之间可以通过地铁站换乘,且无需支付地铁费 3.2 其它假设 10、查询者转乘公交的次数不超过两次; 11、所有环行公交线路都是双向的; 12、地铁线 T2 也是双向环行的; 13、各公交车都运行正常,不会发生堵车现象; 14、公交、列车均到站停车 四 问题的分析 6 在北京举行奥运会期间,公众如何在众多的交通路线中选择最优乘车路线或转乘路线去看奥运,这是我们要解决的核心问题。针对此问题,我们考虑从公交线路的角度来寻求最优线路。首先找出过任意两站点(公众所在地与奥运场地)的所有路线,将其存储起
12、来,形成数据文件。这些路线可能包含有直达公交线路,也有可能是两条公 交线路通过交汇而形成的(此时需要转乘公交一次),甚至更多公交线路交汇而成。然后在这些可行路线中搜寻最优路线。 对于路线的评价,我们可以分别以总行程时间,总转乘次数,总费用为指标,也可以将三种指标标准化后赋以不同权值形成一个综合指标。而最优路线则应是总行程时间最短,总费用最少或总转乘次数最少,或者三者皆有之。之所以这样考虑目标,是因为对于不同年龄阶段的查询者,他们追求的目标会有所不同,比如青年人比较热衷于比赛,因而他们会选择最短时间内到达奥运赛场观看比赛。而中年人则可能较倾向于综合指标最小,即较快、较省,转乘 次数又不多。老年人
13、总愿意以最省的方式看到奥运比赛。而对于残疾人士则总转乘次数最少为好。 不同的路线查询需求用图 4.1 表示如下: 图 4.1 公交线路查询目标图 经分析,本问题的解决归结为一个求最短路径的问题,但是传统的 Dijkstra最短路径算法并不适用于本问题,因为 Dijkstra 算法采用的存储结构和计算方法难以应付公交线路网络拓扑的复杂性 ,而且由于执行效率的问题,其很难满足实时系统对时间的严格要求。 为此我们在实际求解的过程中,采用了效率高效得 广度优先算法,其基本思路是 每 次搜索指定点,并将其所有未访 问过的近邻点加入搜索队列,循环搜索过程直到队列为空。此方法在后文中有详细说明。 五 建模前
14、的准备 为了后面建模与程序设计的方便,在建立此模型前,我们有必要做一些准备工作。 5 1 数据的存储 由于所给的数据格式不是很规范,我们需要将其处理成我们需要的数据存储格式。从所给文件中读出线路上的站点信息,存入 txt 文档中,其存储格式为:两行数据,第一行表示上行线上的站点信息,第二行表示下行线的站点信息,其中下行路线标号需要在原标号的基础上加上 520,用以区分上行线和下行线。 如果上行线与下行线的站点名不完全相同,那么 存储的两行数据相应的不完全相同,以公交线 L009 为例: L009:3739 0359 1477 2159 2377 2211 2482 2480 3439 1920
15、 1921 0180 2020 3027 2981 L529:2981 3027 2020 0180 1921 1920 3439 3440 2482 2211 2377 2159 1478 7 0359 3739 L529 为 L009 所对应的下行线路。 如果下行线是上行线原路返回,那么存储的两行数据中的站点信息刚好顺序颠倒,以公交线路 L001 为例: L001:0619 1914 0388 0348 0392 0429 0436 3885 3612 0819 3524 0820 3914 0128 0710 L521:0710 0128 3914 0820 3524 0819 3612
16、 3885 0436 0429 0392 0348 0388 1914 0619 如果是环线的情况(如图 5.1 所示),则可以等效为两条线路 : 顺时针方向: S1 S2 S3 S4 S1 S2 S3 S4; 逆时针方向: S1 S4 S3 S2 S1 S4 S3 S2。 经过 分析,此两条”单行路线”线路的作用等同于原环形路线 图 5.1 环行线路示意图 以环形公交线 L158 为例,此环形路线存储数据如下: L153: 534 649 2355 1212 812 171 170 811 2600 172 1585 814 264 3513 1215 1217 251 2604 2606
17、534 649 2355 1212 812 171 170 811 2600 172 1585 814 264 3513 1215 1217 251 2604 2606 L673: 534 2606 2604 251 1217 1215 3513 264 814 1585 172 2600 811 170 171 812 1212 2355 649 534 2606 2604 251 1217 1215 3513 264 814 1585 172 2600 811 170 171 812 1212 2355 649 在这里, L153 被看作成上行路线, L673 被当成下行路线。这样对于每条
18、公交线路都可以得到两行线路存储信息。 5 2 搜寻经过每个站点的公交路线 处理 5.1 所得信息,找出通过每个站点的所有 公交路线,并将它们存入数据文件中。 例如,通过搜寻得出经过站点 S0001 的线路和经过站点 S0002 的线路如下: 经过 S0001 的线路有: L421 经过 S0002 的线路有: L027 L152 L365 L395 L485 5 3 统计任意两条公交线路的相交(相近)站点 依次统计出任意两条公交线路之间相交 (相近 )的站点,将其存入 10401040 的矩阵 A中,但是这个矩阵的元素是维数不确定的向量,具体实现的时候可以将用队列表示。 例如:公交线路 L00
19、1 与公交线路 L025 相交的站点为 A125= S0619,S1914, S0388, S0348。 8 六 模型的建立与求解 6 1 模型一的建立 该模型针对问题一,仅考虑 公汽线路,先找出经过任意两个公汽站点i,gS与 i g,S最多转乘两次公汽的路线,然后再根据不同查询者的需求搜寻出最优路线。 6 1 1 公汽路线的数学表示 任意两个站点间的路线有多种情况,如果最多允许换乘两次,则换乘路线分别对应图 6.1 的四种情况。该图中的 A、 B 为出发站和终点站, C、 D、 E、 F 为转乘站点。 图 6.1 公汽路线图 对于任意两个 公汽站点i,gS与 i g,S,经过i,gS的公汽线
20、路表示为iL,有i,g iSL ;经过 i g,S 的公汽线路表示为 iL ,有 i g i,SL ; 1) 直达的路线0LS(如图 6.1( a)所示)表示为: 0 i1 i,g i1 i1i g,LS L S L,S L 2) 转乘一次的路线1LS(如图 6.1( b)所示)表示为: 1 i1 i2i ,g i1 i1 0 i1 i2i2 i2ig,LS (L,L)S LS LL,L LS;SCL SCL ,; 且其中: SC 为i1L, i2L 的一个交点; 3) 转乘两次的路线2LS(如图 6.1( c)所示)表示为: 2 i1 i2 i3 i,g i1 i1 i3 i3 i2 i1
21、i2i2ig,LS (L,L L)S LS L L,L),(L,L)( L,L)L 11, , ;( LS; S通过以上 转乘路线的 建模过程,可以看出不同转乘次数间可作成迭代关系,进而对更多转乘次数的路线进行求寻。不过考虑到实际情况,转乘次数以不超过2 次为佳,所以本文未对转乘三次及三次以上的情形做讨论。 6 1 2最优路线模型的建立 找出了任意两个公汽站点间的可行路线,就可以对这些路线按不同需求进行9 选择,找出最优路线了 : 1)以时间最短作为最优路线的模型:行程时间kT等于乘车时间与转车时间之和。 N 1 1k k , m km1kkM in T 3 (M S 1) 5 N1m 1,2
22、, ,N1 1; k 1,2, , k ggg ggg ( 6.1 式) 其中,第 k 路线是以上转乘路线中的一种或几种。 2)以转乘次数最少作为最优路线的模型: kMinN1 ( 6.2 式) 此模型等效为以上转乘路线按直达、转乘一次、两次的优先次序来考虑。 3)以费用最少作为最优路线的模型: k k,mmMin C CL( 6.3 式) 其中,k ,m k ,mk ,mk ,mk ,m1 W 1 W 2, 202 W 2 , 40CL3 W 2 , k,mk,mk,m或 0 MS21 MS40 MS ( 6.4 式) 6 1 3模型的算法描述 针对该问题的优化模型,我们采用广度优先算法找出
23、任意两个站点间的可行路线,然后搜索出最优路线。现将此算法运用到该问题中,结合图 6.2 叙述如下:(该图中的i,gS、 i g,S、1,1S、2,1S、2,2S表示公汽站点,1L、2L、3L、4L、5L、6L表示公汽线路。其中 ( a)、( b)、( c)图分别表示了从点i,gS到点i g,S 直达、转乘一次、转乘两次的情况) 图 6.2 公交直达、转乘图 ( 1)首先输入需要查询的两个站点i,gS与 i g,S(假设i,gS为起始站, i g,S为终点站); ( 2)搜索出经过i,gS的公汽线路iL( i=1,2, ,m)和经过 i g,S的公汽线路 iL (i =1,2, , n),存入数
24、据文件;判断是 iL 与 iL 是否存在相同路线,若10 有则 站点i,gS与 i g,S之间有直达路线 (如图 6.2 中的1L),则该路线是换乘次数最少 (换乘次数等于 0)的路线,若有多条直达路线,则可以在此基础上找出时间最省的路线;这样可以找出所有直达路线,存入数据文件; ( 3)找出经过i,gS的公汽线路iL(如图 6.2 中的2L)中的另一站点i1,g1S和经过 i g,S的公汽线路 iL中的另一站点 11i g,S。判断i1,g1S与 11i g,S中是否存在相同的点,若存在 (如图 6.2 中的1,1S)则 站点i,gS与 i g,S间有一次换乘的路线 (如图 6.2 中的2L
25、与3L),该相同点即为换乘站点;这样又找出了一次换乘路线,存入数据文件; ( 4)再搜索出经过iL(如图 6.2 中的4L)线路上除了站点i,gS的另一站点i2,g1S(如图 6.2中的2,1S)的公汽线路i6L(如图 6.2中的6L),找出公汽线路i6L上的其他站点 i2,g2S ;判断,如果 i2,g2S 与经过 i g,S的公汽线路 iL中 的其他站点 22i g,S存在相同的点 (如图 6.2 中的2,2S),则i,gS与 i g,S间有二次换乘的路线(如图 6.2 中的4L、6L、5L),该相同点和点i2,g1S是换乘站点;将此二次换乘的路线存入数据文件中; ( 5)对上述存储的经过
26、 两个站点i,gS与 i g,S的不同路线,根据不同模型进行最优路线进行搜索,得出查询者满意的最优路线。 6. 1. 4 模型一的求解 根据以上算法和前面建立的模型一,用 VC+进行编程(程序见附录)就可以得出不同目标下的最优路线。 1) 以 耗时最少为目标的最优路线 起始站 S3359 到终到站 S1828 耗时最少为 64 min,耗时最少的最优路线(转乘次数较少,费用 较省的路线)有 28 条 (注:表 6.1 选择了其中的 10 条表示 ); 起始站 S1557 到终到站 S0481 耗时最少为 106 min,耗时最少的最优路线有 2 条;起始站 S0971 到终到站 S0485 耗
27、时最少为 106 min,耗时最少的最优路线有 2 条;起始站 S0008 到终到站 S0073 耗时最少为 67 min,耗时最少的最优路线有 2 条;起始站 S0148 到终到站 S0485 耗时最少为 106 min,耗时最少的最优路线有 3 条;起始站 S0087 到终到站 S3676 耗时最少为 46 min,耗时最少的最优路线有 12 条;其耗时最少的最优路线如 表 6.1 所示。 表 6.1 耗时最少的最优路线表 起始站 公汽线路 中转站 公汽线路 中转站 公汽线路 终到站 转乘次数 所需费用 S3359 L0535 S2903 L1005 S1784 L0687 S1828 2 3 S3359 L0535 S2903 L1005 S1784 L0737 S1828 2 3