專利名稱:在公共運(yùn)輸網(wǎng)絡(luò)中的旅行規(guī)劃的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及旅行規(guī)劃,特別是在公共運(yùn)輸網(wǎng)絡(luò)中的旅行規(guī)劃。
背景技術(shù):
通過地圖服務(wù)的推動(dòng),存在豐富的關(guān)于確定在運(yùn)輸網(wǎng)絡(luò)中旅行的研究。許多研究著眼于計(jì)算在公路網(wǎng)絡(luò)上的駕駛方向。被稱為公路地圖程序的現(xiàn)有的計(jì)算機(jī)程序提供了數(shù)字地圖,通常擁有直到城市-街道級(jí)別的詳盡公路網(wǎng)絡(luò)。典型地,用戶可以輸入一個(gè)位置,并且公路地圖程序?qū)@示所選位置的屏上地圖。幾個(gè)現(xiàn)有的公路地圖產(chǎn)品通常包括計(jì)算兩個(gè)位置之間最佳路線的能力。換句話說,用戶可以輸入兩個(gè)位置,并且公路地圖程序?qū)⒂?jì)算從源位置到目的地位置的行進(jìn)方向。所述方向通?;诰嚯x、旅行時(shí)間等。計(jì)算位置之間的最佳路線可能要求大量的計(jì)算時(shí)間和資源?!ひ恍┕返貓D程序使用歸因于Dijkstra的公知的方法的變體來計(jì)算最短路線。注意,在這種情況下,“最短”意味著“最低成本”,因?yàn)槊總€(gè)公路分段都被分配了一個(gè)成本或權(quán)重,它們無需與公路分段的長(zhǎng)度直接相關(guān)。通過改變計(jì)算每個(gè)公路的成本的方式,可以為最快、最短或偏好路線生成最短路徑。然而,由于掃描大量位置和可能的路徑,Dijkstra的原始方法在實(shí)際應(yīng)用中也不總是有效。相反,許多公知的公路地圖程序使用Dijkstra’s方法的試探變體。公路地圖算法的最近發(fā)展使用了包括預(yù)處理階段和查詢階段的兩階段過程。在預(yù)處理階段期間,圖形或地圖經(jīng)歷線下處理,以便更高效地完成在圖形上的任意兩個(gè)目的地之間的隨后實(shí)時(shí)查詢。預(yù)處理階段可以花費(fèi)幾分鐘(或甚至幾小時(shí)),并計(jì)算一些輔助數(shù)據(jù),這些數(shù)據(jù)隨后被用于加速查詢。已知的預(yù)處理算法的示例使用地理信息、分層分解以及結(jié)合有地標(biāo)距離的A*搜索。公共運(yùn)輸網(wǎng)絡(luò)中的制定路線(例如規(guī)劃在給定時(shí)間開始的在公共運(yùn)輸系統(tǒng)中的兩點(diǎn)之間的旅行)可能表面上看上去是大同小異的,但這個(gè)問題在做起來時(shí)變得明顯更加困難。為公路網(wǎng)絡(luò)開發(fā)的技術(shù)對(duì)于公共運(yùn)輸來說幫助微乎其微。對(duì)于此有兩個(gè)原因。第一,公共運(yùn)輸網(wǎng)絡(luò)不具有公路網(wǎng)絡(luò)的強(qiáng)的分層屬性,在公路網(wǎng)絡(luò)中,幾乎所有的長(zhǎng)距離旅行都集中于主要的高速公路。第二,公共運(yùn)輸網(wǎng)絡(luò)在本質(zhì)上是依賴時(shí)間的(例如公交車和火車具有時(shí)刻表,在確定最短或最低成本的旅行時(shí)要考慮這些時(shí)刻表)。第三,除了旅行時(shí)間之外,還需要考慮換乘的次數(shù)。這通常通過報(bào)告超出一次旅行來完成。另外,公共運(yùn)輸系統(tǒng)是動(dòng)態(tài)的,具有頻繁的誤點(diǎn)和取消。不像公路網(wǎng)絡(luò),小的誤點(diǎn)可能對(duì)所得到的路線具有巨大的影響,因?yàn)殄e(cuò)過的連接可能導(dǎo)致在中轉(zhuǎn)站或站點(diǎn)(例如,火車站或公交車站點(diǎn))等待數(shù)小時(shí)。還不存在已知的傳統(tǒng)技術(shù)能夠高效地處理大城市區(qū)域的運(yùn)輸網(wǎng)絡(luò)中的上述特征。
發(fā)明內(nèi)容
提供了用于確定公共運(yùn)輸網(wǎng)絡(luò)中最佳旅行的技術(shù)。從公共運(yùn)輸網(wǎng)絡(luò)中的一個(gè)站點(diǎn)到另一個(gè)站點(diǎn)的Pareto最佳旅行的確定使用了諸如旅行時(shí)間和最小換乘之類的條件。
在一個(gè)實(shí)現(xiàn)中,一種用于在公共運(yùn)輸網(wǎng)絡(luò)中的雙重條件的旅行規(guī)劃的技術(shù)以循環(huán)(最多K次循環(huán))方式操作,在循環(huán)k (k < K)之后,計(jì)算直到k次旅程就可以到達(dá)的站點(diǎn)的到達(dá)時(shí)間。在一個(gè)實(shí)現(xiàn)中,可以使用優(yōu)化技術(shù)。這樣的技術(shù)包括在路線上進(jìn)行迭代,標(biāo)記、收緊停止條件、修剪、平行和后處理以最小化運(yùn)輸?shù)目倳r(shí)間。提供本概述以便以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本概述并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。
當(dāng)結(jié)合附圖進(jìn)行閱讀時(shí),可以更好地理解以上概述以及以下對(duì)說明性實(shí)施例的詳細(xì)說明。出于說明各實(shí)施例的目的,在附圖中示出各實(shí)施例的示例性構(gòu)造;然而,各實(shí)施例不局限于所公開的具體方法和手段。在附圖中圖I示出了其中各方面和各實(shí)施例可能被利用的計(jì)算環(huán)境的示例;圖2是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法的實(shí)現(xiàn)的操作流程;圖3是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法的另一實(shí)現(xiàn)的操作流程;圖4是例如如圖3中的一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法的實(shí)現(xiàn)中可使用的優(yōu)化的操作流程;圖5是說明在查詢期間可掃描的各種路線的圖例;圖6是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法的實(shí)現(xiàn)中可使用的另一優(yōu)化的操作流程;圖7是在確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行時(shí)可使用的示例數(shù)據(jù)結(jié)構(gòu)的說明;圖8是在確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行時(shí)可使用的另一示例數(shù)據(jù)結(jié)構(gòu)的說明;以及圖9示出了一示例性計(jì)算環(huán)境。
具體實(shí)施例方式圖I示出了其中各方面和各實(shí)施例可能被利用的計(jì)算環(huán)境的示例。計(jì)算設(shè)備100包括便利于在通信介質(zhì)上通信的網(wǎng)絡(luò)接口卡(未具體示出)。示例的計(jì)算設(shè)備包括個(gè)人計(jì)算機(jī)(PC)、移動(dòng)通信設(shè)備等。在一些實(shí)現(xiàn)中,計(jì)算設(shè)備100可以包括臺(tái)式個(gè)人計(jì)算機(jī)、工作站、膝上計(jì)算機(jī)、PDA (個(gè)人數(shù)字助理)、智能電話、蜂窩電話或任意啟用WAP的設(shè)備或能夠直接或間接與網(wǎng)絡(luò)對(duì)接的任意其它計(jì)算設(shè)備。例如,相對(duì)于圖9的計(jì)算設(shè)備900描述了一個(gè)示例的計(jì)算設(shè)備100。計(jì)算設(shè)備100可以通過物理連接與局域網(wǎng)102通信?;蛘?,計(jì)算設(shè)備100可以通過無線廣域網(wǎng)或無線局域網(wǎng)介質(zhì)或通過其它通信介質(zhì)與局域網(wǎng)102通信。雖然被示為是局域網(wǎng)102,網(wǎng)絡(luò)可以是包括公共交換電話網(wǎng)絡(luò)(PSTN)、蜂窩電話網(wǎng)絡(luò)(例如3G、4G、CDMA等)以及包交換網(wǎng)絡(luò)(例如因特網(wǎng))之類的各種網(wǎng)絡(luò)類型。任意類型的網(wǎng)絡(luò)和/或網(wǎng)絡(luò)接口可用于網(wǎng)絡(luò)。作為所支持的網(wǎng)絡(luò)介質(zhì)的結(jié)果,計(jì)算設(shè)備100的用戶能通常通過在計(jì)算設(shè)備100上運(yùn)行的瀏覽器應(yīng)用104的使用來訪問網(wǎng)絡(luò)資源。瀏覽器應(yīng)用104方便了在例如因特網(wǎng)105上與遠(yuǎn)程網(wǎng)絡(luò)通信。一個(gè)示例性的網(wǎng)絡(luò)資源是在地圖路線制定服務(wù)器108上運(yùn)行的地圖路線制定服務(wù)106。地圖路線制定服務(wù)器108主存(host) 了運(yùn)輸站點(diǎn)、物理位置以及街道地址以及路線信息的數(shù)據(jù)庫110,所述路線信息諸如是時(shí)刻表、換乘信息、運(yùn)輸信息、位置信息、鄰接、距離、限速以及所存儲(chǔ)的位置之間的其它關(guān)系。計(jì)算設(shè)備100的用戶通常通過瀏覽器應(yīng)用104輸入源和目的地位置作為查詢請(qǐng)求。地圖路線制定服務(wù)器108接收請(qǐng)求并在存儲(chǔ)在數(shù)據(jù)庫110中的位置中產(chǎn)生從源位置到達(dá)目的地位置的最短路徑。地圖路線制定服務(wù)器108隨后將最短路徑(例如在兩個(gè)位置之間的Pareto最佳旅行的列表)發(fā)送回進(jìn)行請(qǐng)求的計(jì)算設(shè)備100?;蛘?,地圖路線制定服務(wù)106主存在計(jì)算設(shè)備100上,并且計(jì)算設(shè)備100不需要與局域網(wǎng)102通信。在對(duì)公共交通(在此也稱為“公共運(yùn)輸”)的旅行規(guī)劃中產(chǎn)生了具有有限制的換乘的最早的到達(dá)(EABT)問題。給定兩個(gè)站點(diǎn)Vs和Vt (分別是源位置和目的地位置)以及非負(fù)整數(shù)K,EABT被定義為一個(gè)找出從Vs到Vt的有效的旅行以便在Vt處的到達(dá)時(shí)間是最早可 能時(shí)間的問題,并且受到在此路徑中花費(fèi)的單獨(dú)旅程的總數(shù)不大于K(即換乘的總數(shù)最多為Κ-l)的附加約束。解決EABT問題的算法存在許多用途,在此描述的技術(shù)、過程和系統(tǒng)并不意味著局限于地圖。在查詢階段期間,用戶可能希望找到兩個(gè)特定站點(diǎn)之間受前述設(shè)定的兩個(gè)條件影響的有效旅行。始發(fā)站點(diǎn)可被稱為源位置,被標(biāo)記為vs,而目的地站點(diǎn)可稱為目的地位置(或目標(biāo)站點(diǎn)),被標(biāo)記為vt。用戶隨后可以指定他們的開始點(diǎn)(即源位置Vs)以及他們的目的地位置(Vt)?,F(xiàn)有的解決(P)EABT問題的技術(shù)通常基于以時(shí)間順序逐個(gè)處理站點(diǎn)(即先到達(dá)的站點(diǎn)被首先處理)。這要求一種優(yōu)先查詢。由于取決于換乘的次數(shù),可以在不同的時(shí)間到達(dá)站點(diǎn),因此,同一站點(diǎn)可以被處理多次。如果僅確定最早到達(dá)時(shí)間,而無視換乘次數(shù),則可使用時(shí)間依賴的Dijkstra算法的版本,這保證了每個(gè)站點(diǎn)最多處理一次。具體而言,通常,在公共運(yùn)輸網(wǎng)絡(luò)上的路線制定算法使用路程、路線以及站點(diǎn)的集合來構(gòu)建圖形,隨后運(yùn)行Dijkstra算法的某個(gè)變體。這在僅最小化旅行時(shí)間時(shí)足夠有效Dijkstra算法簡(jiǎn)單地計(jì)算到達(dá)圖形中每個(gè)站點(diǎn)的單個(gè)最快方式。當(dāng)除了旅行時(shí)間之外還考慮了換乘次數(shù)時(shí)算法明顯變得較不實(shí)際。在這種情況下,到達(dá)任意中間站點(diǎn)的“最佳”方式不再是唯一的。如果較晚的公交車?yán)^續(xù)朝向目標(biāo)(而較早的公交車去其它地方),則搭乘較晚的公交車通過該站點(diǎn)更加有利。不像先前的方案,在此描述的技術(shù)不再基于Dijkstra算法,并且不需要優(yōu)先隊(duì)列。取代一次對(duì)一個(gè)站點(diǎn)工作,在此所述的技術(shù)使用循環(huán)(round)并考慮總旅行時(shí)間(越早到達(dá)越好)以及換乘總數(shù)(越少換乘越好)兩者。所述技術(shù)根據(jù)這兩個(gè)條件確定并提供Pareto最佳路徑。如在此所用,Pareto最佳被定義為一組沒有被支配的路徑。例如,如果路徑A與路徑B相比沒有花費(fèi)更多的時(shí)間且沒有做出更多的換乘,則路徑A支配路徑B。如果多條路徑與兩個(gè)條件(時(shí)間和換乘次數(shù))相關(guān)聯(lián),則這些路徑中僅有一條路徑可以被在此所述的技術(shù)返回。計(jì)算直到從源位置Vs到目的地位置Vt的至多K個(gè)旅程(Κ-l次換乘)的路徑,不早于時(shí)間τ離開。使用循環(huán)(至多K次循環(huán)),其中,在循環(huán)k之后,為至多k次旅程就能到達(dá)的這些站點(diǎn)計(jì)算到達(dá)時(shí)間。循環(huán)k確定從源到每個(gè)站點(diǎn)同時(shí)做出至多k-Ι次換乘的最佳路徑(或確定不存在這樣的路徑)。換句話說,循環(huán)k計(jì)算經(jīng)至多k-Ι次換乘(即,采用至多k個(gè)旅程)到達(dá)每個(gè)站點(diǎn)的最快方式,并且注意某些站點(diǎn)可能是根本無法到達(dá)的。在典型的運(yùn)輸網(wǎng)絡(luò)上,小數(shù)目的循環(huán)足夠用于確定所有ParetO最佳路徑。在一個(gè)實(shí)現(xiàn)中,輸入可以是基于調(diào)度表的時(shí)刻表、源位置(或開始點(diǎn))Vs、目的地位置(或目標(biāo)點(diǎn))vt、出發(fā)時(shí)間τ以及在允許的換乘次數(shù)上的上限K (即火車、公交車等的換乘)。輸出包括,對(duì)于每個(gè)值K,在不早于出發(fā)時(shí)間τ離開源位置Vs而盡可能早地到達(dá)目的地位置Vt且具有不多于k-Ι次換乘的旅行。解決EABT可以被用于確定使用最小數(shù)目的換乘的旅行,并且可以輸出一組Pareto最佳旅行,允許用戶在到達(dá)時(shí)間和換乘次數(shù)之間進(jìn)行折衷。如在此進(jìn)一步描述,基于循環(huán)的技術(shù)被用于基于網(wǎng)絡(luò)中的松弛路線的概念來解決EABT。在每個(gè)循環(huán)中,可以為沿路線的正好k-Ι次換乘可以到達(dá)的站點(diǎn)計(jì)算到達(dá)時(shí)間。在此所述的技術(shù)不是基于Dijkstra (在每個(gè)循環(huán)中查看時(shí)刻表中的每個(gè)路線最多一次),并且能夠用諸如使用下面進(jìn)一步描述的多種核心的修剪規(guī)則和平行的優(yōu)化來變得更快。在一個(gè)實(shí)現(xiàn)中,公共運(yùn)輸網(wǎng)絡(luò)被如下建模。對(duì)算法的輸入是基于調(diào)度表的時(shí)刻表,所述時(shí)刻表包括網(wǎng)絡(luò)中的一組站點(diǎn)、在某個(gè)時(shí)間周期期間網(wǎng)絡(luò)中的該組旅程、網(wǎng)絡(luò)中的該組路線以及所允許的該組換乘。具體而言,V=Ivci, V1, V2, , V|Vhl}是網(wǎng)絡(luò)中的該組站點(diǎn)?!っ總€(gè)站點(diǎn)對(duì)應(yīng)于一個(gè)人可以乘上或乘下車輛(公交車、電車、火車等)的不同位置。典型的示例是公交車站點(diǎn)和火車站臺(tái)。T=Itc^tpt2,...,t|TH}是在某個(gè)時(shí)間周期期間(通常是一天或一個(gè)星期)在網(wǎng)絡(luò)中的該組旅程。一個(gè)旅程對(duì)應(yīng)于特定車輛(火車、公交車、地鐵等)沿一線路訪問的站點(diǎn)序列。它有初始站點(diǎn)、最終站點(diǎn)以及在此之間的可能下客或上客的幾個(gè)站點(diǎn)。在旅程中的每個(gè)站點(diǎn)還與到達(dá)和出發(fā)時(shí)間相關(guān)聯(lián)。R=Irtl, r1; r2, . . . , 是網(wǎng)絡(luò)中的該組路線。路線由共享正好相同的站點(diǎn)序列的所有旅程構(gòu)成。典型的示例是公交車網(wǎng)絡(luò)中的公交線路。單個(gè)路線可以對(duì)應(yīng)于在該日期間的幾個(gè)旅程(都遵循同一軌跡)。典型的,旅程要比路線多得多。是該組換乘。換乘被用于將(通常是在附近的周圍區(qū)域內(nèi))的站點(diǎn)之間的行程(walking)合并以允許在運(yùn)輸車輛之間交換。每次換乘精確地由具有相關(guān)聯(lián)的恒定行程時(shí)間I (Vi, Vj)的兩個(gè)站點(diǎn)Vi和 ' 構(gòu)成。在一個(gè)實(shí)現(xiàn)中,由基于調(diào)度表的時(shí)刻表上的路線規(guī)劃技術(shù)所產(chǎn)生的輸出是一組旅行J=Ucl,...例如,該組中的每個(gè)旅行對(duì)應(yīng)于單個(gè)查詢的可替換的旅游計(jì)劃。旅行被定義以旅游順序的旅程序列和換乘。另外,該序列中的每個(gè)旅程與和上車和下車點(diǎn)相對(duì)應(yīng)的兩個(gè)站點(diǎn)相關(guān)聯(lián)。而且,為了形成有效輸出,旅行在以下意義上是一致的對(duì)于沿該旅行的任意兩個(gè)后續(xù)項(xiàng)(旅程或換乘),它們的站點(diǎn)必須匹配并且第二項(xiàng)的出發(fā)時(shí)間必須在第一項(xiàng)的到達(dá)時(shí)間之后。注意,具有k個(gè)旅程的旅行正好具有k-Ι次換乘。圖2是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法200的實(shí)現(xiàn)的操作流程。在框210,從例如用戶接收查詢。該查詢包括源位置、目的地位置以及出發(fā)時(shí)間(例如用戶想要離開源位置的最早出發(fā)時(shí)間)。這樣,在查詢時(shí)間,用戶分別輸入開始和目的地位置(例如使用計(jì)算設(shè)備100),并且該查詢(例如有關(guān)開始和目的地站點(diǎn)的信息)被發(fā)送給地圖服務(wù)(例如地圖路線制定服務(wù)106)。在220,接收(例如從用戶或從存儲(chǔ))表示旅程的最大數(shù)目的整數(shù)K。在230,初始化對(duì)應(yīng)于循環(huán)數(shù)目k的計(jì)數(shù)器。例如,k被設(shè)置為等于零,
在240,例如通過從存儲(chǔ)或用戶檢索、使用時(shí)刻表生成等來獲得表示公共運(yùn)輸網(wǎng)絡(luò)的數(shù)據(jù)。取決于所述實(shí)現(xiàn),數(shù)據(jù)可以表示超過一個(gè)的公共運(yùn)輸網(wǎng)絡(luò)。在此所使用的技術(shù)將具有站點(diǎn)(例如每個(gè)站點(diǎn)可以是火車或地鐵站臺(tái)、公交車站等)的網(wǎng)絡(luò)作為輸入。另外,使用了有關(guān)旅程和路線的信息。旅程可以是具有每個(gè)站點(diǎn)處的經(jīng)調(diào)度的出發(fā)和到達(dá)時(shí)間的單獨(dú)的公交車或火車的順序站點(diǎn)。路線是具有(可能在該天的不同時(shí)間上的)相同站點(diǎn)序列的旅程的集合。在一個(gè)實(shí)現(xiàn)中,算法將源位置、目的地位置和開始時(shí)間作為輸入。一個(gè)目標(biāo)是根據(jù)兩個(gè)條件找到從源到目的地(在開始時(shí)間或更晚離開)的所有未被支配的路線,這兩個(gè)條件是最早的到達(dá)時(shí)間和最少的換乘次數(shù)。如上所定義,如果路線Rl既不更早到達(dá)也不換乘次數(shù)更少,則路線Rl被路線R2支配。在典型的運(yùn)輸網(wǎng)絡(luò)上,這樣的路線的總數(shù)將相當(dāng)少,特別因?yàn)橥ǔ>哂凶钌贀Q乘的路線就是具有最早到達(dá)時(shí)間的路線。該技術(shù)以循環(huán)形式工作循環(huán)k保證了找到網(wǎng)絡(luò)中從源到每個(gè)站點(diǎn)(例如公交車站、火車站等)至多k-Ι次換乘的最快路徑。每個(gè)循環(huán)由遍歷每個(gè)可能的路線至多一次并更新沿該路線的站點(diǎn)的信息來構(gòu)成。 在一個(gè)實(shí)現(xiàn)中,每個(gè)站點(diǎn)V維護(hù)表示在V處具有正好k-Ι次換乘的最佳已知到達(dá)時(shí)間的一系列標(biāo)簽L(v,k)。這些值初始被設(shè)定為無限,且在循環(huán)k期間的適當(dāng)時(shí)候更新L(v,k)。為了在循環(huán)k期間更新這些值,算法至多經(jīng)過每個(gè)路線一次。當(dāng)分析在循環(huán)k處的路線時(shí),算法暗中考慮在它們的最后(即第k-Ι次)換乘(即第k個(gè)旅程)之后使用該路線的所有可能的路徑。在245,執(zhí)行初始化以將循環(huán)O的開始位置處的到達(dá)時(shí)間設(shè)定為由用戶請(qǐng)求的出發(fā)時(shí)間。在250,為對(duì)應(yīng)的循環(huán)數(shù)k執(zhí)行循環(huán)。對(duì)于該循環(huán),查找從開始位置到網(wǎng)絡(luò)中使用至多k-Ι次換乘(即k個(gè)旅程)可到達(dá)的每個(gè)其它站點(diǎn)的最佳路徑。確定用k-Ι次換乘可到達(dá)的站點(diǎn)的到達(dá)時(shí)間,并為具有最佳已知到達(dá)時(shí)間的每個(gè)站點(diǎn)設(shè)定一標(biāo)簽。在260,遞增k (例如增加1),以便增加后續(xù)循環(huán)數(shù)。在270確定k是否大于要執(zhí)行的循環(huán)的最大數(shù)目K。如果是,則在280,輸出到目前為止已經(jīng)被確定的結(jié)果(即Pareto最佳路徑)。將輸出提供給用戶計(jì)算設(shè)備或其它設(shè)備。如果如在280處確定(來自270的)k的新值沒有超出K,那么,在250處處理繼續(xù)使用k的新值的下一循環(huán)??梢砸匀我獯涡蚍治雎窂?,并且本技術(shù)不需要優(yōu)先隊(duì)列。本算法不需要預(yù)處理階段,并且因此,在動(dòng)態(tài)場(chǎng)景中也可很好使用例如,在不需要請(qǐng)求改變算法的情況下,就可以(例如由于誤點(diǎn))增加或修改旅程。如下將進(jìn)一步描述的,適合的數(shù)據(jù)結(jié)構(gòu)確保了可以高效地遍歷路徑,并且可以高效地更新標(biāo)簽。另外,本算法可以合并一個(gè)或多個(gè)加速技術(shù)以限制必須查看的路線數(shù)目。每個(gè)循環(huán)可以在輸入大小中時(shí)間線性地處理每個(gè)循環(huán)。在一個(gè)實(shí)現(xiàn)中,每個(gè)站點(diǎn)V 與多個(gè)標(biāo)簽 L(v) = ( τ Q(v),T1(V), τ 2 (v),. . .,τ κ(ν))相關(guān)聯(lián),其中Ti(V)表示至多i個(gè)旅程被允許時(shí)在V處的最早已知到達(dá)時(shí)間。標(biāo)簽中的值被初始化為無限。隨后,Ttl(Vs)被設(shè)定為等于τ (回想起Vs是源)。注意,通過對(duì)于每個(gè)源站點(diǎn)V設(shè)定Ttl(V)=T就可以處理多個(gè)源站點(diǎn)。另外,維護(hù)下述不變式在循環(huán)k(對(duì)于k彡I)的開始處,在(從Ttl(V)到Tlri(V))的L(V)中的第一 k個(gè)記錄是正確的,即記錄Ti(V)表示在V處使用至多i個(gè)旅程的最早到達(dá)時(shí)間。剩余記錄被設(shè)定為⑴。循環(huán)k的目的在于計(jì)算所有V的Tk(v)。在三個(gè)階段中來這樣做,例如如下參考圖3所述。圖3是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法300的另一實(shí)現(xiàn)的操作流程。在310,執(zhí)行循環(huán)k的第一階段。循環(huán)k的第一階段為所有站點(diǎn)V設(shè)定Tk(V)=Tlri(V)tj該階段設(shè)定了在V處具有k個(gè)旅程的最早到達(dá)時(shí)間的上限。在320,執(zhí)行循環(huán)k的第二階段。循環(huán)k的第二階段包括處理每個(gè)旅程正好一次。當(dāng)處理旅程t時(shí),在t是所采用的最后一次(第k次)旅程時(shí)產(chǎn)生旅行。為了處理所述旅程,依序(從最早到最晚)訪問站點(diǎn)。讓其在旅程中的出發(fā)時(shí)間(被注釋為Cbp (t,Vi))至少與τ H (Vi)一樣晚的Vi成為旅程中的第一站點(diǎn)。如果不存在這樣的站點(diǎn),則在該次循環(huán)中不能使用旅程。然而,如果存在這樣的站點(diǎn),如所知道的,可以在Vi “跳至”該站點(diǎn)(即該旅程可以被用于確定給查詢的解決方案)。對(duì)于旅程中所有的后續(xù)站點(diǎn)',設(shè)定Tk(vp -min{ Tk(Vj),arr (t, Vj)}。在此,arr (t, Vj)是旅程t在站點(diǎn)V」的到達(dá)時(shí)間。在330,執(zhí)行循環(huán)k的第三階段。循環(huán)k的第三階段考慮了換乘(例如行程)。對(duì)于從每個(gè)站點(diǎn)V到站點(diǎn)w外的每個(gè)換乘(V, w),設(shè)定Tk(W) —min{Tk(w), τ k(v)+l (v, w)} 在一個(gè)實(shí)現(xiàn)中,Pareto最佳路徑的檢索可以使用數(shù)據(jù)結(jié)構(gòu)和/或父指針,如在此參考圖7和8進(jìn)一步描述的那樣??墒褂弥T如在路線上進(jìn)行迭代、標(biāo)記、收緊停止條件、修剪、平行和多次運(yùn)行算法來改進(jìn)路線規(guī)劃技術(shù)。這些優(yōu)化不會(huì)影響上述算法的正確性所述算法還是將確定到目的地位置Vt處的Pareto最佳旅行。在一個(gè)實(shí)現(xiàn)中,在此描述的技術(shù)在每次循環(huán)k的第二階段期間,可在路線上而不是在旅程上進(jìn)行迭代。明確遍歷同一路線r的多個(gè)旅程可能是無用的。為了看清原因,考慮r中的站點(diǎn)Vi。從前次循環(huán)中已經(jīng)計(jì)算了 Tlri (Vi)(即在Vi的1^-1次旅程的最早到達(dá)時(shí)間)。如果該旅行在循環(huán)k期間使用路線r來擴(kuò)展,則如所知道的從r中獲取哪個(gè)旅程在時(shí)間Tlri(Vi)或之后離開Vi的第一旅程。更早的旅程并不切實(shí)際,并且,后面的旅程被t支配。注意,對(duì)于沿路線后面出現(xiàn)的站點(diǎn)Vj,實(shí)際上可能采用更早的旅程。圖4是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法400的實(shí)現(xiàn)中可使用的優(yōu)化的操作流程。方法400類似于方法300,但第二階段是不同的。在410的第一階段類似于上面參考310所描述的第一階段,而在430的第三階段則類似于上面參考330所描述的第三階段,并且出于簡(jiǎn)潔的目的,對(duì)它們的描述都被忽略。在420的第二階段,在路線上進(jìn)行迭代,而不是如在320中那樣在旅程上。在一個(gè)實(shí)現(xiàn)中,在420,循環(huán)k的第二階段正好處理每個(gè)路線一次??紤]路線r,并使得ΤΟΟζαρ t2,. . .,t|T(rtM)是從最早到最晚的遵循路線r的旅程序列。當(dāng)處理路線r時(shí),產(chǎn)生其中獲取的最后(第k個(gè))旅程在路線r中的旅行。使得(r,Vi)是路線!■中某人可以在Vi處趕上的最早旅程,即使得cbp (t,Vi)彡Tk^1(Vi)的最早旅程t。注意,在未定義et(r, Vi)的情況下,可能不存在該旅程。圖5是說明在查詢期間可以通過源位置Vs和目的地位置Vt來掃描的各種路線的圖例500。路線上的每個(gè)站點(diǎn)是在該特定路線上的站點(diǎn)。如在該示例中所示,源位置Vs在路線A上,而目的地位置Vt在路線r3上。在循環(huán)I期間,使用參考方法200如上所述的技術(shù),僅分析具有Vs的路線;這樣,就只有路線A被分析。在循環(huán)2期間,具有在循環(huán)I期間的站點(diǎn)的所有路線被分析;這樣,路線IVr1以及1*2被分析。在循環(huán)3期間,具有在循環(huán)2期間的站點(diǎn)的所有路線被分析;這樣,路線IVivr2以及1*3被分析。目的地位置Vt駐留在路線r3上,并且這樣,在循環(huán)3之后可以停止分析。為了處理該路線,依序訪問其站點(diǎn)直到確定了站點(diǎn)Vi以便定義et(r,Vi)。這就是當(dāng)該路線可以被“跳至”(hopped on)時(shí)。使得對(duì)應(yīng)的旅程t為r的當(dāng)前旅程,并且保持遍歷該路線。對(duì)于每個(gè)后續(xù)站點(diǎn)使用該旅程來更新xk(Vi)。而且,可以更新!■的當(dāng)前旅程在沿r的每個(gè)站點(diǎn)Vi處,可能趕上更早的旅程(例如由于已經(jīng)找到使用不同路線的到Vi的更快的路徑)。這樣,檢查是否τ Jrf(Vi) <arr(t, Vi)并通過重新計(jì)算et (r, Vi)來更新t。注意,還可以通過將這樣的路線的最后站點(diǎn)與其第一站點(diǎn)鏈接來擴(kuò)展該方案以處理環(huán)形路線。通過這樣做,可以遍歷路線直到在沒有改善的情況下執(zhí)行了整個(gè)環(huán)形。在一個(gè)實(shí)現(xiàn)中,可以限制在每次循環(huán)期間訪問的路線的數(shù)目。特別地,不需要遍歷不能由前次循環(huán)到達(dá)的路線,因?yàn)闆]有辦法“跳至”它的旅程中的任何一個(gè)。更準(zhǔn)確地說,僅遍歷包含通過正好k-Ι個(gè)旅程到達(dá)的至少一個(gè)站點(diǎn)的路線就已經(jīng)足夠,而不是在循環(huán)k期間在所有路線中進(jìn)行循環(huán)。例如,考慮在循環(huán)k’〈k-Ι處發(fā)生最后改進(jìn)的路線。在循環(huán)·k’+l〈k期間再次訪問該路線,并且沿該路線沒有站點(diǎn)被改進(jìn)。直到其至少一個(gè)站點(diǎn)由于某個(gè)其它路線而改進(jìn),才再次對(duì)其進(jìn)行遍歷。圖6是一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行的方法600的實(shí)現(xiàn)中可使用的另一優(yōu)化的操作流程。在610,在循環(huán)k-Ι期間,對(duì)改進(jìn)了到達(dá)時(shí)間T1^(Vi)的那些站點(diǎn)Vi進(jìn)行標(biāo)記。在620,在循環(huán)k開始時(shí),循環(huán)遍歷所有被標(biāo)記的站點(diǎn)并精確找出包含各個(gè)站點(diǎn)的這些路線,在集Q中對(duì)它們進(jìn)行累積。隨后,在630,僅需要考慮來自Q的路線以在循環(huán)k中進(jìn)行掃描。由于被標(biāo)記的站點(diǎn)集精確對(duì)應(yīng)于旅程可能在循環(huán)k中“跳至”的那些站點(diǎn),所以,僅需要從包含在一路線中的最早被標(biāo)記的站點(diǎn)處開始遍歷該路線。更準(zhǔn)確地說,當(dāng)在被標(biāo)記的站點(diǎn)中循環(huán)通過的同時(shí)將路線r加入Q時(shí),保持Qftr的最早(被標(biāo)記)的站點(diǎn)(可能對(duì)其更新)。隨后,從r的相關(guān)聯(lián)的最早的站點(diǎn)開始對(duì)其掃描就已經(jīng)足夠。這樣,在最早被標(biāo)記的站點(diǎn)處開始掃描路線。因此,使用例如圖5的這種路線的優(yōu)化,如上所述,在循環(huán)I掃描路線IV但在循環(huán)2,僅路線Γι和r2的從最早被標(biāo)記的站點(diǎn)(例如路線A中的站點(diǎn)510以及路線r2中的站點(diǎn)520)延伸的部分被分析。這些路線中的較早的站點(diǎn)(例如路線A中的站點(diǎn)502和503以及路線r2中的站點(diǎn)518和519)沒有被分析,因?yàn)樗鼈冊(cè)谳^早的循環(huán)中沒有被路線A到達(dá)。類似地,在循環(huán)3,分析在站點(diǎn)530處開始的路線r3,因?yàn)樵谳^早的循環(huán)中沒有到達(dá)路線r3的站點(diǎn)528。如上所述,例如,圖2的技術(shù)在K個(gè)循環(huán)之后停止。在一個(gè)實(shí)現(xiàn)中,可以采用更緊的條件以在沒有站點(diǎn)被標(biāo)記的循環(huán)k之后立刻暫停處理,即在該循環(huán)中,對(duì)于所有V,τ k(v)= τ (v)。這意味著在該循環(huán)中不存在改進(jìn)。在一個(gè)實(shí)現(xiàn)中,可以將本地修剪可以被作為一種加速技術(shù)。就是說,對(duì)于每個(gè)站點(diǎn)Vi,保持表示在Vi處的最早已知到達(dá)時(shí)間的值T*(Vi)。由于僅保留了 Paret0最佳路徑,在循環(huán)k處的路徑遍歷期間,僅對(duì)當(dāng)k-Ι的旅程的到達(dá)時(shí)間早于T*(Vi)時(shí)的站點(diǎn)進(jìn)行標(biāo)記。當(dāng)計(jì)算點(diǎn)對(duì)點(diǎn)路徑時(shí),附加的修剪是可能的。在這種情況下,興趣集中在計(jì)算兩個(gè)Vs和Vt站點(diǎn)之間的Pareto最佳旅行。在循環(huán)k期間,不需要標(biāo)記其到達(dá)時(shí)間大于T*(vt)(在Vt處的最佳已知到達(dá)時(shí)間)的站點(diǎn)。
在一個(gè)實(shí)現(xiàn)中,本技術(shù)可以被擴(kuò)展為并行工作。本技術(shù)的一部分由以不特定的次序處理各個(gè)路線構(gòu)成。如果有幾個(gè)CPU可用,每個(gè)CPU都能處理路線的不同子集。然而,在循環(huán)k期間,多個(gè)核心可能試圖同時(shí)寫入同一存儲(chǔ)器位置τ k(v),因此,必須給予合適的重視來確保正確性??梢允褂弥T如鎖或事務(wù)之類的公知技術(shù)。出于性能原因,應(yīng)當(dāng)最小化這樣的協(xié)調(diào)原語(例如鎖)的使用,因?yàn)?,它們成本高昂。特別地,如果包含站點(diǎn)V的所有路線被分配給同一核心,則不需要保護(hù)對(duì)應(yīng)于Tk(V)的存儲(chǔ)器位置。當(dāng)在核心之間分區(qū)路線時(shí)應(yīng)當(dāng)考慮應(yīng)該將被分配給超過一個(gè)核心的站點(diǎn)的數(shù)目最小化。如上所提示的,本技術(shù)查找針對(duì)EABT問題的最佳解決方案給定開始時(shí)間τ,它查找具有在目的地位置Vt處具有有限的換乘的最早可能到達(dá)時(shí)間τ ’的旅行。然而,注意,在時(shí)間τ (或更后)離開源Vs并在時(shí)間τ’到達(dá)Vt的旅行可能有幾個(gè)。在一些應(yīng)用中,最好是具有最小化旅行時(shí)間的那個(gè)旅行,即該旅行盡可能晚地離開Vs (但還是到達(dá)τ’)。在一個(gè)實(shí)現(xiàn)中,這個(gè)版本的問題可以通過多次運(yùn)行算法來解決。第一次運(yùn)行是如·上所述的在時(shí)間τ離開的從Vs到Vt的前向搜索。它為每個(gè)k找到最早可能的到達(dá)時(shí)間τ,k。隨后,對(duì)于每個(gè)k,運(yùn)行反向搜索,在時(shí)間1’,的\處開始并具有Vs作為目標(biāo)。所述算法與如上所述的算法相同,但在時(shí)間上后退。這將找到在Vs處具有至多k個(gè)旅程的最遲離開時(shí)間T”k。注意,為了獲得τ”,,將反向搜索中的循環(huán)數(shù)限制到k已經(jīng)足夠。在另一實(shí)現(xiàn)中,如果這種多步方案成本昂貴(例如由于運(yùn)行算法K+1次是過于昂貴的),則可以使用試探替換。首先,運(yùn)行標(biāo)準(zhǔn)算法以找出候選旅行J。該旅行對(duì)應(yīng)于一旅程序列。隨后,在后處理步驟,以反向次序遍歷J (從最后旅程到第一旅程),用在同一路線中最遲的可能的切合實(shí)際的旅程來替換每個(gè)旅程。雖然這并不保證找到的結(jié)果和通過運(yùn)行多次完全搜索所找到的結(jié)果一樣好,但它實(shí)際上可以找到足夠好的替代。可將數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)用于上述的技術(shù)。在一個(gè)實(shí)現(xiàn)中,路線、旅程和站點(diǎn)具有連續(xù)的整數(shù)標(biāo)識(shí)符,每個(gè)以O(shè)開頭。圖7是在確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行時(shí)可使用的示例數(shù)據(jù)結(jié)構(gòu)700的說明。如上所述,遍歷路線。對(duì)于路線i,(依序)使用其站點(diǎn)序列以及遵循所述路線的所有旅程(從最早到最晚)的列表。在一個(gè)實(shí)現(xiàn)中,可以存儲(chǔ)數(shù)組路線710,其中第i條記錄保存有關(guān)路線^的信息。例如,可以存儲(chǔ)與1^相關(guān)聯(lián)的旅程的數(shù)目以及在該路線中的站點(diǎn)的數(shù)目(對(duì)于其所有的旅程是相同的)。而且,它可以存儲(chǔ)到列表的指針。在一個(gè)實(shí)現(xiàn)中,在路線[i] (Routes[i])中的指針指向表示沿路線!Ti做出的站點(diǎn)序列的列表。代替分開表示站點(diǎn)的每個(gè)列表(每個(gè)路線一個(gè)),它們被分組到單個(gè)數(shù)組路線站點(diǎn)(RouteStops) 720。路線站點(diǎn)720可以首先包含路線O的站點(diǎn)序列,隨后是路線I的那些站點(diǎn)序列,以此類推。在路線[i]中的指針指向路線站點(diǎn)720中的第一記錄,所述第一記錄涉及路線i。在路線[i]中的另一指針是實(shí)際遵循所述路線的旅程的列表的表示。代替為不同的路線維護(hù)分開的列表,可以使用單個(gè)數(shù)組站點(diǎn)時(shí)間(StopTimeS)730。站點(diǎn)時(shí)間730可以被分成塊,并且,第i個(gè)塊包含對(duì)應(yīng)于路線A的所有旅程。在塊中,可以以出發(fā)時(shí)間(在第一站點(diǎn))來排序旅程。每個(gè)旅程僅是站點(diǎn)時(shí)間的序列,每個(gè)都由對(duì)應(yīng)的到達(dá)時(shí)間和出發(fā)時(shí)間來表示。注意,對(duì)于每個(gè)旅程,對(duì)應(yīng)于第一 /最后站點(diǎn)的站點(diǎn)時(shí)間僅分別具有出發(fā)/達(dá)到時(shí)間集。
可通過遍歷與路線ri相關(guān)聯(lián)的路線站點(diǎn)720中的站點(diǎn)來處理路線為了找到從某個(gè)站點(diǎn)V出發(fā)在某個(gè)時(shí)間τ之后沿所述路線的最早旅程,因?yàn)檎军c(diǎn)時(shí)間730所排序的方式,可在每個(gè)旅程在固定時(shí)間內(nèi)訪問V處路線^的所有旅程的站點(diǎn)時(shí)間。特別是,如果當(dāng)處理ri時(shí)旅程t已經(jīng)正被使用,貝U通過站點(diǎn)時(shí)間730中的后續(xù)記錄來確定下一站點(diǎn)的到達(dá)時(shí)間。而且,為了檢查更早的旅程是否改進(jìn)了 ri;將r (=存儲(chǔ)在路線710中的路線&的長(zhǎng)度)記錄跳轉(zhuǎn)至左側(cè)以取得下一更早旅程的旅行。支持一些附加操作。在一個(gè)實(shí)現(xiàn)中,對(duì)于這些附加操作,使用數(shù)組站點(diǎn)810(Stops810),其包含有關(guān)每個(gè)單獨(dú)站點(diǎn)的信息。圖8是在確定在公共運(yùn)輸網(wǎng)絡(luò)中的旅行中可使用的示例數(shù)據(jù)結(jié)構(gòu)800的說明。特別是,對(duì)于每個(gè)站點(diǎn)Vi,存儲(chǔ)了通過該站點(diǎn)的所有路線的列表一在一個(gè)實(shí)現(xiàn)中,這可用于如上所述(例如參考圖6的方法600)的標(biāo)記例程。而且,維護(hù)從Vi中可以得到的所有換乘以及它們對(duì)應(yīng)的換乘時(shí)間的列表。如前述,這兩組列表被聚合到兩個(gè)數(shù)組。數(shù)組站點(diǎn)路線(StopRoutes) 820包含與每個(gè)站點(diǎn)相關(guān)聯(lián)的路線的列表首先是與%相關(guān)聯(lián)的的路線,隨后是與V1相關(guān)聯(lián)的路線,以此類推。而且,站點(diǎn)路線的每個(gè)記錄以存儲(chǔ)各自路線上相關(guān)聯(lián)的站點(diǎn)的次序。這被用于快速計(jì)算沿該路線的最早站點(diǎn),在該 算法的下一循環(huán)中該路線遍歷必須從該最早站點(diǎn)開始。類似地,數(shù)組換乘830表示被允許的從%換乘,其后是被允許的從V1換乘,以此類推。從Vi的每次單獨(dú)換乘由其目標(biāo)站點(diǎn)Vj以及換乘時(shí)間I (Vi, Vj) —起表示。站點(diǎn)810中的第i個(gè)記錄指向與站點(diǎn)Vi相關(guān)聯(lián)的站點(diǎn)路線820和換乘(Transfers) 830中的第一記錄。為了支持實(shí)際旅行的檢索(且不僅僅是到達(dá)時(shí)間和換乘次數(shù)),一個(gè)實(shí)現(xiàn)將附加字段與表示在旅行上的第k個(gè)旅程的每個(gè)標(biāo)簽Tk(v)以及該旅程所“跳至”的站點(diǎn)相關(guān)聯(lián)。為了檢索實(shí)際旅行,跟隨這些“父指針”產(chǎn)生了(從最后到最初)對(duì)應(yīng)的旅程。圖9示出了在其中可實(shí)現(xiàn)各示例實(shí)現(xiàn)和各方面的示例性計(jì)算環(huán)境。計(jì)算系統(tǒng)環(huán)境只是合適的計(jì)算環(huán)境的一個(gè)示例,并非旨在對(duì)使用范圍或功能提出任何限制??梢允褂枚喾N其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置。適合使用的公知的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括但不限于PC、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、網(wǎng)絡(luò)PC、微型計(jì)算機(jī)、大型計(jì)算機(jī)、嵌入式系統(tǒng)、包括任何以上系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等??梢允褂弥T如程序模塊等可由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。也可使用其中任務(wù)由通過通信網(wǎng)絡(luò)或其他數(shù)據(jù)傳輸介質(zhì)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境。在分布式計(jì)算環(huán)境中,程序模塊和其他數(shù)據(jù)可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。參考圖9,用于實(shí)現(xiàn)此處所描述的各方面的示例性系統(tǒng)包括計(jì)算設(shè)備,諸如計(jì)算設(shè)備900。在其最基本的配置中,計(jì)算設(shè)備900通常包括至少一個(gè)處理單元902和存儲(chǔ)器904。取決于計(jì)算設(shè)備的確切配置和類型,存儲(chǔ)器904可以是易失性的(如隨機(jī)存取存儲(chǔ)器(RAM))、非易失性的(諸如只讀存儲(chǔ)器(ROM)、閃存等)或兩者的某種組合。該最基本配置在圖9中由虛線906來示出。計(jì)算設(shè)備900可以具有附加特征或功能。例如,計(jì)算設(shè)備900還可包含附加存儲(chǔ)(可移動(dòng)和/或不可移動(dòng)),包括但不限于磁盤、光盤或磁帶。這樣的附加存儲(chǔ)在圖9中由可移動(dòng)存儲(chǔ)908和不可移動(dòng)存儲(chǔ)910示出。計(jì)算設(shè)備900通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)算設(shè)備900訪問的任何可用介質(zhì),并且包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)之類的信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。存儲(chǔ)器904、可移動(dòng)存儲(chǔ)908和不可移動(dòng)存儲(chǔ)910都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、電可擦除可編程只讀存儲(chǔ)器(EEPR0M)、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或可用于存儲(chǔ)所需信息且可以由計(jì)算設(shè)備900訪問的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)都可以是計(jì)算設(shè)備900的一部分。計(jì)算設(shè)備900可包含允許該設(shè)備與其它設(shè)備通信的通信連接912。計(jì)算設(shè)備900也可包括輸入設(shè)備914,如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等等。也可包括輸出 設(shè)備916,如顯示器、揚(yáng)聲器、打印機(jī)等等。所有這些設(shè)備在本領(lǐng)域是眾知的并且不必在此詳細(xì)討論。應(yīng)該理解,此處描述的各種技術(shù)可以結(jié)合硬件或軟件,或在適當(dāng)時(shí)結(jié)合兩者的組合來實(shí)現(xiàn)。由此,當(dāng)前公開的主題的過程和裝置或其特定方面或部分可采取包含在諸如軟盤、CD-ROM、硬盤驅(qū)動(dòng)器或任何其它機(jī)器可讀存儲(chǔ)介質(zhì)等有形介質(zhì)中的程序代碼(S卩,指令)的形式,其中當(dāng)程序代碼被加載到諸如計(jì)算機(jī)等機(jī)器內(nèi)并由其執(zhí)行時(shí),該機(jī)器成為用于實(shí)現(xiàn)當(dāng)前所公開的主題的裝置。盡管示例性實(shí)現(xiàn)可涉及在一個(gè)或多個(gè)獨(dú)立計(jì)算機(jī)系統(tǒng)的上下文中利用當(dāng)前所公開的主題的各方面,但本主題不受此限制,而是可以結(jié)合任何計(jì)算環(huán)境,諸如網(wǎng)絡(luò)或分布式計(jì)算環(huán)境來實(shí)現(xiàn)。此外,當(dāng)前所公開的主題的各方面可在多個(gè)處理芯片或設(shè)備中或跨多個(gè)處理芯片或設(shè)備實(shí)現(xiàn),且存儲(chǔ)可類似地跨多個(gè)設(shè)備來實(shí)現(xiàn)。這些設(shè)備可能包括例如PC、網(wǎng)絡(luò)服務(wù)器、以及手持式設(shè)備。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述具體特征或動(dòng)作。更確切而言,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式公開的。
權(quán)利要求
1.一種確定在公共運(yùn)輸網(wǎng)絡(luò)中的兩個(gè)位置之間的旅行的方法,包括 在計(jì)算設(shè)備處接收數(shù)據(jù)結(jié)構(gòu)作為輸入,所述數(shù)據(jù)結(jié)構(gòu)表示所述公共運(yùn)輸網(wǎng)絡(luò)并且包括分組為路線的多個(gè)站點(diǎn)和旅程; 由所述計(jì)算設(shè)備執(zhí)行在所述多個(gè)站點(diǎn)的第一站點(diǎn)和所述多個(gè)站點(diǎn)的第二站點(diǎn)之間的Pareto最佳旅行計(jì)算,其中所述第一站點(diǎn)是源位置而所述第二站點(diǎn)是目的地位置,并且其中所述Pareto最佳旅行計(jì)算受限于最小化旅行時(shí)間和最小化換乘次數(shù)的條件; 如果Pareto最佳旅行存在,則通過所述計(jì)算設(shè)備輸出所述源位置和所述目的地位置之間的至少一個(gè)Pareto最佳旅行。
2.如權(quán)利要求I所述的方法,其特征在于,執(zhí)行在所述第一站點(diǎn)和所述第二站點(diǎn)之間的Pareto最佳旅行計(jì)算包括對(duì)所述網(wǎng)絡(luò)執(zhí)行多個(gè)循環(huán),所述多個(gè)循環(huán)的每個(gè)循環(huán)確定從所述網(wǎng)絡(luò)上的第一站點(diǎn)到使用預(yù)定數(shù)目的旅程可到達(dá)的每個(gè)其它站點(diǎn)的最佳旅行。
3.如權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括接收表示旅程的最大數(shù)目的整數(shù),其中所述多個(gè)循環(huán)是基于所述表示所述旅程的最大數(shù)目的整數(shù),而每個(gè)循環(huán)對(duì)應(yīng)于不大于所述旅程的最大數(shù)目的一個(gè)不同數(shù)目。
4.如權(quán)利要求3所述的方法,其特征在于,每個(gè)循環(huán)的旅程的預(yù)定數(shù)目等于所述對(duì)應(yīng)于每個(gè)循環(huán)的不同數(shù)目。
5.如權(quán)利要求2所述的方法,其特征在于,執(zhí)行每個(gè)循環(huán)包括 確定對(duì)應(yīng)于在所述網(wǎng)絡(luò)上使用所述預(yù)定數(shù)目的旅程可到達(dá)的站點(diǎn)的每個(gè)運(yùn)輸站點(diǎn)的到達(dá)時(shí)間;以及 為每個(gè)可到達(dá)的站點(diǎn)用最早的確定的到達(dá)時(shí)間設(shè)置一個(gè)標(biāo)簽。
6.如權(quán)利要求2所述的方法,其特征在于,還包括在執(zhí)行所述Pareto最佳旅行計(jì)算之前在所述計(jì)算設(shè)備處接收查詢,其中所述查詢標(biāo)識(shí)了所述源位置、所述目的地位置和出發(fā)時(shí)間。
7.如權(quán)利要求I所述的方法,其特征在于,執(zhí)行在所述第一站點(diǎn)和所述第二站點(diǎn)之間的所述Pareto最佳旅行計(jì)算包括對(duì)所述網(wǎng)絡(luò)執(zhí)行多個(gè)循環(huán),其中所述多個(gè)循環(huán)的每個(gè)循環(huán)在使用預(yù)定數(shù)目的換乘可到達(dá)的多個(gè)旅程上進(jìn)行迭代。
8.如權(quán)利要求I所述的方法,其特征在于,執(zhí)行在所述第一站點(diǎn)和所述第二站點(diǎn)之間的所述Pareto最佳旅行計(jì)算包括對(duì)所述網(wǎng)絡(luò)執(zhí)行多個(gè)循環(huán),其中所述多個(gè)循環(huán)的每個(gè)循環(huán)在使用預(yù)定數(shù)目的換乘可到達(dá)的多個(gè)路線上進(jìn)行迭代。
9.如權(quán)利要求8所述的方法,其特征在于,還包括通過僅遍歷前次循環(huán)到達(dá)的路線來限制在每個(gè)循環(huán)中所迭代的路線。
10.如權(quán)利要求I所述的方法,其特征在于,在所述源位置和所述目的地位置之間的至少一個(gè)Pareto最佳旅行包括在所述旅行中所執(zhí)行的換乘總數(shù)少于預(yù)定數(shù)目的最早可能的到達(dá)時(shí)間。
全文摘要
本申請(qǐng)涉及在公共運(yùn)輸網(wǎng)絡(luò)中的旅行規(guī)劃。確定了公共運(yùn)輸網(wǎng)絡(luò)中的最佳旅行。從公共運(yùn)輸網(wǎng)絡(luò)中的一個(gè)站點(diǎn)到另一個(gè)站點(diǎn)的Pareto最佳旅行的確定使用了旅行時(shí)間和最小換乘的條件。一種用于在公共運(yùn)輸網(wǎng)絡(luò)中的使用上述條件的雙重條件旅行規(guī)劃的技術(shù)以循環(huán)(最多K次循環(huán))方式操作,其中在循環(huán)k(k≤K)之后,計(jì)算至多k個(gè)旅程就可以到達(dá)的站點(diǎn)的到達(dá)時(shí)間。
文檔編號(hào)G06F19/00GK102915401SQ201210328078
公開日2013年2月6日 申請(qǐng)日期2012年9月6日 優(yōu)先權(quán)日2011年9月7日
發(fā)明者D·德林, A·V·戈德伯格, T·帕約爾, R·F·韋爾內(nèi)克 申請(qǐng)人:微軟公司