2010-11-22 42 views
8

我正在开发Journey Planner网站。在这种情况下,目前有几件事情很简单,即现在网站只能规划公交路线,公交车的定时目前不可用。所以这意味着我们只有巴士路线存储在分贝中,并且由于巴士时间不可用,因此旅客的等待时间也不相关。可用的是个别巴士两站之间的时间和距离。使用市内巴士的公共交通服务

我觉得用一个无向加权图存储每一个巴士站,每一个专用总线的时间和距离成本将要走的路。然后我可以使用Dijkstra算法计算用户根据用户偏好根据时间或距离输入的两个位置之间的最短路径。通过简单的C#函数,我会发现是否需要两三辆公共汽车,如果公共汽车路线在停靠处相交,然后使用这些交叉站点来为旅行者更换公共汽车。但是每辆公共汽车都会有一张独立的图表。另一种方法(不确定这是否正确)的方法是使用包含城市每个公共汽车站的图形作为节点,然后使用此技术找出在两站之间行驶的方式。哪种方法是正确的?我应该使用A *算法代替Dijkstra算法吗?

的设计有几个基本点:我想应用可扩展的,所以我可以添加其他的交通方式后,当有需要时。此外,如果可能的话,巴士时间也可以稍后添加,而不会对网站进行重大改变。我在这里见过不少专家从事复杂的交通项目。所以请帮助我以最具扩展性,模块化和可扩展的方式实现此功能的最佳方式。

回答

3

的曲线将不得不是一个有向图 - 总线(即使是在这样的很少有中位数英国的国家)在道路两侧停是不一样的句号!

+2

非常有效!我不知道我错过了这个。它变得越来越复杂,因为我不得不考虑:( – NAB 2010-11-22 15:38:01

0

我认为最重要的优化是分离站点,你可以改变路线和站点,你不能。那么你只需要考虑你可以改变路线的站点作为图形中的中间站点。这应该使图形如此之小以至于Dijkstra都很好。

我是通过简单地将它们从图中剪出来区分具有两条边的节点,而将它们的两个邻居与附加长度的边连接起来。然后我在这个缩小的图上进行寻路,这应该快得多。即只考虑可能切换路线的站点。

+0

)你是建议为每条公共汽车建立一个图表并使用Dijkstra作为最短路径吗?我想实现更改总线功能为:1)在总线内分别搜索常见车站有Desitination停止或Source Stop。 2)现在在这些公共汽车路线中'找到公共点与Desitination/Source站点之间的最短距离3)最后将这两个结果合并以获得全程的详细信息并将其与其他组合进行比较以获得最短距离。 – NAB 2010-11-22 15:31:17

3

我开始了一个类似的应用,去年夏天,从来没有完成,但我确实有这个图表一些建议,以及如何构建数据。

我的计划是让每个站点都停下来作为一个节点,并且每次总线通过时都会在这些节点之间建立一条路径。例如,如果公交车在6小时内每半小时停车一次,那么在两个节点之间将有12条路径。时间是路径“成本”背后的主要驱动力,所以通常最快的路径将是所选择的路径。

启动应用程序将查询在接下来的5小时内所有路径数据库之前(调整根据需要)。然后用Dijkstra的算法来处理它。

其他的事情在成本因素的途径,转移(和它们的成本)的实际成本钱,没有屋顶停止(如果你倾向于有恶劣天气)等

该计划运作良好为了我。我住在一个有3个公共汽车系统的地区。

最后,它可能会帮助您以类似于Google Transit Feed Specification的方式构建数据,因为许多代理机构都会生成您可以导入的此类数据。

0

我编写了一个测试应用程序的算法。我有一个字典为每个站,作为来源和目的地。该算法是递归的。递归的每一步都是这样的:给定源和目标,它会生成进入目标的路由列表,离开源的路由列表。如果有任何常见的站点,我们完成了,我们报告路线。如果不是,那么我会为源生成相邻站点并进行递归。下一次递归生成接收器相邻站点的列表,递归。在递归之前,我记录了之前的路径,最后我会列出一个列表。

我记得我不得不放置一些截断条件,因为递归有时会卡住某些“坏”的区域。

我也看了本文:

www.citeulike.org/user/rchauhan/article/819528

我很感兴趣,如果你管理以不同的方式来解决这个问题。