高發(fā)琪,陳永生
(同濟(jì)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,上海 200331)
中國城市軌道交通正處于快速發(fā)展階段,尤其在上海,軌道交通已成為公共交通的主要方式。大量軌道交通 ATS(Automatic Train Supervision)系統(tǒng)的使用,有效地提高了地鐵調(diào)度效率,增強(qiáng)了軌道交通的安全性和準(zhǔn)確性。
而列車運(yùn)行圖是ATS系統(tǒng)的重要組成部分,一方面列車運(yùn)行圖是軌道交通運(yùn)輸部門實(shí)現(xiàn)列車安全、正點(diǎn)運(yùn)行的基礎(chǔ),另一方面也是其經(jīng)濟(jì)有效地組織地鐵運(yùn)輸工作和列車運(yùn)行生產(chǎn)計(jì)劃的根據(jù)[1]。列車運(yùn)行圖自動(dòng)編制的實(shí)現(xiàn),將有效地減輕編圖人員勞動(dòng)強(qiáng)度、縮小編圖周期、提高運(yùn)行圖編制質(zhì)量。而在此基礎(chǔ)上對運(yùn)行的優(yōu)化將進(jìn)一步提高列車的運(yùn)行效率,節(jié)約運(yùn)行成本。
城市軌道列車運(yùn)行圖的要素包括:列車區(qū)間運(yùn)行時(shí)分、列車停站時(shí)間、列車在折返站停留時(shí)間、列車折返出發(fā)間隔時(shí)間、列車出入車輛段作業(yè)時(shí)間、追蹤列車間隔時(shí)間和連發(fā)間隔時(shí)間[2]。
整個(gè)系統(tǒng)有兩個(gè)主要組成部分:數(shù)據(jù)庫子系統(tǒng)和運(yùn)行圖調(diào)圖子系統(tǒng)。其中數(shù)據(jù)庫子系統(tǒng)包括數(shù)據(jù)管理和數(shù)據(jù)存儲兩個(gè)模塊,它是編圖的基礎(chǔ)又是編圖的歸屬,負(fù)責(zé)存儲、組織、管理整個(gè)排布系統(tǒng)的數(shù)據(jù)信息。調(diào)圖子系統(tǒng)包括運(yùn)行圖自動(dòng)編制、運(yùn)行圖調(diào)整、運(yùn)行圖輸出模塊,它是系統(tǒng)的核心部分。根據(jù)地鐵運(yùn)營情況,通過求解模型中的函數(shù),得到編制列車運(yùn)行圖的數(shù)據(jù),自動(dòng)完成列車運(yùn)行圖的排布并經(jīng)人工介入調(diào)整后輸出使用。運(yùn)行圖自動(dòng)編制系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 運(yùn)行圖自動(dòng)編制系統(tǒng)結(jié)構(gòu)
微軟MFC的文檔/視圖結(jié)構(gòu)為實(shí)現(xiàn)運(yùn)行圖自動(dòng)編制系統(tǒng)提供了方便、實(shí)用的框架結(jié)構(gòu),便于程序的設(shè)計(jì)、分工、調(diào)試和系統(tǒng)維護(hù),所以本系統(tǒng)采用文檔/視圖結(jié)構(gòu)[3]。所用到的幾個(gè)非常重要的成員函數(shù)如下:
(1)CView::GetDocument函數(shù): 該函數(shù)返回的是指向文檔的指針,利用它就可以對文檔類成員函數(shù)及公共數(shù)據(jù)成員進(jìn)行訪問。
(2)CView::OnInitialUpdate 函數(shù):對視圖對象進(jìn)行初始化。當(dāng)應(yīng)用程序啟動(dòng)或用戶從File菜單中選擇了New或Open時(shí),該CView虛函數(shù)會(huì)被自動(dòng)調(diào)用。
(3)CDocument::UpdateAllViews 函數(shù):文檔數(shù)據(jù)改變時(shí)通知所有視圖對所顯示的數(shù)據(jù)進(jìn)行相應(yīng)的更新。
(4)CView::OnUpdate 函數(shù):對文檔進(jìn)行訪問、讀取文檔數(shù)據(jù),然后對視圖的數(shù)據(jù)成員或控制進(jìn)行更新,以便文檔的變化。應(yīng)用程序調(diào)用CDocument::UpdateAllViews時(shí),應(yīng)用程序框架會(huì)相應(yīng)地調(diào)用該函數(shù)。
(5)CDocument::OnNewDocument函數(shù):當(dāng)用戶從 File菜單中選擇了New時(shí),框架將首先構(gòu)造一個(gè)文檔對象,然后調(diào)用該虛函數(shù),在此設(shè)置文檔數(shù)據(jù)成員的初始值。
主要圖形數(shù)據(jù)放在 CMTTDDoc類 (從 CDocument派生的文檔類)中,在CDynSplitView2視圖(運(yùn)行圖顯示與調(diào)圖視圖)中用圖形數(shù)據(jù)對象提供的接口對圖形數(shù)據(jù)進(jìn)行顯示輸出,即顯示/打印運(yùn)行圖。在CMTTDview視圖(站名與區(qū)間信息視圖)中,同樣調(diào)用圖形數(shù)據(jù)對象接口顯示車站和區(qū)間信息。
由于車站信息也是運(yùn)行圖的一部分,因此,兩視圖顯示的位置必須一致,二者都依賴于文檔類中的圖形數(shù)據(jù)進(jìn)行統(tǒng)一。m_TrainGraph是一個(gè)CTrainGraph類的對象,而CTrainGraph類封裝了運(yùn)行圖的圖形數(shù)據(jù),并提供操作接口,基本上所有的運(yùn)行圖操作都圍繞該類進(jìn)行。與CMTTDDoc類相關(guān)聯(lián)的有CMTTDview類和CDynSplitView2類兩個(gè)視圖類,后者用于運(yùn)行圖的顯示和調(diào)圖操作,而前者在與后者對應(yīng)的位置顯示車站和區(qū)間信息。OnLButtonDown()等操作都必須做類似:CMTTDDoc*pDoc=GetDocument();的操作,最后通過 pDoc進(jìn)行操作。
實(shí)現(xiàn)時(shí)采用的結(jié)構(gòu)如圖2所示。;
圖2 調(diào)圖子系統(tǒng)中的文檔/視圖結(jié)構(gòu)
由于地鐵運(yùn)行圖的特點(diǎn),開發(fā)時(shí)采用微軟的Access作為平臺,共分為三個(gè)數(shù)據(jù)庫:系統(tǒng)數(shù)據(jù)庫、基本數(shù)據(jù)庫及結(jié)果數(shù)據(jù)庫。其中系統(tǒng)數(shù)據(jù)庫包含了地鐵線路表和運(yùn)行參數(shù)表,如表1所示。該表決定了排哪一條線路的運(yùn)行圖以及對該線路運(yùn)行圖的基本要求;基本數(shù)據(jù)庫則可以存儲該線路的所有參數(shù):車站、股道、道岔、區(qū)間、列車、上下行客流、車庫、日行車計(jì)劃等多個(gè)數(shù)據(jù)字典;而結(jié)果數(shù)據(jù)庫則保存了經(jīng)過計(jì)算后該線路的旅客時(shí)刻表、查錯(cuò)記錄表及質(zhì)量指標(biāo)表。
表1 系統(tǒng)數(shù)據(jù)庫的地鐵線路和運(yùn)行參數(shù)
由于本系統(tǒng)的所有重要數(shù)據(jù)都存儲在全局變量中,因此數(shù)據(jù)庫子系統(tǒng)的數(shù)據(jù)管理工作主要是通過全局變量來傳遞窗口和界面的數(shù)據(jù)到數(shù)據(jù)庫,即要時(shí)時(shí)保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)與全局變量的一致。如要更新某條記錄示例如下:
數(shù)據(jù)庫子系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)操作簡便快捷,所用基礎(chǔ)數(shù)據(jù)輸入后便可自動(dòng)生成部分關(guān)鍵編圖的特點(diǎn)。不僅減少了部分輸入數(shù)據(jù)的工作量、提高了數(shù)據(jù)的準(zhǔn)確度,而且經(jīng)檢查、查詢、修改、保存,形成了比較準(zhǔn)確、穩(wěn)定、可靠的運(yùn)行圖數(shù)據(jù)庫子系統(tǒng)。
在此重點(diǎn)探討由各折返段行車密度確定最少列車使用數(shù)的方法。
(1)單個(gè)區(qū)段
設(shè) m=1(m為折返區(qū)間數(shù)),高峰間隔時(shí)間為 d1(s)。最理想的情況下,列車在折返站的折返時(shí)間正好等于該站的最小折返時(shí)間標(biāo)尺,此時(shí)列車運(yùn)行一周的時(shí)間為:T周=t1上旅+t1下旅+t0折+t1折(s)。 ti上旅、ti下旅分別是上下行列車在第 I折返段的平均旅行時(shí)間 (s),ti折為列車在第I折返站的最少折返時(shí)間(s)。
若存在一個(gè)整數(shù) k,使得 t1上旅+t1下旅+t0折+t1折=k×d1,則總列車的運(yùn)行列車最少,如圖3所示。所需列車數(shù)為:
N=T周/d1=(t1上旅+t1下旅+t0折+t1折)/d1
圖3 一個(gè)區(qū)段的情形
(2)兩個(gè)區(qū)段
設(shè)m=2,在最理想的情況下,列車在車站的折返時(shí)間正好等于在該前些站最小折返時(shí)間標(biāo)尺,且大循環(huán)列車在中間站無多余停留時(shí)間,如圖4所示。則所需列車數(shù)為:
以此可以容易地推廣到m個(gè)折返區(qū)段以及環(huán)形路的情況,在此不再贅述。運(yùn)行圖的優(yōu)化可以從多個(gè)角度考慮,此處討論的只是其中的一種情況。
對運(yùn)行圖的優(yōu)化是有必要的,通過優(yōu)化可以確定最少的列車使用數(shù),得到最優(yōu)的日班行車計(jì)劃,對提高地鐵運(yùn)能、節(jié)約運(yùn)輸成本起到積極的作用。
本研究以上海軌道交通8號線為原型,設(shè)計(jì)開發(fā)了供地鐵調(diào)度人員使用的運(yùn)行圖自動(dòng)編制及優(yōu)化系統(tǒng)。列車運(yùn)行圖自動(dòng)編制的實(shí)現(xiàn)將有效地減輕編圖人員的勞動(dòng)強(qiáng)度、縮小編圖周期、提高運(yùn)行圖編制質(zhì)量。在此基礎(chǔ)上對運(yùn)行的優(yōu)化將進(jìn)一步提高列車的運(yùn)行效率,節(jié)約運(yùn)行成本。該系統(tǒng)也可以作為ATS系統(tǒng)的一部分,可大量節(jié)省ATS系統(tǒng)二次開發(fā)的成本。
圖4 兩個(gè)區(qū)段情形
[1]BinarneStroutrup.The c++ programminglanguage[M].北京:高等教育出版社,2001.
[2]姜堅(jiān)華.上海軌道交通線ATC系統(tǒng)的比較[J].城市軌道交通研究,2003(2):56-59.
[3]莊巍,陳永生.上海地鐵列車運(yùn)行圖自動(dòng)編制系統(tǒng)[J].計(jì)算機(jī)工程,2003,29(21):11-16.