【问题标题】:Creating a bus route创建公交路线
【发布时间】:2012-01-01 00:18:26
【问题描述】:

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

我在想一些类似于用于解决旅行推销员或哈密顿路径问题的算法,但实际上,两者都没有真正解决如何在两站之间移动的问题。

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

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

可以执行此操作的代码或类似的代码将不胜感激(尤其是在 C# 中),但一个好的算法本身就可以了。

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

编辑:假设我知道所有需要做的事情。

【问题讨论】:

    标签: language-agnostic graph-algorithm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      假设从“A”点到“B”点的路径有 2 个权重(例如,某个时间点的流量)

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

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

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

      【讨论】:

      • 我想你明白了。使这个问题与旅行推销员不同的问题(无论如何我都理解,如果我弄错了,请纠正我)是有许多我不需要命中的顶点(即每个未使用的交叉点)。有没有可以做到这一点的旅行推销员算法?
      • 好吧,如果您绝对不需要顶点命中,那么,您可以将通向该顶点的所有边的权重增加到“无穷大”,而推销员问题机制将“自然”避免那些边缘。你的想法?
      • 图上的所有交点都应该是虚拟顶点。它们应该被选择性地命中,而不是从不命中,或者总是被命中。
      【解决方案3】:

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

      沿边行驶的成本不仅与距离有关,还与“下一个”公共汽车离开给定节点的时间有关。注意:当它停在一个节点时,你可能已经在公共汽车上了。

      【讨论】:

      • 我想你误会了。我不想赶公共汽车,我想创建公共汽车路线。不确定 Djisksra 在这种情况下如何工作......
      • 我还是不明白,而且我仍然认为 Dijkstra 的算法适用,因为它告诉你要停下来。条条大路通罗马,Dijkstra 的算法告诉你最好的。虽然维基百科指的是最短路径,但该算法实际上适用于最低成本。因此,应用与您的标准相关的成本。如果您想知道每个节点中有多少人,请将其添加为您的标准,这应该会告诉您从 A 到 B 的最佳路径,这样您就可以选择最多的人。
      【解决方案4】:

      公交路线是由人而不是计算机创建的。只有人们知道谁需要在哪里以及多久旅行一次。您至少需要这样的数据来考虑找到最适合人们需求的路线集。关于这一点,我认为您的问题定义不足。

      【讨论】:

      • 见编辑澄清,但我认为你是不正确的。我不想让程序告诉我应该在哪里停靠,而是告诉我公共汽车应该在每一站停靠的顺序和路径。对我来说,这似乎是一个非常明确的问题......
      • 重点是您需要定义约束 - 其中有 几十个 - 然后只需应用 Dijkstra 算法即可。
      • Dijkstra 的算法适用于两点之间的最短路径。对于这个问题(无论如何我都看到了,如果我弄错了请更正)我首先需要确定应该击中点的顺序。 Dijkstra 不这样做。
      • 我认为 Ondrej 的观点是让人们更容易知道在当地磨坊工作的数千人都住在Poortown,在当地购物中心工作和购物的两百人都住在住在 Richtown,您的公交路线应该反映这种知识 - 这可能意味着您的两条公交线路交叉并且永远不会有任何公共站点。或者他们可能会沿着相同的两个站点以相反的方向运行,以方便换乘。或者,也许他们应该共同跑十几个站点,只分往 Richtown 和 Poortown 以及 Mill 和 Mall。
      • @sarnold 是的,完全正确。有必要了解乘客施加的约束和指标。它们可以转化为图表中的边缘指标。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2016-05-26
      • 2013-02-12
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多