铁路中转换乘站推荐系统设计与Matlab实现

2019-05-24 14:17霍雷刚钟雅婷李永玉
软件导刊 2019年5期

霍雷刚 钟雅婷 李永玉

摘 要:为改善铁路乘客购票及出行体验,针对售票系统换乘站推荐功能不全的缺陷,设计和实现基于Matlab的铁路中转换乘站推荐系统,实现数据采集、整理、换乘站点推荐等功能。采用Matlab语言编程,利用爬虫技术获取各铁路站点信息和车次信息,将获取的信息进行整理和网络化建模,确定模型各条边的权值,最后采用最短路径算法得到换乘站。实验结果表明,结合列车信息和最短路径算法可为乘客推荐有效的换乘站。

关键词:铁路中转换乘;最短路径算法;Matlab

DOI:10. 11907/rjdk. 181939

中图分类号:TP319 文献标识码:A 文章编号:1672-7800(2019)005-0142-04

Abstract:To improve rail passengers' ticket purchase and travel experience, a recommendation system for railway interchange stations based on MATLAB is designed and implemented in allusion to the deficiency of the existing ticket selling system, so that the functions of data collection, sorting and transfer station recommendation can be realised. This system mainly uses the MATLAB programming language and the crawler technology to obtain the information of each railway station and train number, collates the information obtained and establishes the network model, determines the weight of each edge of the model, and finally uses the shortest path algorithm to get the transfer station. The experimental results on the railway data in Guangxi area show that the combination of train information and shortest path algorithm can recommend effective transfer stations for passengers.

Key Words:railway transfer; shortest path algorithm; Matlab

0 引言

中国铁路线路密集,铁路交通四通八达。铁路出行因其覆盖面广、车次多、价格实惠、订票方便、安全性高等特点,成为人们选择最多的中远途出行方式,也是交通行业发展的重点。中国铁路客户服务中心12306网站、支付宝、去哪儿网、携程网等为旅客提供订票、查询、车站引导等服务,大大提高了铁路旅客的出行体验。虽然铁路线路的开通和开行方案充分考虑了经济、地域和客流时变性等因素,但仍存在部分旅客出行不能通过直达方式满足的情况,为此众多学者进行了研究。铁路换乘研究集中在以下3个方面:

(1)站内换乘空间和流线优化。通过旅客出入站路线和建筑结构设计,提高换乘空间利用率,减少中转旅客重复进出站次数,提高铁路枢纽换乘和转乘其它交通系统的便利性。周覃龙等[1]提出应高度重视换乘问题,建立站内换乘的合理流线,以最短行程、最少时间完成换乘,从优化客运站总平面布置图、完善客运建筑规划设计、既有客运站优化补强以及运营管理等方面初步提出应对措施。刘振华等[2]提出同站台换乘、站厅换乘以及通道换乘等方式,科学分析了铁路运输与城市轨道交通的换乘方式。何相聚等[3]以厦门北站为例,对铁路客运站换乘空间综合设计提出建议。马述等[4] 针对市域铁路与城市轨道交通换乘问题,提出通道换乘方案。李亚茹等[5] 探討了武汉市城际铁路站前换乘空间设计方案。施诺等[6]设计和实现了铁路枢纽旅客精细化换乘服务系统,增加了铁路车站内部设施设备查询及走行路径搜索功能。程璐等[7]以铁路与常规公交的换乘衔接为主要对象,研究二者之间运营时间衔接与站点布局衔接的优化。

(2)铁路运行图优化。通过客流量等数据分析,优化铁路运行路线和客运站点选址和布局以及列车运行时间等,提高旅客出行体验。张旭等[8]利用随机期望值模型和遗传算法,提出高铁冗余时间整体布局优化方案。张睿[9] 提出大站旅客换乘接续的高铁运行调整方法。李元凯等[10]提出高铁列车接续安排等可行性建议。李智等[11]基于周期事件规划理论,提出基于换乘最优的城际铁路周期运行图编制模型。刘广武等[12] 通过分析跨线客流组织模式提出部分换乘模式。

