如何设计近似路径解决方案?

时间:2009-04-12 16:53:52

标签: algorithm search graph-theory

我正在尝试编写(或扩展现有的)图搜索算法,这将让我找到最接近目标节点的路径,因为无法保证节点将被连接。

为了提供一个现实的应用,让我们说我需要从安大略省的布兰普顿到安大略省的汉密尔顿。我知道我可能的选择在我的起点是本地交通,GO巴士或步行。我知道步行是到达目的地最不希望的方式所以我先看看GO巴士。我知道我可以把GO带到靠近汉密尔顿的地方,但是那时GO总线转向另一个方向,那个最近的点是在我没有选择的地方(除了步行,但算法只会考虑走路)对于短距离,否则会认为路线不可行)

使用同样的例子,如果算法发现我可以通过更长的方式到达目的地节点(或可能在目标节点处),那将是一个更高的加权路径(权重)在搜索时并不重要,只有当结果被传递时,它才会按升序列出哪条路径最接近目的地。例如,一辆GO巴士可能距离目的地节点3公里,而3辆公共巴士可以让我离我500米远

所以我的问题有两个: 1)我应该从哪个算法开始做类似的事情 2)我如何编程解释如果节点没有连接就可以了,这样它就不会从节点A跳到节点R.从最后开始并向后工作完成这个

编辑:我忘了询问如何针对最佳近似解决方案,因为特别是对于大型图表,可能会有数百万个解决此问题的解决方案。

谢谢, 迈克尔

3 个答案:

答案 0 :(得分:4)

阅读A* algorithm。它是Dijkstra最短路径算法的推广,允许您指定一个启发式,它提供两个椎体之间距离的下限。在您的情况下,启发式函数将简单地返回欧几里德距离。

运行算法并跟踪具有最佳特征值的顶点,您可以根据从源和欧几里德距离到目标的图形距离来计算。唯一棘手的部分是确定何时终止(除非你想遍历整个图形)。

答案 1 :(得分:2)

为什么不能假设所有节点都已连接?在现实世界中,他们通常是,即你总是可以步行或叫出租车等?

在这种情况下,您可以通过以下方式更改模型:每种运输方法都有一个图表。位于同一地方的节点与重量为0的边连接(即如果您在机场或火车站乘车下车)。

然后,使用传输类型标记每个顶点和边缘,您可以简单地使用现有的路由算法。哦,顺便说一下:A *不会很好地扩展到真正的大网络。要获得像Yahoo / Google / Microsoft Maps这样的软件实际使用的内容,请查看here。该研究组的工作包括DIMACS shortest path challenge的获胜者。

答案 2 :(得分:-1)

听起来非常像具有其他节点特征的travelling salesman问题。请注意这类问题是NP Complete,你最好的选择是使用某种近似算法。