霍雷剛 鐘雅婷 李永玉
摘 要:為改善鐵路乘客購票及出行體驗,針對售票系統(tǒng)換乘站推薦功能不全的缺陷,設計和實現(xiàn)基于Matlab的鐵路中轉(zhuǎn)換乘站推薦系統(tǒng),實現(xiàn)數(shù)據(jù)采集、整理、換乘站點推薦等功能。采用Matlab語言編程,利用爬蟲技術獲取各鐵路站點信息和車次信息,將獲取的信息進行整理和網(wǎng)絡化建模,確定模型各條邊的權值,最后采用最短路徑算法得到換乘站。實驗結(jié)果表明,結(jié)合列車信息和最短路徑算法可為乘客推薦有效的換乘站。
關鍵詞:鐵路中轉(zhuǎn)換乘;最短路徑算法;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 引言
中國鐵路線路密集,鐵路交通四通八達。鐵路出行因其覆蓋面廣、車次多、價格實惠、訂票方便、安全性高等特點,成為人們選擇最多的中遠途出行方式,也是交通行業(yè)發(fā)展的重點。中國鐵路客戶服務中心12306網(wǎng)站、支付寶、去哪兒網(wǎng)、攜程網(wǎng)等為旅客提供訂票、查詢、車站引導等服務,大大提高了鐵路旅客的出行體驗。雖然鐵路線路的開通和開行方案充分考慮了經(jīng)濟、地域和客流時變性等因素,但仍存在部分旅客出行不能通過直達方式滿足的情況,為此眾多學者進行了研究。鐵路換乘研究集中在以下3個方面:
(1)站內(nèi)換乘空間和流線優(yōu)化。通過旅客出入站路線和建筑結(jié)構設計,提高換乘空間利用率,減少中轉(zhuǎn)旅客重復進出站次數(shù),提高鐵路樞紐換乘和轉(zhuǎn)乘其它交通系統(tǒng)的便利性。周覃龍等[1]提出應高度重視換乘問題,建立站內(nèi)換乘的合理流線,以最短行程、最少時間完成換乘,從優(yōu)化客運站總平面布置圖、完善客運建筑規(guī)劃設計、既有客運站優(yōu)化補強以及運營管理等方面初步提出應對措施。劉振華等[2]提出同站臺換乘、站廳換乘以及通道換乘等方式,科學分析了鐵路運輸與城市軌道交通的換乘方式。何相聚等[3]以廈門北站為例,對鐵路客運站換乘空間綜合設計提出建議。馬述等[4] 針對市域鐵路與城市軌道交通換乘問題,提出通道換乘方案。李亞茹等[5] 探討了武漢市城際鐵路站前換乘空間設計方案。施諾等[6]設計和實現(xiàn)了鐵路樞紐旅客精細化換乘服務系統(tǒng),增加了鐵路車站內(nèi)部設施設備查詢及走行路徑搜索功能。程璐等[7]以鐵路與常規(guī)公交的換乘銜接為主要對象,研究二者之間運營時間銜接與站點布局銜接的優(yōu)化。
(2)鐵路運行圖優(yōu)化。通過客流量等數(shù)據(jù)分析,優(yōu)化鐵路運行路線和客運站點選址和布局以及列車運行時間等,提高旅客出行體驗。張旭等[8]利用隨機期望值模型和遺傳算法,提出高鐵冗余時間整體布局優(yōu)化方案。張睿[9] 提出大站旅客換乘接續(xù)的高鐵運行調(diào)整方法。李元凱等[10]提出高鐵列車接續(xù)安排等可行性建議。李智等[11]基于周期事件規(guī)劃理論,提出基于換乘最優(yōu)的城際鐵路周期運行圖編制模型。劉廣武等[12] 通過分析跨線客流組織模式提出部分換乘模式。
(3)鐵路樞紐內(nèi)換乘站點推薦。主要針對旅客出發(fā)地與目的地之間無直達列車或直達列車車票售罄情況,為旅客提供中轉(zhuǎn)換乘建議。蘇煥銀等[13]提出基于鐵路有效路徑的換乘方案快速搜索方法。尹伊伊等[14] 選取具有始發(fā)車次、具備客運組織換乘能力的大站作為換乘車站,對比分析了常用的Dijkstra算法及啟發(fā)式A*算法,擇優(yōu)選取啟發(fā)式A*算法改進換乘策略。李秦陽等[15] 利用網(wǎng)絡等價變換方法,建立了最短時間網(wǎng)絡優(yōu)化模型。張琦等[16] 引入旅行時間和服務頻率兩種權重計算介數(shù),實現(xiàn)對鐵路車站樞紐影響力的量化評估。利用SpaceP方式構建局部網(wǎng)絡,針對列車接續(xù)關系及其特征提出修正表達及網(wǎng)絡構建方法。李麗輝等[17] 提出一種比較OD最短路徑距離的統(tǒng)計算法用于換乘需求統(tǒng)計,保留了詳細的車次換乘信息。
12306網(wǎng)站近期開通了接續(xù)換乘功能,例如,2018年5月29日通過12306網(wǎng)站可查詢到北京到南京有60趟直達車,乘客可通過頁面上的“車票預訂”購買車票,該網(wǎng)站會自動顯示換乘站的若干方案。但研究發(fā)現(xiàn),該功能僅適用于客流量較大的中等以上城市,僅提供換乘一次的部分列車余票信息。雖然該網(wǎng)站可手動輸入中轉(zhuǎn)站,但并不能提供一個中轉(zhuǎn)站選擇方案。大多數(shù)市縣級火車站之間的中轉(zhuǎn)換乘仍需人工經(jīng)驗或查看地圖。如通過12306查詢不到賀州到百色列車信息,使用“接續(xù)換乘”也未查詢到接續(xù)換乘方案。但賀州到百色至少存在一條經(jīng)由廣西南寧的中轉(zhuǎn)路線,對于不熟悉的旅客很難知道這一方案。因此,改善鐵路換乘系統(tǒng)成為我們的研究重點。
最短路徑問題是圖論研究中一個經(jīng)典的算法問題,旨在尋找圖(由節(jié)點和路徑組成的)中兩節(jié)點之間的最短路徑。鐵路中轉(zhuǎn)換乘站點推薦可看作是確定起點和終點的最短路徑問題。
Matlab是美國MathWorks公司出品的商業(yè)數(shù)學軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級計算語言,并提供界面編程工具,該軟件以工具箱的形式提供常用算法函數(shù)。
本文提出一種鐵路換乘中轉(zhuǎn)站推薦算法。利用爬蟲技術、最短路徑算法,設計和實現(xiàn)了基于Matlab的鐵路換乘中轉(zhuǎn)站推薦系統(tǒng),針對小型城市也能給出很好的換乘方案。
1 系統(tǒng)設計
1.1 系統(tǒng)總體設計
本文首先利用爬蟲技術獲取各鐵路站點信息和車次信息,然后將獲取的信息進行整理和網(wǎng)絡化建模,最后采用最短路徑算法推薦換乘站。最短路徑算法有很多種,最常用的是Dijkstra算法,考慮到網(wǎng)絡特征,需要對算法進行優(yōu)化[18-19]。系統(tǒng)采用Matlab語言編程實現(xiàn),通過GUI界面與用戶交互,并可跳轉(zhuǎn)到12306網(wǎng)站。中轉(zhuǎn)換乘方案總體設計如圖1所示。
1.2 詳細功能設計
(1)系統(tǒng)主要功能。本系統(tǒng)核心部分包括數(shù)據(jù)獲取、數(shù)據(jù)整理、站點推薦和可視化。數(shù)據(jù)獲取采用Matlab網(wǎng)絡爬蟲技術和地理信息API,獲取各站點名稱、位置以及列車時刻表。數(shù)據(jù)整理包括兩部分:①將站點篩選和地理位置經(jīng)緯度轉(zhuǎn)換為平面坐標;②根據(jù)列車運行信息構建圖模型。站點推薦即將Matlab最短路徑算法應用于構建的圖模型。可視化方便用戶和系統(tǒng)交互以及展示站點位置和列車運行路線。
(2)系統(tǒng)模塊設計。系統(tǒng)設計為數(shù)據(jù)獲取與整理模塊、站點推薦模塊和可視化模塊。將這幾個模塊整合后的用戶界面設計如圖2所示。
(3)數(shù)據(jù)庫設計。系統(tǒng)采用應用較為廣泛的Excel表格存放站點和車次等信息,方便用戶自行設計數(shù)據(jù)和對獲取數(shù)據(jù)進行操作。Matlab提供的系統(tǒng)函數(shù)xlsread和xlswrite分別用于讀、寫這種文件格式。
2 系統(tǒng)功能實現(xiàn)
2.1 數(shù)據(jù)獲取
(1)列車運行信息獲取。以IP138網(wǎng)站為例,采用Matlab網(wǎng)絡爬蟲技術獲取各車站的站點名稱及列車時刻表等。函數(shù)webread用于獲取網(wǎng)頁源碼,以regexp和正則表達式[20]提取內(nèi)容,用xlswrite將獲取的內(nèi)容存入Excel文件。
獲取廣西區(qū)內(nèi)站點名稱代碼如下:
url_GX_station='http://qq.ip138.com/train/guangxi/';
sourcefile=webread(url_GX_station);
expr1='
[stationfile, station_tokens]= regexp(sourcefile, expr1, 'match', 'tokens');
獲取經(jīng)過某個站點(station_tokens{idx}{1})的所有車次信息:
tmp_url=[url_GX_station,station_tokens{idx}{1},'.htm'];
sourcefile=webread(tmp_url);
expr2 = '
[nofile, no_tokens] = regexp(sourcefile, expr2, 'match', 'tokens');
獲取經(jīng)過某個站點的某個車次運行信息({‘車次‘當前車次車站編號 ‘車站 ‘到達時間‘發(fā)車時間‘走行時間(小時)‘里程(公里)}):
sourcefile=webread(['http://qq.ip138.com/train/',no_tokens{i}{1},'.htm']);
expr3=['
[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
獲取的數(shù)據(jù)存儲到Excel后效果如圖 3所示。
(2)站點位置信息獲取。該步驟主要獲取站點的經(jīng)緯度信息以方便展示。該數(shù)據(jù)可通過百度地圖API查詢,為了方便本文直接采用其它網(wǎng)站提供的批量查詢功能,對部分查詢不到的站點再進行精細查詢,根據(jù)之后的可視化模塊顯示結(jié)果人工校正。
2.2 數(shù)據(jù)整理
(1)將經(jīng)緯度轉(zhuǎn)化為平面坐標的核心代碼如下:
% 定義投影結(jié)構,這里對mercator投影結(jié)構進行定義,然后對mstruct進行補全
mstruct=defaultm('mercator');
%定義橢球體長軸,橢率,坐標原點
mstruct.geoid=[ 6378137,0.0818191908426215];
mstruct.origin=[0,0,0];
mstruct=defaultm(mstruct);
% 進行投影和數(shù)據(jù)轉(zhuǎn)換:地理坐標投影到直角坐標:
[XData,YData] =projfwd(mstruct,data(2,:),data(1,:));
(2)將列車運行信息轉(zhuǎn)化為圖模型。去除廣西區(qū)外的站點,簡化每個車次對應的數(shù)據(jù),例如對圖3中的2011次列車簡化后的數(shù)據(jù)如圖4所示。
其中,第1列為車次,第二列表示該車次經(jīng)過廣西區(qū)內(nèi)的站點數(shù)量,其它列為經(jīng)過的每個站點名稱。為使用Matlab提供的構造有向圖函數(shù)digraph,需要提供起點、終點、權重和節(jié)點名稱信息。對于2011次列車,起點向量為S=[‘三江縣,‘融安,‘融水,‘柳江,‘來賓,‘黎塘],終點向量為T=[‘融安,‘融水,‘柳江,‘來賓,‘黎塘,南寧],向量的構建可采用循環(huán)拼接方式實現(xiàn)。權重w可以是對應起點和終點的運行時間、里程、經(jīng)歷的站點個數(shù)等,同樣采用循環(huán)拼接的方式得出。names指無重復的所有廣西區(qū)站點名稱。
構建圖模型核心代碼即Matlab函數(shù)調(diào)用:G=digraph(S,T,W,names)。
2.3 站點推薦
由構建的圖模型調(diào)用Matlab函數(shù)的shortestpath求出最短距離,即得到中轉(zhuǎn)換乘站點,核心代碼為:[PATH,D,EDGEPATH]=shortestpath(G,'賀州','桂林')。PATH中包含起點、中轉(zhuǎn)站和終點站名稱,EDGEPATH包含車次信息。
2.4 可視化
可視化包括站點位置、最短路徑和用戶界面。
結(jié)合站點的平面坐標,利用Matlab提供的plot、line、text、figure函數(shù)得到站點的位置和簡化的列車線路,如圖 5所示。
為方便用戶驗證推薦方案,采用Matlab提供的函數(shù)highlight高亮顯示推薦的路徑,顯示效果如圖6所示。
3 結(jié)果分析
為了驗證實驗系統(tǒng)的有效性,通過隨機挑選廣西區(qū)內(nèi)站點作為出發(fā)站和到達站,將本文設計的系統(tǒng)與12306網(wǎng)站的接續(xù)換乘和中轉(zhuǎn)查詢進行對比,如表1所示。在任意兩站點之間,本系統(tǒng)均可判斷是否有直達車次。如果不存在直達車次則推薦滿足最短路徑的換乘站。
由實驗結(jié)果可知,通過構建圖模型,利用Matlab最短路徑算法建立鐵路客運換乘網(wǎng)絡以實現(xiàn)推薦中轉(zhuǎn)站功能是可行的。
4 結(jié)語
本文利用網(wǎng)絡爬蟲技術和最短路徑算法,設計并實現(xiàn)了基于Matlab的鐵路換乘站點推薦系統(tǒng)。系統(tǒng)實現(xiàn)了數(shù)據(jù)采集、數(shù)據(jù)整理、換乘站點推薦、數(shù)據(jù)可視化等功能。實驗表明,系統(tǒng)功能模塊運行正常,基本滿足旅客需求,可為旅客提供購票參考,具有一定的實用價值。后續(xù)將進行擴大站點涵蓋范圍、實時獲取車票信息以及降低模型復雜度研究。
參考文獻:
[1] 周覃龍. 解決鐵路中轉(zhuǎn)旅客站內(nèi)換乘問題的探討[J]. 高速鐵路技術,2016 (3):16-18.
[2] 劉振華. 鐵路運輸與城市軌道交通的換乘研究[J]. 智能城市, 2017(2):164-169.
[3] 何相聚. 鐵路客運站換乘空間淺析——以廈門北站為例[J]. 中外建筑,2017(8):172-174.
[4] 馬述. 市域鐵路與城市軌道交通換乘方案探討[C]. 中國鐵道學會工程分會,中國鐵道學會工程分會第7屆線路專委會第二次會議論文集, 2017.
[5] 李亞茹. 武漢市城際鐵路站前換乘空間設計研究[D]. 武漢:湖北工業(yè)大學,2017.
[6] 施諾. 鐵路樞紐旅客精細化換乘服務系統(tǒng)設計與實現(xiàn)[D]. 北京:北京交通大學,2017.
[7] 程璐. 鐵路客運樞紐與常規(guī)公交換乘銜接問題研究[D]. 蘭州:蘭州交通大學,2017.
[8] 張旭. 高速鐵路換乘銜接下運行圖冗余時間優(yōu)化[J]. 物流科技,2017(2):107-110.
[9] 張睿. 考慮大站旅客換乘接續(xù)的高速鐵路列車運行調(diào)整方案研究[D]. 北京交通大學,2016.
[10] 李元凱,李海鷹,王瑩,等. 換乘模式下的京滬高速鐵路運輸組織研究[J]. 鐵道運輸與經(jīng)濟,2017(1):46-50.
[11] 李智,張琦,袁志明. 基于換乘最優(yōu)的城市圈城際鐵路運行圖研究[J]. 交通運輸系統(tǒng)工程與信息,2015(3):114-119,139.
[12] 劉廣武,連義平,張凱. 旅游軌道交通運輸組織模式研究[J]. 鐵道運輸與經(jīng)濟, 2018(1):106-110.
[13] 蘇煥銀,史峰,張佩,等. 基于鐵路有效路徑的換乘方案快速搜索方法[J]. 鐵道科學與工程學報,2016(12):2496-2502.
[14] 尹伊伊,王富章,單杏花,等. 啟發(fā)式算法在鐵路換乘的應用[J]. 鐵路計算機應用,2016(1):20-23,40.
[15] 李秦陽,李宗平. 一類鐵路旅客換乘問題的網(wǎng)絡優(yōu)化模型[J]. 蘭州交通大學學報,2012(3):61-64.
[16] 張琦,馬艷. 基于復雜網(wǎng)絡的高速鐵路列車服務網(wǎng)絡特征[J]. 鐵道科學與工程學報,2018(3):29-33.
[17] 李麗輝,朱建平,史峰,等. 高速鐵路換乘需求統(tǒng)計算法研究[J]. 鐵道科學與工程學報,2018(5):251-255
[18] 張渭軍,王華. 城市道路最短路徑的Dijkstra算法優(yōu)化[J]. 長安大學學報:自然科學版,2005(6):89-92.
[19] 王樹西,吳政學. 改進的Dijkstra最短路徑算法極其應用研究[J]. 計算機科學,2012(5):1201-1208.
[20] 胡軍偉,秦弈青,張偉. 正則表達式在Web信息抽取中的作用[J]. 北京信息科技大學學報:自然科學版,2011(6):321-329.
(責任編輯:杜能鋼)