邵文杰,翟鵬程
中交鐵道設(shè)計研究總院有限公司,北京 100088
列流圖是鐵路設(shè)計文件中的重要組成部分,該圖能直觀反映列出編組情況及開行方案。大型樞紐或運輸量大的鐵路線路的編組繁多且復(fù)雜,通常包含大量列流線,設(shè)計人員手工繪制列流線需耗費較多時間及精力,而且易出錯。另外,設(shè)計外部條件的變動又會引起列流圖的修改,從而增加了繪制列流圖的工作量。為實現(xiàn)列流圖的自動繪制,文章在已有研究基礎(chǔ)上針對列流圖自動繪系統(tǒng)中的列流徑路自動識別進行研究,并詳細介紹其實現(xiàn)算法。
列流圖主要由車站、銜接方向、鐵路網(wǎng)和列流線四個部分組成。一個典型的簡略列流圖如圖1所示。
圖1 列流圖示意圖
在列流圖繪制的過程中最復(fù)雜及煩瑣的是列流線的繪制,列流線如圖1中的箭頭線。列流圖中包含大量不同列車種類的列流線,列流線因車站或銜接方向的分布位置問題可能導(dǎo)致大量列流線交叉重疊,影響圖形美觀及意義表達。因此在列流圖自動繪制系統(tǒng)中,列流線的排列和布局是極其重要的關(guān)鍵性問題。為方便計算機自動對列流線進行排列及布局,需對列流線進行識別及分類。
列流線識別主要是對輸入列流圖自動繪制系統(tǒng)中的數(shù)據(jù)進行識別,該識別主要包括列流徑路識別、列流線機車種類。列車線機車種類相對簡單,根據(jù)輸入機車類型數(shù)據(jù)進行識別分類即可,而列流徑路識別相對較復(fù)雜,該識別過程包含列流線起點位置、終點位置、列流線拐點、列流線流向和列流線通過車站等信息。文章對已開發(fā)的列流圖自動繪制系統(tǒng)的列流線識別方法進行詳細介紹。
列流徑路識別方法核心思想是根據(jù)列流線的起終點信息,確定其起終點所處的主鏈和支鏈,并由主鏈和支鏈的順序確定列流徑路拐點及流向。列流徑路識別方法示例圖如圖2所示。
圖2 列流徑路識別方法示例圖
首先,確定列流徑路的主鏈和支鏈,一般情況下以從左至右的路網(wǎng)連接的車站和方向為主鏈,例如圖2中F5方向→A站→B站→C站→F4方向。不含主鏈的路網(wǎng)連接的車站和方向為支鏈,支鏈方向通常定義為從上至下,例如圖2中有三個支鏈,分別為F3方向→C站支鏈、A站→F1方向支鏈和F2方向→D站→B站支鏈。
其次,確定列流徑路起點和終點在主鏈和支鏈中的位置。圖2中虛線列流徑路其起點和終點分別為F3方向和F1方向。由主鏈和支鏈定義可知,虛線列流徑路的終點都位于支鏈上。
最后,確定列流徑路經(jīng)過的車站、方向以及列流徑路的流向。該過程的具體步驟如下:
(1)確定列流徑路拐點。圖2中虛線列流徑路起點位于支鏈F3方向→C站上,該支鏈與主鏈相交的車站為C站,因此C站為拐點。終點位于支鏈A站→F1方向上,該支鏈與主鏈相交的車站為A站,因此A站為其另一個拐點。
(2)確定拐點在主鏈上位置及經(jīng)過車站。圖2中主鏈為F5方向→A站→B站→C站→F4方向,C站與A站之間在主鏈上只有B站,故主鏈上經(jīng)過的車站為B站。
(3)組合支鏈和主鏈形成列流徑路。根據(jù)第一步確定的兩條支鏈以及第二步確定的主鏈上經(jīng)過的車站,即可確定該列流徑路經(jīng)過的所有方向和車站以及流向,其列流徑路為F3方向→C站→B站→A站→F1方向。
根據(jù)列流徑路自動識別方法的核心思想是利用計算機語言實現(xiàn)列流徑路自動識別。在詳細介紹算法實現(xiàn)過程之前,以圖2中列流圖為例簡要介紹列流圖自動編制系統(tǒng)的數(shù)據(jù)存儲結(jié)構(gòu)。在已完成開發(fā)的列流圖自動編制系統(tǒng)中,利用數(shù)據(jù)庫技術(shù)存儲繪制列流圖所需的基本數(shù)據(jù),數(shù)據(jù)記錄字段為車站編號(StationID)、車站名稱(StationName)、屬性(StationAttr)、鄰居車站(relStation)、鄰居方向(relLocation)。
車站編號字段記錄了車站的編號,車站名稱字段記錄了對應(yīng)車站編號的車站名,屬性字段表示該項屬于車站還是銜接方向,鄰居車站記錄了相鄰車站信息,鄰居方向記錄了相鄰車站上下左右相對關(guān)系。用戶輸入基本的車站或銜接方向數(shù)據(jù)后,只需要輸入列流線起點和終點的名稱即可由文章提供的列流徑路自動識別算法得到起點至終點的列流徑路,其詳細的算法步驟如下。
第一步:輸入列流線的起點和終點信息,及起終點名稱。
第二步:針對已輸入系統(tǒng)的車站或銜接方向數(shù)據(jù),查詢篩選鄰居方向(relLocation),將具有左右關(guān)系的車站篩選出來,并由左右相對位置關(guān)系進行從左至右排序,生成主鏈。
第三步:根據(jù)主鏈車站或銜接方向,篩選車站名稱(StationName),得到非主鏈的車站或銜接方向信息,并篩選鄰居方向(relLocation)具有上下關(guān)系的車站或銜接方向,并由上下相對位置關(guān)系進行從上至下排序,生成支鏈。
第四步:根據(jù)輸入的起終點信息,判斷起終點位于主鏈還是支鏈,并進行分類。根據(jù)該列流圖自動繪制系統(tǒng)數(shù)據(jù)存儲結(jié)構(gòu)特點,起終點相互對應(yīng)位置只存在四種情況,分別如下:起點位于主鏈,終點位于主鏈;起點位于主鏈,終點位于支鏈;起點位于支鏈,終點位于主鏈;起點位于支鏈,終點位于支鏈。
第五步:根據(jù)第四步中判定的情況,進行列流徑路的求解,并存儲。
第六步:繼續(xù)輸入列流線數(shù)據(jù),跳轉(zhuǎn)至第一步,直至輸入完所有列流線數(shù)據(jù)。
上述列流徑路自動識別算法步驟最核心的部分是第四步,下面對第四步中四種情況的實現(xiàn)過程進行詳述。
第一種情況:起點位于主鏈,終點位于主鏈。只需要在主鏈中查找起終點位置,由主鏈中各個車站相對關(guān)系即可確定列流徑路。
第二種情況:起點位于主鏈,終點位于支鏈。只需要根據(jù)終點車站在支鏈中查找,并確定終點所在支鏈與主鏈的拐點(共同車站),并在主鏈中查找起點站至該拐點的主鏈車站,即可確定列流徑路。
第三種情況:起點位于支鏈,終點位于主鏈。只需要根據(jù)起點車站在支鏈中查找,并確定起點所在支鏈與主鏈的拐點(共同車站),并在主鏈中查找該拐點與終點站之間的主鏈車站,即可確定列流徑路。
第四種情況:起點位于支鏈,終點位于支鏈。先根據(jù)起點車站查找起點車站所在支鏈與主鏈的拐點1,再根據(jù)終點車站查找終點車站所在支鏈與主鏈的拐點2,最后在主鏈上查找拐點1至拐點2的車站,即可確定列流徑路。
綜上所述,文章根據(jù)列流圖的特點,結(jié)合計算機自動繪圖系統(tǒng),針對列流圖自動繪制系統(tǒng)的核心問題——列流徑路的識別,提供了一種簡便快速的自動識別方法,并針對該列流徑路自動識別方法進行了算法實現(xiàn)分析,通過分析驗證了列流圖列流徑路自動識別方法能根據(jù)用戶輸入的列流起終點基本信息,快速生成列流徑路,并根據(jù)列車種類對列流徑路進行分類排序,有利于列流圖自動繪制的實現(xiàn)。