3D寻路AI算法推荐与分析

时间:2013-10-22 17:16:45

标签: algorithm artificial-intelligence time-complexity path-finding a-star

我正在尝试解决以下问题: 我有一个2D平铺游戏,其中包括在空域飞行的飞机,试图降落在最近的机场(可能有'n'目标)。这个想法是让飞机自己寻找最佳路径,避免碰撞。

所以我打算尝试A *算法,但后来我发现了另外一个限制:如果需要,飞机可以改变它们的高度。所以我有想法实现相同的A *哲学,但是在3D中(将节点扩展到可能的移动,让平面也向上,向下,向北,向上等移动,制作抽象的3D处理相对高度,从而让算法找到3D移动的最佳路径。

关于启发式方法,我放弃了曼哈顿的实例,因为我希望算法更有效率(因为你知道一个好的启发式算法可以提高搜索效率,曼哈顿估算成本,我使用对角线移动),所以我决定实现对角线距离(它结合了曼哈顿和欧几里德的各个方面),建议使用8个邻接(在对角线移动中扩展节点)。但我有更多的邻接关系,所以我试图将对角线距离公式调整为16个邻接关系(不包括向上和向下的对角线,如东北向上,向下向西,等等),所以曼哈顿估计每个'对角线移动'(除了我提到的那些)具有相同的成本值(1个对角线移动= 2个正交移动,而不是3个,因为它在“我已经排除的”上下对角线),并且具有此公式启发式被概括为:

让节点A为起点,B为目标,其各自的位置为(xa,ya,za)和(xb,yb,zb)

numberOfDiagonalSteps = min {| xa-xb |,| ya-yb |,| za-zb |}

manhattanDistance = | xa-xb | + | ya-yb | + | za-zb |

numberOfStraightSteps = manhattanDistance - 2 * numberOfDiagonalSteps

假设对角线步骤成本为sqrt(3)(你知道,毕达哥拉斯,正交成本为1):

启发式是:h(n)= numberOfStraightSteps + sqrt(3)* numberOfDiagonalSteps

嗯......我的一个问题是,随着飞机的移动(“障碍节点”),算法必须刷新,重新执行,所以,你建议我做什么最好? 我的意思是......最好这样尝试,或者更好地尝试实现D * -Lite?

我的另一个问题是关于时间的复杂性。很明显,这些算法的最坏情况是指数级的,但它可以通过良好的启发式方法得到真正的改进。但我没有找到如何精确分析我的问题中的算法。我可以给这个算法多大的时间复杂度,或者你建议我在我的情况下做什么?

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

我会使用简单的地图填充见:

但地图将有更多图层(飞行高度)。可能只有少数(限制时间/内存浪费),例如8层应足以容纳128架飞机。

当然,它取决于 2D 地图区域大小,并且在填充地图后,只需从中获取最短路径。在填充地图时,将任何平面视为障碍物(为了安全起见,周围有一些边界)。在此算法中,您可以非常简单地添加燃料消耗标准或任何其他标准。

此外,机场选择也可以非常简单(首先要先获得最接近的机场)。您必须在决定时为每架飞机制作地图(或分别为每架飞机重新制作相同的地图)。不需要是整个地图......只是目的地和飞机之间的区域

如果您必须遵守空中交通规则,那么您需要应用飞行计划+临时安排。这不是一项容易的任务(花了差不多半年的时间来编写代码),而且空中交通管制也有点复杂,特别是空中和现场分享的等待问题。所有这一切都必须通过动态变化(天气,等待,技术/政治或安全问题,......)但我强烈怀疑这是如此简单的地图填写应该做的事情:))

相关问题