一种基于自适应骨干网的快速公交选线算法的制作方法

文档序号:6330521阅读:318来源:国知局
专利名称:一种基于自适应骨干网的快速公交选线算法的制作方法
技术领域
为群众出行提供准确、及时、优化的公交线路信息服务是方便群众生活、提高公交线网的运行效率、提升城市形象的一项重要举措。要提供这种服务就必须设计合理的公交线路选择算法。公交线路是固定的,而人们要考虑的因素较多且各有偏重,比如最小换乘次数、距离、费用、时间等。鉴于此,该选择算法综合考虑各种因素,根据查询者的要求设计一套合理的出行计划,并提供各种因素下的最优方案以供选择。
背景技术
文献[1]论证指出乘客对公交线路的选择受多种因素影响,其中“换乘次数”是影响的首要因素。文献[1]给出,1999年在南京市的8个主要公交站点进行了的一次《公交乘客出行心理》问卷调查(收回有效问卷440份),结果显示,41.16%的乘客在选择公交线路时首选考虑的是换乘最少,其次是路程最短。在鞍山、无锡进行的调查也得到类似的结果。文献[2]分析指出,乘客在选择公交线路时不太注意费用问题和时间问题,因此可以认为,“换乘次数最少”是首选目标,“路程最短”、“费用最少”和“时间最短”三个影响因素的重要性依次下降。
目前国内使用的公交线路选择算法多数是Dijkstra算法和Floyd算法。Dijkstra算法是网络图中单源最短路径求解算法,Floyd算法是多源最短路径算法,实现任意两站点的公交线路选择需要的时间复杂度分别为O(|V|2)、O(|V|3),而且并不能满足“换乘次数最少”的首选目标,难以满足查询者的实际需求。同时,当站点数量很多,成千上万时,过高的时间复杂度也让查询时间与查询者希望的实时查询相差甚远。为了实现“换乘次数最少”的目标,目前还有使用改进的Dijkstra算法和Floyd算法,但只能支持一次换乘,若一次换成无法到达则查询失败。

