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