首页 > 解决方案 > 具有方向和权重的寻路算法

问题描述

假设您有两个阵列,分别代表海上某个区域的波速方向。速度是整数,方向是度数。这些数组对应于经纬度区域(无关紧要)。

然后,假设您想找到从 A 到 B 的最短(最快)路径(假设直接驶入波浪会减慢您的速度,如果波浪速度很大,它会使您减慢更多)。你们都必须考虑波速和波的方向。

据我所见,Dijkstra 和 A* 无法解决这类问题。有没有人处理过类似的事情?

标签: pythonpathpath-finding

解决方案


我目前正在为 python 开发一个寻路库。我已经编辑了 A* 以便能够处理这种情况。但是它处于非常早期的开发阶段,因此它可能无法正常工作。而且它没有文档。使用它只需创建一个集群,女巫是处理所有探路者的基本类。

SIZE = 10
arr = np.ones((1, SIZE, SIZE),
               dtype=np.int)

clus = pypathing.nodeGraph.Cluster()
clus.build(arr, pypathing.directions.fullDiagonal)

其中pathfinding.directions.fullDiagonal声明允许所有对角线移动(在这种情况下我会建议女巫,但您也可以使用pypathing.directions.noDiagonal女巫不会使用任何对角线移动)。

你可以通过以下方式让 Edge 连接 2 个集群:

e = clus.getEdge(clus.getnode((0,0,0)), clus.getnode((0,0,1)))

比您可以使用它来设置电流在从clus.getnode((0,0,0))到方向的速度有多快clus.getnode((0,0,1))

e.nodeMoves = 1

而不仅仅是通过以下方式获取路径:

clus.runAstar(start, end, speed=1)

其中start是起始节点,end是路径的结束节点,速度是船的速度。


推荐阅读