劉 晟,汪長勤
(1.安徽大學 計算機教學部,安徽 合肥 230039;2.安徽大學 計算機學院,安徽 合肥 230039)
隨著交通運輸和經(jīng)濟的發(fā)展,越來越多的出行者需要考慮合理地選擇出行方案。通??晒┏鲂姓哌x擇的出行方案比較多,如何為出行者快速提供到達目的地的可行性出行方案,是現(xiàn)今旅游、交通運輸?shù)刃袠I(yè)迫切需要解決的實際問題,同時也是學者研究的熱點和難點之一[1-3]。為了解決交通出行問題,研究人員提出了出行路徑選擇模型與算法。出行選擇模型主要以換乘次數(shù)最少與出行距離最短為優(yōu)化目標,其目的是尋找一條最優(yōu)路徑[4]。現(xiàn)有的出行路徑選擇模型多為基于“出行距離最短”或“出行耗時最少”的最短路模型,而楊新苗等人的研究結(jié)果表明“換乘次數(shù)”是大部分乘客在選擇出行方案時首先考慮的因素,“出行距離最短”為第二目標[5]。而且出行選擇模型的求解思想是將多目標規(guī)劃問題轉(zhuǎn)化為單目標規(guī)劃問題,或者將多目標問題轉(zhuǎn)化為有主次之分的多層單目標規(guī)劃問題[6]。從理論上講,出行者的起點到終點的出行方案可多達數(shù)千甚至上萬條,而且可選擇的交通工具類型也是多源的。因此出行路徑選擇模型中所涉及的多源交通數(shù)據(jù)量較大且關(guān)系復(fù)雜,目前多選擇利用關(guān)系數(shù)據(jù)庫存儲出行路徑選擇模型中所涉及的交通基礎(chǔ)數(shù)據(jù)[6-8]。故對這些交通數(shù)據(jù)檢索并最終確定最優(yōu)的出行方案需要大量時間,而目前大多數(shù)的交通出行方案的查詢只是針對如飛機、火車或者汽車的這種單一的交通工具的點到點查詢。本文以關(guān)系數(shù)據(jù)庫SQL Server為存儲工具,采用基于分層結(jié)構(gòu)首尾協(xié)同的出行路徑模型進行快速、準確查詢出多種交通工具組合的出行方案。
由于交通出行路徑查詢中涉及多源的交通數(shù)據(jù)較多,導(dǎo)致從出行者的起點到終點的出行方案很多。為了能夠快速準確查詢出可行的出行方案,本文采用了基于分層結(jié)構(gòu)首尾協(xié)同的出行路徑模型來快速準確查詢可行的出行路線。該模型的基本思想就是同時從起點(S)和終點(T)查詢中轉(zhuǎn)站信息,直到找到匹配的可行方案。這樣可以相對快速、準確地查詢出多種交通工具組合的出行方案。該模型的出行方案查詢策略如圖1所示。
圖1 基于分層結(jié)構(gòu)首尾協(xié)同出行方案查詢策略圖
該模型主要包括以下幾個部分:(1)選用SQL Server存儲的交通數(shù)據(jù)及該模型中所產(chǎn)生的中間數(shù)據(jù);(2)同時從起點(S)和終點(T)查詢中轉(zhuǎn)站信息,然后再對中轉(zhuǎn)站信息進行匹配和查詢,直到找到可行出行方案;(3)比較給出可行出行方案。
該模型的具體描述如下:
(1)利用SQL Server建立包括交通信息表、臨時堆棧表、方案主表、方案子表和一些輔助臨時表等一系列的關(guān)系數(shù)據(jù)表。
(2)從起點(S)開始向前查詢出所有經(jīng)過起點的交通信息集合。設(shè)這些信息集合為S1且層次為1;再以S1為起點向前查詢經(jīng)過S1的所有交通信息集合(不含同種交通工具的重復(fù)信息),設(shè)這些信息集合為S2且層次為2;則第i次搜索形成信息集合為Si且層次為i;經(jīng)過若干次搜索后可將以起點為出發(fā)點以終點為目的的整個交通數(shù)據(jù)搜索完畢。
(3)從終點(T)開始向后查詢出所有經(jīng)過終點的交通信息集合。設(shè)這些信息集合為T1且層次為1;再以T1為起點向前查詢出經(jīng)過T1的所有交通信息集合,設(shè)這些信息為 T2且層次為2,則第j次搜索形成信息集合為 Tj且層次為j,經(jīng)過若干次搜索后可將以終點為出發(fā)點以起點為目的的整個交通數(shù)據(jù)搜索完畢。
(4)比較Si中任意中轉(zhuǎn)站集中任意和Tj中相同的中轉(zhuǎn)站,找到從起點到終點的出行可行方案?;诜謱咏Y(jié)構(gòu)首尾協(xié)同的兩次以內(nèi)中轉(zhuǎn)出行路徑查詢算法的流程圖如圖2所示。
由圖1可以得出如表1所示的直達、一次和二次轉(zhuǎn)車出行條件。
基于SQL Server的存儲平臺,設(shè)計了包含交通信息表(表2)、臨時堆棧表(表 3)、方案主表、方案子表和一些輔助臨時表等用來存儲路徑選擇過程中所涉及的數(shù)據(jù)。其中交通信息表格用來存儲交通基礎(chǔ)信息,該表中包括車次/航班號、站點序號以及站點編號等字段。臨時堆棧表用來將每次查詢出的車次信息按層次保存。方案子表是出行方案的明細,同一方案而言,如果是直達的,則只有一條數(shù)據(jù);如果是中轉(zhuǎn)的,則數(shù)據(jù)個數(shù)為中轉(zhuǎn)次數(shù)加1且數(shù)據(jù)為方案車次/航班的匯總信息。方案主表是方案子表明細的匯總,具體字段見表4。
圖2 方案查詢算法流程圖
表1 中轉(zhuǎn)類型及其條件
表2 交通信息表(T_TRAFFIC_INFO)
表3 臨時堆棧表(#T_STACK)
表4 臨時方案子表(#T_RESULTZB)
首先,根據(jù)圖2和表1確定中轉(zhuǎn)車次數(shù)最少的方案,根據(jù)方案查詢出相應(yīng)的信息,并將信息保存到臨時堆棧表中(為解決同城多個站點中轉(zhuǎn)問題,中轉(zhuǎn)時使用地點編號作為中轉(zhuǎn)條件);然后,生成可行的出行方案并保存到臨時結(jié)果子表中;最后,對臨時結(jié)果子表進行匯總并將結(jié)果保存到臨時結(jié)果主表中。
臨時堆棧表的數(shù)據(jù)是分層的,其S1和S2層是從起點查詢的,T1和T2層是從終點查詢的。其對應(yīng)的表關(guān)聯(lián)如下:
第一層:
第二層:
第三層:
第四層:
在臨時堆棧表數(shù)據(jù)的基礎(chǔ)上,根據(jù)表1所對應(yīng)中轉(zhuǎn)類型的條件可直接獲得此中轉(zhuǎn)類型的所有方案數(shù);再將具體的方案信息保存到臨時結(jié)果表中(先保存到子表中,主表信息可根據(jù)子表的方案號進行匯總得到)。
將起點、終點及其他參數(shù)作為存儲過程的入口參數(shù),通過參數(shù)便可獲得相應(yīng)出行方案信息,同時可根據(jù)最優(yōu)策略對這些方案進行排序,從而獲得出行者所需要的方案。
本文討論了一種基于分層結(jié)構(gòu)首尾協(xié)同的出行路徑選擇模型,通過對中轉(zhuǎn)信息進行快速檢索,并對相應(yīng)信息判斷是否匹配,以便找出相對優(yōu)化的出行路徑。但該算法僅適合起點(S)與終點(T)中都是有若干條線路途徑的地點。如果兩者中有一點是沒有任何線路經(jīng)過(即為孤點),文中算法對于出現(xiàn)孤點而無法實現(xiàn)中轉(zhuǎn)的情況尚未予以考慮。
[1]李文勇,王煒,陳學武.公交出行路徑螞蟻算法[J].交通運輸工程學報,2004,4(4):102-105.
[2]張衛(wèi)華,陸化普,石琴.公交優(yōu)先的信號交叉口配時優(yōu)化方法[J].交通運輸工程學報,2004,4(3):49-53.
[3]DZEROSKIS,LAVRAC N.Relationaldatamining[M].Berlin:Sp ringer, 2001.
[4]譚滿春,李丹丹.基于Vague集的公交出行路徑選擇[J].中 國 公 路 學 報 ,2008(5):86-89.
[5]楊新苗,馬文騰.基于GIS的公交乘客出行路徑選擇模型[J].東南大學學報自然科學版,2000(6):87-91.
[6]徐光美,楊炳需,張偉,等.多關(guān)系數(shù)據(jù)挖掘方法研究[J].計算機應(yīng)用研究,2006(9):8-12.
[7]AGRAWAL R,SRIKANT R.Mining sequential patterns[C].Proceedings of the 11 th International Conference on Data Engineering, Los Alamitos:IEEE Computer Society Press,1995:3214.
[8]韓愷,岳麗華,龔育昌.利用關(guān)系數(shù)據(jù)庫系統(tǒng)對半結(jié)構(gòu)化數(shù)據(jù)進行近似查詢[J].中國科學與技術(shù)大學學報,2005,35(5):674-682.