如何在两个地方之间计算一定长度的路线/路径?

时间:2014-02-02 23:20:06

标签: graph routing a-star

考虑到一个区域中的两个位置,我如何计算连接两个位置的具有一定距离的路径(距离作为参数给出)。理想情况下,生成的路径应由不超过一次访问的道路组成。

我了解到这个问题可以看作是一个图形问题,其中地图中的道路代表图形的边缘,交叉点/交叉点代表图形的节点。由此可以将问题简化为为图中任何两个节点找到一定长度的路径。

我解决这个问题的方法之一可分为两个步骤:

  1. 找到两个节点之间的最短路径(使用A *或类似的算法)。
  2. 扩展/扩展从A *返回的最短路径,使其足够长。
  3. 现在,我不确定这种方法是否值得追求,或者是否存在更好的方法?此外,我没有遇到任何可以让我扩展路径的方法 - 是否有任何特定的技术可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

我的想法是使用ad-hoc启发式功能。目标状态应该以路径长L到达目的地。(因此,如果您通过路径太短到达目的地,则不满足目标测试并且算法将继续)。

#goal state
if (state == dest and curr_length == required_length)
    return path

对于每个其他节点,启发式必须给出一个值,该值是目的地的预期距离和必须经过的所需长度的组合。

h(state, curr_length):
    dist = manhattan_distance(state, goal)

    #must use the abs instead if curr_length > required_length this value becomes
    #negative and this node gets a wrong result
    len = abs(required_length - curr_length)

    return dist + len

我不确定这种启发式是否一致,但您可以尝试这样的事情并检查结果。 如果此搜索工作也应该是最佳的。