(3)铁路枢纽内换乘站点推荐。主要针对旅客出发地与目的地之间无直达列车或直达列车车票售罄情况,为旅客提供中转换乘建议。苏焕银等[13]提出基于铁路有效路径的换乘方案快速搜索方法。尹伊伊等[14] 选取具有始发车次、具备客运组织换乘能力的大站作为换乘车站,对比分析了常用的Dijkstra算法及启发式A*算法,择优选取启发式A*算法改进换乘策略。李秦阳等[15] 利用网络等价变换方法,建立了最短时间网络优化模型。张琦等[16] 引入旅行时间和服务频率两种权重计算介数,实现对铁路车站枢纽影响力的量化评估。利用SpaceP方式构建局部网络,针对列车接续关系及其特征提出修正表达及网络构建方法。李丽辉等[17] 提出一种比较OD最短路径距离的统计算法用于换乘需求统计,保留了详细的车次换乘信息。

12306网站近期开通了接续换乘功能,例如,2018年5月29日通过12306网站可查询到北京到南京有60趟直达车,乘客可通过页面上的“车票预订”购买车票,该网站会自动显示换乘站的若干方案。但研究发现,该功能仅适用于客流量较大的中等以上城市,仅提供换乘一次的部分列车余票信息。虽然该网站可手动输入中转站,但并不能提供一个中转站选择方案。大多数市县级火车站之间的中转换乘仍需人工经验或查看地图。如通过12306查詢不到贺州到百色列车信息,使用“接续换乘”也未查询到接续换乘方案。但贺州到百色至少存在一条经由广西南宁的中转路线,对于不熟悉的旅客很难知道这一方案。因此,改善铁路换乘系统成为我们的研究重点。

最短路径问题是图论研究中一个经典的算法问题,旨在寻找图(由节点和路径组成的)中两节点之间的最短路径。铁路中转换乘站点推荐可看作是确定起点和终点的最短路径问题。

Matlab是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级计算语言,并提供界面编程工具,该软件以工具箱的形式提供常用算法函数。

本文提出一种铁路换乘中转站推荐算法。利用爬虫技术、最短路径算法,设计和实现了基于Matlab的铁路换乘中转站推荐系统,针对小型城市也能给出很好的换乘方案。

1 系统设计

1.1 系统总体设计

本文首先利用爬虫技术获取各铁路站点信息和车次信息,然后将获取的信息进行整理和网络化建模,最后采用最短路径算法推荐换乘站。最短路径算法有很多种,最常用的是Dijkstra算法,考虑到网络特征,需要对算法进行优化[18-19]。系统采用Matlab语言编程实现,通过GUI界面与用户交互,并可跳转到12306网站。中转换乘方案总体设计如图1所示。

1.2 详细功能设计

(1)系统主要功能。本系统核心部分包括数据获取、数据整理、站点推荐和可视化。数据获取采用Matlab网络爬虫技术和地理信息API,获取各站点名称、位置以及列车时刻表。数据整理包括两部分:①将站点筛选和地理位置经纬度转换为平面坐标;②根据列车运行信息构建图模型。站点推荐即将Matlab最短路径算法应用于构建的图模型。可视化方便用户和系统交互以及展示站点位置和列车运行路线。

(2)系统模块设计。系统设计为数据获取与整理模块、站点推荐模块和可视化模块。将这几个模块整合后的用户界面设计如图2所示。

(3)数据库设计。系统采用应用较为广泛的Excel表格存放站点和车次等信息,方便用户自行设计数据和对获取数据进行操作。Matlab提供的系统函数xlsread和xlswrite分别用于读、写这种文件格式。

2 系统功能实现

2.1 数据获取

(1)列车运行信息获取。以IP138网站为例,采用Matlab网络爬虫技术获取各车站的站点名称及列车时刻表等。函数webread用于获取网页源码,以regexp和正则表达式[20]提取内容,用xlswrite将获取的内容存入Excel文件。

