我一直在Unity中玩耍,并且在2D正方形节点网格上实现了一些路径查找的A *算法。从那时起,我将寻路功能扩展到了3D节点网格,因此我基本上有了一个2D网格节点作为地面,并在其顶部有另一个2D网格节点作为天空。
计划是使用A *创建机场和航空旅行。到目前为止,我的两个网格通过机场链接在一起。例如,当我在一个机场的节点的地面网格上搜索邻居节点时,我还将天空网格中的邻近节点添加到列表中。这允许从机场“起飞”到天空中的相邻节点。同样在天空中时,我搜索相邻节点,并且如果相邻地面节点之一是机场,我会将其添加到邻居列表中。这使飞机可以从天空“降落”到机场。
到目前为止,我的地面旅行所需的移动成本与各种地形相关,而我的空中旅行目前为0,但是在“起飞”和“着陆”进出天空的过程中,移动成本很高。这样做的目的是希望创建一条更快的穿越天空的道路,使之值得,但要增加一次巨大的一次移动费用以保持平衡,因此在两个机场之间走说4个节点是毫无意义的。
一切正常。如果乘飞机的旅行费用少于必须在地面上行走的费用,则该人选择乘飞机旅行。但是,我的问题是,有时很显然在飞机场上会选择地面路径,因此有时会在机场上选择与其相关的任何成本的路径,这显然比飞机要覆盖的地面节点更多。
我有一种感觉,这可能是由于朝目标的路径搜索,而不是由于机场,可能是在另一个方向,并且由于这个原因,机场不是搜索到的任何节点的邻居节点,因此甚至没有考虑即使这可能是更快的路径解决方案。
听起来像是我遇到的问题吗?如果我想做这样的事情,我使用的算法类型错误吗?我有什么办法可以帮助检查附近的机场,或者给予他们更多的关注?我想我可以以较低的运输成本或其他方式增加通向他们的道路...
谢谢你的帮助!
最佳答案
您可以通过修改启发式方法来获得所需的结果。例如,如果您基于从节点到最近机场的距离来减小该节点上的启发式值,则将使A *算法偏向搜索通往机场的路径。
例如,假设您正在使用特定的启发式方法,例如“曼哈顿”。因此,在计算任何节点的启发式值时,取较小的值:
曼哈顿到目标节点的距离
曼哈顿到最近机场的距离+飞往离目标最近的机场的成本+曼哈顿从目标机场到目标的距离。
建议谨慎行事。调整启发式算法以偏斜算法以测试某些路径可能会在这些路径不是正确的最短路径时为您带来较差的结果。这只是野兽的本性。
关于c# - A * 3D寻路-Unity,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29955017/