创建一条公交路线

时间:2012-01-01 00:18:26

标签: language-agnostic graph-algorithm

什么是可用于创建公交路线的好算法或算法类?

我正在考虑用于解决旅行推销员或汉密尔顿路径问题的算法,但事实上,它们都没有真正解决如何在两站之间移动的问题。

我希望算法至少具有以下特征:

  • 产生一个相对优化的路径(我明白问题可能是NP完全,所以一个好的启发式就好了)
  • 可以处理具有不同权重的路径部分(例如,在路径的该部分上行进的时间)
  • 可以强制使用给定的起点和终点(我不认为这个会出现这样的问题)

可以做到这一点的代码,或类似的东西(尤其是在C#中),但是一个好的算法本身就可以了。

注意:虽然有很多算法可以找到两点之间的最短路径,但我不知道我希望停止的顺序。因此,除非我应该使用两种算法的组合(我怀疑是这种情况),这些算法不能做我想做的事情(如果你认为他们这样做,请解释)。

编辑:假设我知道需要进行的所有停靠。

4 个答案:

答案 0 :(得分:2)

您可以在此处使用旅行推销员算法进行小修改/假设,以解决第2点(具有不同权重的路径的一部分)。

让我们说从点“A”到点“B”的路径有两个权重(比如某些时间点的流量)

即使是单一路径,我们也可以通过假设“虚拟顶点”来简化问题,点“C”在“A”和“B”之间,它们在每个边缘都有固定的权重。 / p>

A -------体重= 10 ------ C ------体重= 15 ------ B

在这张新图表上,运行旅行推销员算法。

答案 1 :(得分:2)

这似乎是一种方法,包括使用Floyd-Warshall算法,然后使用一种算法来解决旅行商问题。

这解决了所有“可选”顶点(交叉点)的问题,并使用旅行推销员算法来确定停止点的顺序。

答案 2 :(得分:1)

我使用过Djikstra算法:http://en.wikipedia.org/wiki/Dijkstras_algorithm

沿着边缘行驶的成本不仅仅是距离,而且还与“下一个”公共汽车离开给定节点之前的时间有关。注意:当它停在节点上时,您可能已经在总线上。

答案 3 :(得分:1)

公交车路线是由人而不是电脑创建的。只有人们知道谁需要去哪里和经常旅行。您至少需要这样的数据来考虑找到最符合人们需求的路线集。关于这一点,我认为你的问题未定义。