获取广西区内站点名称代码如下:

url_GX_station='http://qq.ip138.com/train/guangxi/';

sourcefile=webread(url_GX_station);

expr1='(\w*)';

[stationfile, station_tokens]= regexp(sourcefile, expr1, 'match', 'tokens');

获取经过某个站点(station_tokens{idx}{1})的所有车次信息:

tmp_url=[url_GX_station,station_tokens{idx}{1},'.htm'];

sourcefile=webread(tmp_url);

expr2 = '(\w*)';

[nofile, no_tokens] = regexp(sourcefile, expr2, 'match', 'tokens');

获取经过某个站点的某个车次运行信息({‘车次‘当前车次车站编号 ‘车站 ‘到达时间‘发车时间‘走行时间(小时)‘里程(公里)}):

sourcefile=webread(['http://qq.ip138.com/train/',no_tokens{i}{1},'.htm']);

expr3=['(\d*)\s*(\w*)\s*(\d\d:\d\d)\s*(\d\d:\d\d)\s*(\d\d:\d\d)\s*([-\d]*)\s*'];

[detailfile, detail_tokens] = regexp(sourcefile, expr3, 'match', 'tokens');

for it=1:length(detail_tokens)

i_final=i_final+1; final_detail(i_final,1:7)=cellstr({no_tokens{i}{2},detail_tokens{it}{:}});

end

获取的数据存储到Excel后效果如图 3所示。

(2)站点位置信息获取。该步骤主要获取站点的经纬度信息以方便展示。该数据可通过百度地图API查询,为了方便本文直接采用其它网站提供的批量查询功能,对部分查询不到的站点再进行精细查询,根据之后的可视化模块显示结果人工校正。

2.2 数据整理

(1)将经纬度转化为平面坐标的核心代码如下:

% 定义投影结构,这里对mercator投影结构进行定义,然后对mstruct进行补全

mstruct=defaultm('mercator');

%定义椭球体长轴,椭率,坐标原点

mstruct.geoid=[ 6378137,0.0818191908426215];

mstruct.origin=[0,0,0];

mstruct=defaultm(mstruct);

% 进行投影和数据转换:地理坐标投影到直角坐标:

[XData,YData] =projfwd(mstruct,data(2,:),data(1,:));

(2)将列车运行信息转化为图模型。去除广西区外的站点,简化每个车次对应的数据,例如对图3中的2011次列车简化后的数据如图4所示。

其中,第1列为车次,第二列表示该车次经过广西区内的站点数量,其它列为经过的每个站点名称。为使用Matlab提供的构造有向图函数digraph,需要提供起点、终点、权重和节点名称信息。对于2011次列车,起点向量为S=[‘三江县,‘融安,‘融水,‘柳江,‘来宾,‘黎塘],终点向量为T=[‘融安,‘融水,‘柳江,‘来宾,‘黎塘,南宁],向量的构建可采用循环拼接方式实现。权重w可以是对应起点和终点的运行时间、里程、经历的站点个数等,同样采用循环拼接的方式得出。names指无重复的所有广西区站点名称。

构建图模型核心代码即Matlab函数调用:G=digraph(S,T,W,names)。

2.3 站点推荐

由构建的图模型调用Matlab函数的shortestpath求出最短距离,即得到中转换乘站点,核心代码为:[PATH,D,EDGEPATH]=shortestpath(G,'贺州','桂林')。PATH中包含起点、中转站和终点站名称,EDGEPATH包含车次信息。

2.4 可视化

可视化包括站点位置、最短路径和用户界面。

结合站点的平面坐标,利用Matlab提供的plot、line、text、figure函数得到站点的位置和简化的列车线路,如图 5所示。

为方便用户验证推荐方案,采用Matlab提供的函数highlight高亮显示推荐的路径,显示效果如图6所示。

3 结果分析

