是否有可用的Python路径寻找库?

14 投票
4 回答
6129 浏览
提问于 2025-04-16 22:39

我正在用Python开发一个实时的等角视角角色扮演游戏,想把它做成可以在手机上玩的。现在我遇到的主要问题是路径寻找。为了适应我使用的地图,我尝试了几种算法,包括A*算法,并做了一些调整。

我对我的算法结果很满意——它们看起来有点智能,而且是确定性的,也就是说,无论角色朝哪个方向移动,两个角色朝着对方的位置走时,最终都会在中间相遇。

但问题是,虽然在我的电脑上效果很好,因为电脑处理能力强,但在手机上就不一样了,算法计算时常常会有一秒或更长的延迟。因此,我考虑写一个库,把性能要求高的代码用C语言写,不过如果有现成的解决方案或者更好的方法,我非常乐意听取建议。

我偶然发现了python-pathfinding,但这个库似乎比我自己为我的需求开发的要慢。


我的使用场景:

我的地图是由不同的房间组成,这些房间被墙壁(可见或不可见)包围,并且必须通过门(可见或不可见)相连。

我现在的做法是使用两种不同的算法:

  • 在一个房间内,我把每个瓷砖当作节点来搜索,每个边界都视为相同成本的边,使用深度优先搜索朝着目标位置的方向。

  • 在房间之间,每扇门作为一个节点。通过第一个算法计算出房间内从一扇门到另一扇门的最短路径,并将其存储在哈希表中作为这些节点之间的边的成本。然后计算可以从一个节点到另一个节点的边集,并同样存储在哈希表中,路径中不允许重复使用同一条边。

我在启动时生成一个单独的进程,利用第一个算法为第二个算法生成一个图,这样解决了我很多问题,因为房间相对较小,所以实时路径寻找的负担比可能的要小。对于更长的距离:

  • 使用第一个算法计算当前地点到当前房间每扇门的距离。
  • 使用第一个算法计算目标房间每扇门到目标位置的距离。
  • 第二个算法的输出用于获取房间之间的路径集合。
  • 将这些路径的成本加上到达第一扇门和从最后一扇门的成本。
  • 将解决方案按成本排序,使得相同成本的路径顺序始终一致。
  • 选择解决方案集合中的第一个项目。

4 个回答

2

如果你已经有一个满意的Python版本,那为什么不试试用py2cmod来处理一下呢?这样可以帮你把现在的算法大部分转换成C语言版本。

还有一个选择是psyco,不过它的开销比较大。

4

如果你能把你的游戏环境简化成一个图形(就像点和线的连接),那么http://networkx.lanl.gov/这个网站上有很多很不错的现成算法可以用来处理这类问题。

5

首先,我知道一个非常高效且通用的库,可以用来处理A*搜索算法。这个库叫做 lib2dp。你可以很方便地把用Python生成的图形放到这个库里,然后快速得到结果。

其次,A*算法主要是用来找到最佳路径的,前提是:

  • 你对周围环境有完全且准确的信息。
  • 你的周围环境被认为是“静态”的,也就是说不会变化。

如果你打破了其中一个规则,可能就需要考虑另一种算法,叫做 'D*'。

当然,使用这种算法会在性能上付出很大的代价。所以,找到适合你程序的最佳平衡点就得靠你自己了。

撰写回答