我正在涉及一些寻路系统(现在是A *),但我没有经验足以完全掌握一切背后的概念。如果这篇文章充斥着无知或错误的假设,请原谅我。
我的目标是让一个物体遍历多个飞机到达目的地,每个等级都有可变入口,每个等级都有不同的设计。 想象一个洞穴系统,顶部有8个入口,你的目标是达到6层......一些洞穴连接起来,因此路径可以共享,但其他洞穴被隔离直到某个点......等等此外,可以在每个级别上改变路径的互连性。 我知道有一些系统可以做到这一点,但我的目标是最终/最快的选择,以及快速执行此计算的能力(在任何给定时间计算至少80+个不同路径的可能性)
一个例子是这样的:
每一层'是另一个'或平面。绿色是层之间上下的路径。在实例的过程中,路径可以放在任何地方,并且可以删除层内的任何分区(但对于此实例的情况,它们的组织方式如此)
在单个级别上实现A *以进行某些基本路径查找相当容易(例如,从一个位置到梯子下降)。但是,试图决定哪个阶梯将导致最终目标是困难的。
我最初的想法是做一些更像是在同一级别上将路径链接到彼此的数据结构,并进行某种树遍历来确定路径查找应该指向哪个阶梯到达某个阶段时等级...但是这很复杂,看到任何给定点都可以改变等级。
就像我说的那样,我不确定A *究竟是如何工作的,或者它背后的基础知识......但是大多数人所说的基本算法都适用于多层设计。
我知道这实际上取决于引擎和算法的实现,所以我不是要求具体细节......而是关于解决这种情况的最佳方法的一些指示; 我是否应该找到一个内置多级计算的工作A *实现,并更改我的级别架构以适应它? 我应该只使用2d A *实现,并创建一条“路径”。结构,给出每个级别的路径指示?
这种设计风格的另一种方法是否更有益,更有效(考虑到要找到的计算/路径的数量)?
谢谢!
答案 0 :(得分:0)
想到一种方法:
对于每个级别,计算所有Manhattan distances(如果你可以对角移动,可能是/2
)(假设每个级别是一个2D网格)从每个梯子上升到每个梯子下降,并且让每一层的价值都是那些最短的距离。
现在我们可以简单地让A *启发式算法成为从当前楼层到底层的距离之和。
为了防止在每个级别上重复计算路径,我们可以在每个级别上预先计算从梯子到梯子的每个可能路径 - 然后我们也可以使用这些路径中最短的路径而不是启发式的曼哈顿距离。
你说在任何特定的时间都有可能计算出至少80多种不同的路径。
如果这些都在同一张地图上,你应该考虑,对于每个阶梯,计算我们应该去的下一个阶梯是什么,这将导致最短的路径(以及它的成本)(可能使用{的一些衍生物{3}}从底部开始),然后我们可以简单地从任何起点检查同一楼层所有梯子的距离和最短路径的成本,并简单地选择一个给出最小距离和最短路径。
我们甚至可以通过为任何给定点存储下一个方格应该移动到最短路径的内容来扩展它。
如果地图发生了很大的变化,那么存储任何给定点的下一个点可能是不可行的,但不要为每个梯子存储下一个梯形图。