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