为了验证实验系统的有效性,通过随机挑选广西区内站点作为出发站和到达站,将本文设计的系统与12306網站的接续换乘和中转查询进行对比,如表1所示。在任意两站点之间,本系统均可判断是否有直达车次。如果不存在直达车次则推荐满足最短路径的换乘站。

由实验结果可知,通过构建图模型,利用Matlab最短路径算法建立铁路客运换乘网络以实现推荐中转站功能是可行的。

4 结语

本文利用网络爬虫技术和最短路径算法,设计并实现了基于Matlab的铁路换乘站点推荐系统。系统实现了数据采集、数据整理、换乘站点推荐、数据可视化等功能。实验表明,系统功能模块运行正常,基本满足旅客需求,可为旅客提供购票参考,具有一定的实用价值。后续将进行扩大站点涵盖范围、实时获取车票信息以及降低模型复杂度研究。

参考文献:

[1] 周覃龙. 解决铁路中转旅客站内换乘问题的探讨[J]. 高速铁路技术,2016 (3):16-18.

[2] 刘振华. 铁路运输与城市轨道交通的换乘研究[J]. 智能城市, 2017(2):164-169.

[3] 何相聚. 铁路客运站换乘空间浅析——以厦门北站为例[J]. 中外建筑,2017(8):172-174.

[4] 马述. 市域铁路与城市轨道交通换乘方案探讨[C]. 中国铁道学会工程分会,中国铁道学会工程分会第7届线路专委会第二次会议论文集, 2017.

[5] 李亚茹. 武汉市城际铁路站前换乘空间设计研究[D]. 武汉:湖北工业大学,2017.

[6] 施诺. 铁路枢纽旅客精细化换乘服务系统设计与实现[D]. 北京:北京交通大学,2017.

[7] 程璐. 铁路客运枢纽与常规公交换乘衔接问题研究[D]. 兰州:兰州交通大学,2017.

[8] 张旭. 高速铁路换乘衔接下运行图冗余时间优化[J]. 物流科技,2017(2):107-110.

[9] 张睿. 考虑大站旅客换乘接续的高速铁路列车运行调整方案研究[D]. 北京交通大学,2016.

[10] 李元凯,李海鹰,王莹,等. 换乘模式下的京沪高速铁路运输组织研究[J]. 铁道运输与经济,2017(1):46-50.

[11] 李智,张琦,袁志明. 基于换乘最优的城市圈城际铁路运行图研究[J]. 交通运输系统工程与信息,2015(3):114-119,139.

[12] 刘广武,连义平,张凯. 旅游轨道交通运输组织模式研究[J]. 铁道运输与经济, 2018(1):106-110.

[13] 苏焕银,史峰,张佩,等. 基于铁路有效路径的换乘方案快速搜索方法[J]. 铁道科学与工程学报,2016(12):2496-2502.

[14] 尹伊伊,王富章,单杏花,等. 启发式算法在铁路换乘的应用[J]. 铁路计算机应用,2016(1):20-23,40.

[15] 李秦阳,李宗平. 一类铁路旅客换乘问题的网络优化模型[J]. 兰州交通大学学报,2012(3):61-64.

[16] 张琦,马艳. 基于复杂网络的高速铁路列车服务网络特征[J]. 铁道科学与工程学报,2018(3):29-33.

[17] 李丽辉,朱建平,史峰,等. 高速铁路换乘需求统计算法研究[J]. 铁道科学与工程学报,2018(5):251-255

[18] 张渭军,王华. 城市道路最短路径的Dijkstra算法优化[J]. 长安大学学报:自然科学版,2005(6):89-92.

[19] 王树西,吴政学. 改进的Dijkstra最短路径算法极其应用研究[J]. 计算机科学,2012(5):1201-1208.

[20] 胡军伟,秦弈青,张伟. 正则表达式在Web信息抽取中的作用[J]. 北京信息科技大学学报:自然科学版,2011(6):321-329.

(责任编辑:杜能钢)