霍雷剛 鐘雅婷 李永玉
摘 要:為改善鐵路乘客購票及出行體驗,針對售票系統換乘站推薦功能不全的缺陷,設計和實現基于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='
[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 = '
[nofile, no_tokens] = regexp(sourcefile, expr2, 'match', 'tokens');
獲取經過某個站點的某個車次運行信息({‘車次‘當前車次車站編號 ‘車站 ‘到達時間‘發車時間‘走行時間(小時)‘里程(公里)}):
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
獲取的數據存儲到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.
(責任編輯:杜能鋼)