馮保恒,張鴻飛,劉承希,張 杰
(1. 西南交通大學(xué) 交通運輸與物流學(xué)院,成都 610031;2. 綜合交通運輸智能化國家地方聯(lián)合工程實驗室,成都 610031;3. 綜合交通大數(shù)據(jù)應(yīng)用技術(shù)國家工程實驗室,成都 610031;4. 西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 611756)
列流圖以圖形化的方式展示了鐵路樞紐網(wǎng)絡(luò)的站場布局、各區(qū)段列車密度、列流的匯集分流情況、鐵路樞紐的列車編組計劃和旅客列車開行方案。列流圖不僅是優(yōu)化鐵路運輸規(guī)劃與組織的輔助工具,也是體現(xiàn)車流組織和列流組織的重要成果之一[1]。
在目前的鐵路設(shè)計工作中,主要依靠Excel進行車流設(shè)計與列流設(shè)計,使用AutoCAD手工鋪畫列流圖[2]。繪制列流圖時需要投入較大的精力排列組合各條列流線位置,在有限的圖紙空間內(nèi)盡可能避免列流線交叉、重合,繪圖工作量大,難以保證列流圖布局的合理性與美觀性。同時,列流圖繪制后期的修改與調(diào)整也較為困難,一條列流線的改動可能會導(dǎo)致整張圖紙重畫,加重了鐵路設(shè)計工作者的勞動強度[3-4]。
為解決上述難題,國內(nèi)學(xué)者對采用計算機編制列流圖進行了研究,史峰等人[1]根據(jù)左右、緊湊、分層、對稱和分類的原則提出了列流圖繪制的具體步驟;程學(xué)慶等人[5-6]提出利用標號算法繪制列流圖。但這些研究都以既定步驟繪制列流圖,智能程度不高,人機交互不夠優(yōu)化,且難以保證列流圖的繪制質(zhì)量[7]。
本文在上述研究的基礎(chǔ)上,采用計算機自動編制列流圖的方式,基于前后端分離的B/S架構(gòu),設(shè)計并實現(xiàn)了列流圖編制系統(tǒng),通過引入數(shù)學(xué)優(yōu)化模型和智能優(yōu)化算法,保證了列流圖的編制質(zhì)量,提高了鐵路設(shè)計工作者的工作效率。
B/S架構(gòu)具有維護方便、開發(fā)簡單、共享性強和容易部署的特點,因此,本文采用B/S架構(gòu),進行系統(tǒng)開發(fā)。列流圖編制系統(tǒng)總體架構(gòu)包括表示層、服務(wù)層、數(shù)據(jù)訪問層和數(shù)據(jù)層。表示層主要負責與用戶進行交互;服務(wù)層負責業(yè)務(wù)邏輯計算;數(shù)據(jù)訪問層進行數(shù)據(jù)交互;數(shù)據(jù)層進行數(shù)據(jù)存儲。系統(tǒng)架構(gòu)如圖1所示。
圖1 系統(tǒng)總體架構(gòu)
表示層立足于瀏覽器端,基于Vue 3、AntV等框架,利用TypeScript語言開發(fā)實現(xiàn),以簡潔、友好的人機交互風格,面向用戶提供業(yè)務(wù)數(shù)據(jù)圖表編輯與展示、列流圖形繪制與調(diào)整等功能。
服務(wù)層作為系統(tǒng)核心,通過數(shù)據(jù)訪問層操作系統(tǒng)數(shù)據(jù),依靠網(wǎng)絡(luò)通信接口為表示層提供業(yè)務(wù)功能服務(wù)。該層基于Spring Boot架構(gòu),采用Java語言開發(fā)實現(xiàn),主要包括車流計算、列流設(shè)計、指標統(tǒng)計、列流圖編制、列流圖繪制5個模塊。
數(shù)據(jù)訪問層通過對象關(guān)系映射技術(shù)封裝了數(shù)據(jù)庫的增、刪、改、查功能,向服務(wù)層提供封裝的數(shù)據(jù)庫操作接口[8],避免了直接使用JDBC操作數(shù)據(jù)庫所帶來的復(fù)雜性。本文基于Spring Data JPA框架實現(xiàn)Java對象與數(shù)據(jù)表之間的映射[9]。
數(shù)據(jù)層主要負責數(shù)據(jù)存儲,本文采用SQLite數(shù)據(jù)庫存儲數(shù)據(jù)。SQLite數(shù)據(jù)庫[10]具有不需要單獨服務(wù)器進程、完整支持數(shù)據(jù)庫事務(wù)的ACID特性、無須額外安裝和管理配置、不需要任何外部依賴、占用資源低等特點。由于本系統(tǒng)的數(shù)據(jù)規(guī)模小、并發(fā)量低,SQLite數(shù)據(jù)庫可完全滿足系統(tǒng)性能要求。
數(shù)據(jù)庫主要包含貨物數(shù)據(jù)表、貨車數(shù)據(jù)表、車站數(shù)據(jù)表、區(qū)間數(shù)據(jù)表、列車徑路表、貨流數(shù)據(jù)表、折車系數(shù)表、重車流表、空車流表、列流表、列流段表、配置參數(shù)表等。
列流圖編制系統(tǒng)以用戶輸入的貨流為基礎(chǔ),依次完成重車流設(shè)計、空車流調(diào)整、列流設(shè)計等工作,并統(tǒng)計區(qū)段列車數(shù)與技術(shù)站作業(yè)量指標。當指標統(tǒng)計結(jié)果不合理時,需重新返回設(shè)計,直至各項指標合理為止。最終,依據(jù)列流設(shè)計結(jié)果并結(jié)合樞紐網(wǎng)絡(luò)布局繪制列流圖。
根據(jù)以上業(yè)務(wù)流程,列流圖編制系統(tǒng)可劃分為車流計算、列流設(shè)計、指標統(tǒng)計、列流圖編制與列流圖繪制等5個功能模塊。
車流計算功能模塊包含貨流輸入、重車流計算、空車流調(diào)整與重空平衡校驗功能。其中,貨流輸入功能從Excel中導(dǎo)入樞紐設(shè)計年度的貨流數(shù)據(jù);重車流計算功能依據(jù)貨車載重量與貨運不平衡系數(shù)將輸入的貨流折算為重車流;空車流調(diào)整功能輔助用戶輸入空車流,使得樞紐各車站出入的重空車流平衡;重空平衡校驗功能則依據(jù)重空車流數(shù)據(jù),計算各車站是否已滿足重空車出入平衡的約束條件。
列流設(shè)計功能模塊包含列車徑路搜索、列流輸入與車流編組校驗功能。其中,列車徑路搜索功能可根據(jù)車流出發(fā)地與到達地自動搜索出多條徑路備選,簡化用戶輸入;列流輸入功能依據(jù)列車編組計劃、列車編成輛數(shù)等數(shù)據(jù),輔助用戶輸入列流;車流編組校驗功能可實時校驗車流是否已全部編組完畢,并提示用戶。
指標統(tǒng)計功能模塊包含列車數(shù)統(tǒng)計、作業(yè)量統(tǒng)計與報表輸出功能。其中,列車數(shù)統(tǒng)計功能可依據(jù)列流設(shè)計結(jié)果依次統(tǒng)計每個區(qū)段的列車數(shù);作業(yè)量統(tǒng)計功能依據(jù)車流計算與列流設(shè)計結(jié)果,統(tǒng)計樞紐各技術(shù)站的有調(diào)中轉(zhuǎn)車數(shù)、無調(diào)中轉(zhuǎn)車數(shù)與本站作業(yè)車數(shù);報表輸出功能輸出統(tǒng)計指標到Excel文件中。
列流圖編制功能模塊包含車站自動布局、人機交互調(diào)整、編制參數(shù)設(shè)置和自動編制功能。其中,車站自動布局功能根據(jù)車站位置與站內(nèi)通過的列流量,自動確定車站矩形的位置與大?。蝗藱C交互調(diào)整功能輔助用戶修改圖元各屬性信息;編制參數(shù)設(shè)置功能設(shè)置列流圖編制算法的各項核心參數(shù);自動編制功能依據(jù)車站布局、列流信息與設(shè)置的參數(shù)自動編制列流圖。
列流圖繪制功能模塊包含顯示參數(shù)設(shè)置、圖形縮放、圖形輸出功能。其中,顯示參數(shù)設(shè)置功能可設(shè)置圖紙大小、像素比例、網(wǎng)格間距等屬性;圖形縮放功能可使用快捷鍵或鼠標調(diào)整列流圖縮放比例;圖形輸出功能可將列流圖輸出為各種常見的矢量圖文件格式,用于高質(zhì)量打印。
對象關(guān)系映射(ORM,Object Relational Mapping)是一種將關(guān)系型數(shù)據(jù)庫映射到面向?qū)ο缶幊陶Z言中的技術(shù)。使用ORM技術(shù),開發(fā)人員可不必編寫具體的SQL語句及數(shù)據(jù)類型轉(zhuǎn)換代碼,即可輕松操作數(shù)據(jù)庫。具體映射關(guān)系如表1所示。
表1 對象關(guān)系映射
JPA是由Java EE提供的一套實現(xiàn)ORM規(guī)范的接 口。Spring Data JPA則 是 由Spring提 供 的 針 對JPA接口的實現(xiàn)方式,并可方便地與Spring Boot框架組合使用。因此,本文采用Spring Data JPA框架作為ORM工具。
瀏覽器與服務(wù)器間通信接口,采用REST風格設(shè)計。REST風格是由Roy Thomas Fielding提出的一種輕量級、跨平臺、跨語言的架構(gòu)風格。通常用于瀏覽器端或移動端對服務(wù)器資源的訪問與操作。
REST使用統(tǒng)一資源標識符(URI,Uniform Resource Identifier)表示網(wǎng)絡(luò)資源,使用HTTP協(xié)議中的動詞表示對資源的操作[11]。
后端使用Axios庫作為HTTP通信工具。Axios是用于瀏覽器端向服務(wù)器后臺發(fā)送資源請求的HTTP通信庫。它通過返回promise類型的HTTP響應(yīng)來解耦數(shù)據(jù)的異步獲取和業(yè)務(wù)邏輯。本文采用Axios庫通過訪問RESTful接口進行瀏覽器與服務(wù)器間的HTTP數(shù)據(jù)通信。HTTP動詞的資源操作含義如表2所示,車站資源的RESTful接口設(shè)計如表3所示。
表2 HTTP動詞的資源操作含義
表3 車站資源RESTful接口設(shè)計
本系統(tǒng)前端基于Vue 3框架,采用TypeScript語言開發(fā);后端基于Spring Boot框架,采用Java語言開發(fā)。系統(tǒng)實現(xiàn)效果如圖2所示,在瀏覽器頁面左側(cè)可以設(shè)置用戶信息、項目信息、貨流輸入、重車流設(shè)計、空車流調(diào)整、列流設(shè)計、指標統(tǒng)計、列流圖編制等功能;頁面上方可進行頁面刷新、視圖調(diào)整、列流圖優(yōu)化、打印輸出等操作;主界面顯示列流圖,并具有圖形交互功能。點擊車站可在頁面右側(cè)表單中修改車站名稱、類型、位置、尺寸等屬性。
圖2 系統(tǒng)主界面
本文從列流圖編制業(yè)務(wù)流程出發(fā),對列流圖編制系統(tǒng)總體架構(gòu)和功能進行了設(shè)計,并基于Type-Script語言和Java語言進行了系統(tǒng)實現(xiàn)。該系統(tǒng)可快速、高質(zhì)量地完成列流圖編制工作,提高了鐵路設(shè)計人員的工作效率。下一步的研究中,可以從減少空車流自動調(diào)整的人工輸入量和優(yōu)化數(shù)據(jù)庫設(shè)計等方面進行改進,進一步提升系統(tǒng)的自動化和智能化水平,提高鐵路設(shè)計人員的工作效率,實現(xiàn)列流圖的全自動編制。