问题:
修改我们优化的A *算法以减少转弯次数。该算法现在将找到一个 从(a,b)到ANY TILE ADJACENT到(x,y)的路径,其中(x + 1,y)或(x-1,y)是有利的 如果可能的话。
我的尝试解决方案:
视觉演示:(从S到E的路径,其中X不可访问)
......S .....S
. X . X
. => .
. .
E E.
但是我不确定我的解决方案在某些情况下会起作用,即:
......S .....S
. X . X
.X ??? X.
. .
E E..
有人能想到这个问题的解决方案吗?
注意:A *算法是通用的,除了考虑方向变化的数量,以便在结果路径中减少转弯。
答案 0 :(得分:2)
A *实际上是Dijkstra's algorithm的通知版本,因此实际设计[使用admissible heuristic函数]来找到所有顶点的最短路径 [来自单一来源]
您可以将(x,y)
附近的所有切片定义为目标顶点[A *可以整齐地处理多个目标],您还需要修改启发式函数,为任意<提供一个允许值/ em>目标节点。这可以通过简单地修改h'(tile) = max { h(tile) - 1 , 0}
来完成 - 但在某些情况下,您可能有更好的方法来执行此操作。
建立上述内容后,我们可以对原始A *进行以下修改:
d
。A*
,直至最小值
开放节点的f(tile)
值严格大于d
。 你是
保证找到所有可通过长度为d
的路径从源访问的切片,具体而言 - 您将找到所有具有来自长度d
源的路径的目标切片。 [假设允许的启发式功能]。我希望有所帮助!
答案 1 :(得分:0)
修改您的启发式功能,以略微提升积分(x+1,y)
和(x-1,y)
。然后,如果距离完成路径只有两步,则会打破关系以支持这两点。