发明内容
3.1名词解释 (1)公交线路网络城市的公交线路可以抽象成网络图——公交站点抽象成图中的结点,任意两个公交站点之间的各条公交线路抽象成这两个结点之间的有向边,记为G=(V,E),其中V是所有公变站点的集合,E是任意两个公交站点之间叫的有向公交线路的集合,L是所有公交线路的集合。
本说明书中的公交线路网络以北京市主城区的公交线路网络为例。
北京市主城区共计设有公交站点3957个(编号从0001至3957)、公交线路520条(编号从001至520),设vi表示编号为i的公交站点,lj表示编号为j的公交线路,则v={v1,v2,…,v3957},L={l1,l2,…,l520)。若站点vi和站点vj(i,j∈[1,3957])位于公交线路lk(k∈[1,520])的上行线(或下行线)上,且vi的下一站点即为vj,则有向边(i,j)是图G的一条边。每条公交线路必然经过若干公交站点,每个公交站点必然在至少一条公交线路上,设经过站点vi的所有公交线路的集合为L(vi),经过站点vi的所有公交线路上的站点的集合为V(L(vi))。
(2)骨干站点和骨干网若站点vi满足L(vi)≥n(n∈N),则定义vin为“满足下界n的骨干站点”。设Vn={vin|i∈[1,3957]∧L(vi)≥n}是所有满足下界刀的骨干站点的集合,En是任意两个满足下界n的骨干站点之间的各条有向公交线路的集合,Ln是所有经过满足下界n的骨干站点的公交线路的集合。定义由满足下界n的骨干站点和这些骨干站点之间的各条有向公交线路组成的网络图为“n度骨干网”,记为Gn=(Vn,En)。由于n度骨干网Gn=(Vn,En)是公交线路网络G=V,E)的有向子图。
(3)“n度骨干网”的规模即“n度骨干网”包含的骨干站点数目。当骨干网的度n确定了之后,骨干网的规模也随之确定。
3.2符号表 V 所有公交站点的集合 Vi编号为i的公交站点 L 所有公交线路的集合 lj编号为j的公交线路 |A| 集合A的度数,A为公交站点的集合或公交线路的集合 V(A) A上所有公交站点的集合,A为公交线路或公交线路的集合 VB(A)A上所有骨干站点的集合,A为公交线路或公交线路的集合 L(vi)经过公交站点vi的公交线路的集合 vin 满足下界n的编号为i的骨干站点 Vn 所有满足下界n的骨干站点的集合 Ln 经过满足下界n的骨干站点的公交线路的集合 任意两个满足下界n的骨干站点之间的各条有向公交线路的 En 集合 vstart由查询者任意给出的起始站点 vend由查询者任意给出的目的站点 φ空集 3.3核心思想 为了解决多次换乘问题,引入了骨干网,这样做的好处是当输入规模很大时,能有效降低算法的时间复杂度,获得近似最优解。骨干网上的骨干站点总数较小,然而却覆盖了极大的公交线路,通过骨干站点进行换乘,能以较小的换乘次数以较大的概率达到目的站点。因此,本文的讨论中规定,换乘必须在骨干站点上实现。
如果不仅仅是公交线路网络,而是公交地铁混合线路,可以做如下抽象将地铁站点周围的公交站点都看作骨干站点,将地铁线路看作公交线路,这样就可以将重心放在公交线路网络上,使得算法具有更强的适应性。
虽然引入了骨干网来来从一定程度上代表公交地铁混合线路网,但是骨干网的规模应该多大呢?规模太小则不足以反映公交线路网的特点,规模太大则没有起到简化问题的作用。因此我们引入了自适应算法,它能够根据不同的输入,动态的控制骨干网的规模,例如当用户输入了一个较为偏僻的公交站点,则骨干网应该能够动态扩大;反之若用户输入的公交站点是骨干站点时,骨干网应该能够动态缩小。这样既能保证求解的全面性,又能保证求解的快速性。
3.4骨干网的可行性验证 骨干网是公交线路网的抽象,是解决问题的基础,因此它应该在最大程度上反映公交线路网的特点,能代表公交线路网。为此,我们要求一、骨干网应该能够覆盖绝大多数公交线路;二、在公交线路上可达的目的站点也应该以极大的概率在骨干网上可达,由于骨干网络是连通的,故骨干网络上的站点两两可达,因此可以认为以下公式成立

