【问题标题】:Pathfinding algorithm with direction and weights具有方向和权重的寻路算法
【发布时间】:2021-02-08 11:35:35
【问题描述】:

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

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

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

【问题讨论】:

  • 您对 A* 和 Dijktra 有什么看法?应该如何考虑波速和方向?驶入海浪如何直接减慢速度?请详细说明问题,使其成为编程问题。
  • 我已经看到了有向图的解决方案,这些解决方案不允许以与边的角度进行遍历。波速只是有向边的权重。问题是,如何考虑到一艘船可以与海浪成一定角度航行,而不仅仅是同一个方向。
  • 我想我可能明白你的意思,但它仍然有助于进一步澄清问题。到目前为止,我不确定这是物理问题还是编程问题。根据波速和传播方向,您的船速模型是什么?
  • 它可能通过使用不同方向的不同长度的节点和边

标签: python path path-finding


【解决方案1】:

我目前正在为 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 女巫不会使用任何对角线移动)。

您可以通过以下方式获得连接 2 个集群的 Edge:

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 是路径的结束节点,speed 是船的速度。

【讨论】:

  • 确保你有正确的节点方向
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多