其中骨干线路指包含骨干站点的公交线路。
表1可行性验证 由表1可见,当|Vn|=335时(n=20),Ln=505,即仅仅占公交站点总数的8.47%的骨干站点,却覆盖了多达97.12%的公交线路,且任意两站点在骨干网上可达的概率高达96.25%。因此可以认为,骨干站点可以解决绝大多数的换乘问题。
3.5基于自适应骨干网的快速公交选线算法思想 本算法假设1、任何两个站点通过有限次换乘可达;2、换乘只能在骨干站点上实现。换乘站只能为骨干站点的限制可能导致得到的线路不是最优线路,但是考虑到实际情况,这却很可能是最优的,因为骨干站点都是十余条、数十条公交线路交汇的地区,也必然是人流密集的地区,对于陌生的查询者来说是便于记忆和识别的。
骨干网建立的方法有多种,可根据实际情况自由选择,下面给出两种建立方法 (1)自适应骨干网的建立算法基本思想当查询者任意给出起始站点vstart和目的站点vend后,首先根据vstart确定最大的u,使得vstart∈V(Lu),u也就是通过vstart的公交线路的条数。其次根据vend确定最大的v,使得vend∈V(Lv),v也就是通过vend的公交线路的条数。则骨干网的度n=min(u,v),然后可以通过骨干网的度n确定其规模。
(2)固定折中骨干网建立算法基本思想骨干网的度n越大,则骨干网的规模越小,覆盖的公交线路越少;反之骨干网的度n越小,则骨干网的规模越大,覆盖的公交线路越多。为了提高求解的准确性,我们希望骨干网覆盖的公交线路越多越好,为了降低运算的复杂度,我们希望干网的规模越小越好。为了解决此矛盾,可采用折中的思想,定义y=n*x%,其中n为“n度骨干网”的度,x%是“n度骨干网”覆盖的公交线路条数占总公交线路条数的百分比(也可选择任意两站点在骨干网上可达的概率进行计算)。先求使得y值最大时的骨干网的度n,然后可以通过骨干网的度n确定其规模。
基于骨干网的线路选择算法的基本思想是查询者任意给出起始站点vstart和目的站点vend,首先计算L(vstart)和L(vend),判断L(vstart)∩L(vend)是否为φ,若不为φ则说明vstart和vend有公交线路直达,记录直达的公交线路;否则说明vstart和vend没有公交线路直达,需要进行换乘。
若vstart和vend没有公交线路直达,进而考虑一次换乘的情况,计算经过站点vstart的所有公交线路上的骨干站点的集合VB(L(vstart))和经过站点vend的所有公交线路上的骨干站点的集合VB(L(vend)),判断VB(L(vstart))∩VB(L(vend))是否为φ,若不为φ则说明vstart和vend可以通过在某些骨干站点一次换乘到达,记录一次换乘的公交线路;否则说明vstart和vend不能通过一次换乘到达,需要进行多次换乘。
若vstart和vend不能通过一次换乘到达,进而考虑二次换乘的情况,首先计算起点站直达的骨干站点的集合Vstart=VB(L(vstart)),再计算能直达终点站的骨干站点的集合Vend=VB(L(vend)),下来任取vi∈Vstart,vj∈Vend,判断vi和vj是否能够直达,也即找lk,使得vi∈V(lk)∩vj∈V(lk)成立,若能找到一个或多个这样的lk,说明vstart和vend可以通过二次换乘达到,vi和vj为两个换乘站点,并记录路径信息;否则vstart和vend不能通过二次换乘到达。
若vstart和vend不能通过两次换乘到达,即Vstart中任意一个站点和Vend中的任意一个站点均不可直达,可以考虑三次换乘的情况,对于这种情况考虑使用递归任取vi∈Vstart,vj∈Vend,判断vi和vj是否能够一次换乘可达,而判断两个站点是否一次换乘可达的算法已经给出。若vi和vj能够一次换乘可达,说明vstart和vend三次换乘可达,若vi中任意一个站点和vj中的任意一个站点均不可通过一次换乘可达,则vstart和vend三次换乘不可达。
依次递归,任意两个站点之间都可以通过若干次换乘达到。
通过上述方法将得到若干条“最小换乘”的可行线路组合,再对这些线路再进行费用和耗时两个方面的评估,选择满足查询者需求的最优线路。
具体实施例方式 算法步骤如下 算法输入起始站点vstart、终点站点vend,算法输出可达的线路集合。
Step1循环变量i=1,变量L(vstart)=L(vend)=φ。从L中取li,若vstart∈V(li),则L(vstart)=L(vstart)U{li};若vend∈V(li),则L(vend)=L(vend)U{li};若i≠520,则i=i+1并转到Step1。
Step2若L(vstart)∩L(vend)≠φ,则记录这些直达线路并EXIT。
Step3循环变量i=1,变量VB(L(vstart))=φ。从L(vstart)中取元素li,令VB(L(vstart))=VB(L(vstart))∪{vj|vj∈V(li)∩vj∈Vn}(即将线路li上的骨干站点全部并入VB(L(vstart)),其中Vn已由骨干网建立的算法所确定),如果i<|L(vstart)|,i=i+1转到Step3。
Step4循环变量i=1,变量VB(L(vend))=φ。从L(vend)中任取元素li,令VB(L(vend))=VB(L(vend))∪{vj|vj∈V(li)∩vj∈Vn}(即将线路li上的骨干站点全部并入VB(L(vend)),其中Vn已由骨干网建立的算法所确定),如果i<|L(vend)|,i=i+1转到Step4。
Step5若VB(L(vstart))∩VB(L(vend))≠φ,则记录经由这些站点一次换乘的可达的线路组合并EXIT; Step6在VB(L(vstart))中任取站点vi,在VB(L(vend))中任取站点vj,令vstart=vi,vend=vj,即将vi和vj看作新的起始站点和目的站点,递归调用Step1、Step2中算法,若vi和vj可直达,则vstart和vend二次换乘可达,输出选路信息并EXIT; Step7在VB(L(vstart))中任取站点vi,在VB(L(vend))中任取站点vi,令vstart=vi,vend=vj,即将vi和vj看作新的起始站点和目的站点,递归调用Step3、Step4、Step5中算法,若vi和vj一次换乘可达,则vstart和vend三次换乘可达,输出选路信息并EXIT; Step8如此递归下去,直至得到换乘次数最小的可行解。
再对可行的线路组合进行评估。设第i条可行路线组合的费用函数为 其中,表示第i条可行路线的第j段线路的费用(x=0表示单一票价,x=1表示分段票价,s表示公交站点数,此处假设公汽票价包括单一票价1元/票和与分段票价0~20站1元;21~40站2元;40站以上3元),第j段线路是在两个站点之间可直达的公交线路,第i条可行路线组合共有Di段,那么 min(c(1),c(2),…,c(m))(m为可行路线组合的总数) 即为花费最小的可行线路组合。
设第i条可行路线组合的耗时函数为 gi,j(s)=ps hi,k=q 其中,gi,j(s)表示第i条可行路线的第j段线路的耗时(s表示公交站点数,此处假设每站之间的耗时p相同,p可以根据城市的实际情况进行调整),hi,k表示第i条可行路线的第k次换乘的耗时(此处假设每站之间的耗时q相同,q也可以根据城市的实际情况进行调整),那么 min(t(1),t(2),…,t(m))(m为可行路线组合的总数) 即为耗时最短的可行线路组合。
此外,还可以综合考虑费用和耗时的问题构建目标函数 min(F(c(1),t(1)),F(c(2),t(2)),…,F(c(m),t(m)))
参考文献杨新苗,王炜,马文腾,基于GIS的公交乘客出行路线选择模型[J],东南大学学报(自然科学版),Vol.30,No.6,pp.87-91,2000.马良河,刘信斌,廖大庆,城市交通线路网络图的最短路与乘车线路问题[J],数学的实践与认识,Vol.34,No.6,pp.3 8-44,2004.Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein,算法导论(第二版)[M],pp.324-330,北京机械工业出版社,2007.陆振波,黄卫,城市公交问路系统——GIS在城市公交管理中的应用[J],公路交通科技,Vol.18,No.5,pp.68-70,2001.王世祥,饶维亚,大中城市公交线路查询的数据结构及其算法的实现[J],计算机系统应用,No.9,pp.63-67,2007.乐阳,龚健雅,Dijkstra最短路径算法的一种高效率实现[J],武汉测绘科技大学学报,Vol.24,No3,pp.209-212,1999.朱江云,王玉琨,基于最小换乘次数的最优路径算法[J],福建电脑,No.3,pp.121-122,2007.徐兵,谢仕义,基于站点优先级的公交换乘算法实现[J],计算机时代,No.7,pp.16-17,200权利要求
1.算法的基本思想
本算法假设1、任何两个站点通过有限次换乘可达;2、换乘只能在骨干站点上实现。换乘站只能为骨干站点的限制可能导致得到的线路不是最优线路,但是考虑到实际情况,这却很可能是最优的,因为骨干站点都是十余条、数十条公交线路交汇的地区,也必然是人流密集的地区,对于陌生的查询者来说是便于记忆和识别的。
两种骨干网的建立方法如下
(1)自适应骨干网的建立算法基本思想当查询者任意给出起始站点vstart和目的站点vend后,首先根据vstart确定最大的u,使得vstart∈V(Lu),u也就是通过vstart的公交线路的条数。其次根据vend确定最大的v,使得vend∈V(Lv),v也就是通过vend的公交线路的条数。则骨干网的度n=min(u,v),然后可以通过骨干网的度n确定其规模。
(2)固定折中骨干网建立算法基本思想骨干网的度n越大,则骨干网的规模越小,覆盖的公交线路越少;反之骨干网的度n越小,则骨干网的规模越大,覆盖的公交线路越多。为了提高求解的准确性,我们希望骨干网覆盖的公交线路越多越好,为了降低运算的复杂度,我们希望干网的规模越小越好。为了解决此矛盾,可采用折中的思想,定义y=n*x%,其中n为“n度骨干网”的度,x%是“n度骨干网”覆盖的公交线路条数占总公交线路条数的百分比(也可选择任意两站点在骨干网上可达的概率进行计算)。先求使得y值最大时的骨干网的度n,然后可以通过骨干网的度n确定其规模。
基于骨干网的线路选择算法的基本思想是查询者任意给出起始站点vstart和目的站点vend,首先计算L(vstart)和L(vend),判断L(vstart)∩L(Vend)是否为φ,若不为φ则说明vstart和vend有公交线路直达,记录直达的公交线路;否则说明vstart和vend没有公交线路直达,需要进行换乘。
若vstart和vend没有公交线路直达,进而考虑一次换乘的情况,计算经过站点vstart的所有公交线路上的骨干站点的集合VB(L(vstart))和经过站点vend的所有公交线路上的骨干站点的集合VB(L(vend)),判断VB(L(vstart))∩VB(L(vend))是否为φ,若不为φ则说明vstart和vend可以通过在某些骨干站点一次换乘到达,记录一次换乘的公交线路;否则说明vstart和vend不能通过一次换乘到达,需要进行多次换乘。
若vstart和vend不能通过一次换乘到达,进而考虑二次换乘的情况,首先计算起点站直达的骨干站点的集合Vstart=VB(L(vstart)),再计算能直达终点站的骨干站点的集合Vend=VB(L(vend)),下来任取vi∈Vstart,vj∈Vend,判断vi和vj是否能够直达,也即找lk,使得vi∈V(lk)∩ vj∈V(lk)成立,若能找到一个或多个这样的lk,说明vstart和vend可以通过二次换乘达到,vi和vj为两个换乘站点,并记录路径信息;否则vstart和vend不能通过二次换乘到达。
若vstart和vend不能通过两次换乘到达,即Vstart中任意一个站点和Vend中的任意一个站点均不可直达,可以考虑三次换乘的情况,对于这种情况考虑使用递归任取vi∈Vstart,vj∈Vend,判断vi和vj是否能够一次换乘可达,而判断两个站点是否一次换乘可达的算法已经给出。若vi和vj能够一次换乘可达,说明vstart和vend三次换乘可达,若vi中任意一个站点和vj中的任意一个站点均不可通过一次换乘可达,则vstart和vend三次换乘不可达。
依次递归,任意两个站点之间都可以通过若干次换乘达到。
通过上述方法将得到若干条“最小换乘”的可行线路组合,再对这些线路再进行费用和耗时两个方面的评估,选择满足查询者需求的最优线路。
2、算法的实施步骤
算法步骤如下
算法输入起始站点vstart、终点站点vend,算法输出可达的线路集合。
Step1循环变量i=1,变量L(vstart)=L(vend)=φ。从L中取li,若vstart∈V(li),则L(vstart)=L(vstart)∪{li};若vend∈V(li),则L(vend)=L(vend)U{li};若i≠520,则i=i+1并转到Step1。
Step2若L(vstart)∩L(vend)≠φ,则记录这些直达线路并EXIT。
Step3循环变量i=1,变量VB(L(vstart))=φ。从L(Vstart)中取元素li,令VB(L((vstart))=VB(L(vstart))∪{vj|vj∈V(li)∩vj∈Vn}(即将线路li上的骨干站点全部并入VB(L(vstart)),其中Vn已由骨干网建立的算法所确定),如果i<|L(vstart)|,i=i+1转到Step3。
Step4循环变量i=1,变量VB(L(vend))=φ。从L(vend)中任取元素li,令VB(L(vend))=VB(L(vend))∪{vj|vj∈V(li)∩vj∈Vn}(即将线路li上的骨干站点全部并入VB(L(vend)),其中Vn已由骨干网建立的算法所确定),如果i<|L(vend)|,i=i+1转到Step4。
Step5若VB(L(vstart))∩VB(L(vend))≠φ,则记录经由这些站点一次换乘的可达的线路组合并EXIT;
Step6在VB(L(vstart))中任取站点vi,在VB(L(vend))中任取站点vj,令vstart=vi,vend=vj,即将vi和vj看作新的起始站点和目的站点,递归调用Step1、Step2中算法,若vi和vj可直达,则vstart和vend二次换乘可达,输出选路信息并EXIT;
Step7在VB(L(vstart))中任取站点vi,在VB(L(vend))中任取站点vj,令vstart=vi,vend=vj,即将vi和vj看作新的起始站点和目的站点,递归调用Step3、Step4、Step5中算法,若vi和vj一次换乘可达,则vstart和vend三次换乘可达,输出选路信息并EXIT;
Step8如此递归下去,直至得到换乘次数最小的可行解。
再对可行的线路组合进行评估。设第i条可行路线组合的费用函数为
其中,表示第i条可行路线的第j段线路的费用(x=0表示单一票价,x=1表示分段票价,s表示公交站点数,此处假设公汽票价包括单一票价1元/票和与分段票价0~20站1元;21~40站2元;40站以上3元),第j段线路是在两个站点之间可直达的公交线路,第i条可行路线组合共有Di段,那么
min(c(1),c(2),…,c(m))(m为可行路线组合的总数)
即为花费最小的可行线路组合。
设第i条可行路线组合的耗时函数为
gi,j(s)=ps
hi,k=q
其中,gi,j(s)表示第i条可行路线的第j段线路的耗时(s表示公交站点数,此处假设每站之间的耗时p相同,p可以根据城市的实际情况进行调整),hi,k表示第i条可行路线的第k次换乘的耗时(此处假设每站之间的耗时q相同,q也可以根据城市的实际情况进行调整),那么
min(t(1),t(2),…,t(m))(m为可行路线组合的总数)
即为耗时最短的可行线路组合。
此外,还可以综合考虑费用和耗时的问题构建目标函数
min(F(c(1),t(1)),F(c(2),t(2)),…,F(c(m),t(m)))
全文摘要
本发明是一种基于自适应骨干网的快速公交选线算法,主要应用于城市的公交、地铁线路查询领域,能够解决现有的公交线路查询、选择算法不能支持多次换乘、查询时间过长的问题。本发明提出自适应骨干网构建技术,首先构建公交网络中的自适应骨干网,然后依次根据如下原则选择任意两个站点之间的可行线路组合一、如果两个站点之间存在公交线路直达,那么可以不经过骨干网;二、如果这两个站点之间不存在直达的公交线路,就只能换乘,但必须在骨干站点进行换乘,同时使换乘次数尽可能少;三、在所有可行的线路组合中根据乘客不同的出行需求再选择最优的线路组合。
文档编号G06Q10/00GK101187996SQ20071001881
公开日2008年5月28日 申请日期2007年10月8日 优先权日2007年10月8日
发明者飞 常, 王嘉寅, 吴楠茜 申请人:飞 常, 王嘉寅, 吴楠茜
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1