【问题标题】:AI navigation around a 2d map - avoiding obstacles围绕 2d 地图的 AI 导航 - 避开障碍物
【发布时间】:2010-05-01 23:21:31
【问题描述】:

我知道我的问题似乎很模糊,但我想不出更好的表达方式,所以我先解释一下我要做什么。

我目前正在做一个项目,我得到了一张地图,我正在编写一个“小动物”,它应该能够在地图上导航;小动物还有其他各种功能,但这些功能与当前问题无关。整个程序和解决方案都是用 C# 编写的。

我可以控制小动物的速度,并通过返回它当前的 X 和 Y 位置来检索它在地图上的当前位置,我还可以在它与阻挡它的地形发生碰撞时设置它的方向。

我唯一的问题是我想不出一种智能地在地图上导航的方法;到目前为止,我一直根据小动物与地形碰撞时所面向的方向来确定它,这绝不是在地图上移动的好方法!

我不是游戏程序员,这是软件作业,所以我对 AI 技术一无所知。

这里是地图和小动物外观图片的链接:

Map and Critter image

我绝不是在寻找任何人给我一个完整的解决方案,只是在地图导航的大方向上推动。

【问题讨论】:

  • 你说你可以“在它与阻挡它的地形碰撞时设置它的方向”。你只能在它与某物碰撞时确定它的方向吗?或者,您可以在它在地图上导航时随意改变它的方向吗?
  • 我可以随意改变方向!
  • 地图是否提前完全知晓?或者,您是否必须通过与您的小动物一起探索地形来发现障碍和奖励?

标签: c# algorithm artificial-intelligence path-finding


【解决方案1】:

如果你对环境的唯一了解是你的小动物的位置和它的速度,那么我认为你能做的最好的就是墙跟随算法。如果您可以检测环境中的其他一些东西,那么您有更多选择。

一些比较流行的算法类型是......

势场是一种奇特的说法,即每个障碍物或墙壁都具有“排斥力”,而每个目标都具有“吸引力”。力的强度取决于与物体的距离和物体的“严重性”。 (熔岩坑比崎岖不平的道路要严重得多)在构建了力场之后,朴素的算法归结为遵循阻力最小的路径。更好的版本可以检测局部最小值和最大值并避开那些井。

    Critter
    -----\    /-------\
          \  /         \ 
           \/           \
   Local Minima Trap     \
                          \
                           \
                             Goal

【讨论】:

    【解决方案2】:

    A* 搜索

    看看A* 寻路算法。它本质上是这样的标准方法。

    Amit Patel 在 pathfinding for games 上的文章很好地介绍了 A* 以及该算法的流行变体。

    您会发现 C# 实现 herehere

    动态 A*

    假设您要搜索的地形不是事先知道的,而是在代理探索其环境时发现的。如果您的代理遇到以前未知的障碍物,您只需更新代理的地形图,然后重新运行 A* 以找到一条新路径,以绕过障碍物到达目标。

    虽然是一种可行的解决方案,但每次发现新障碍时都从头开始重新运行规划算法会导致大量冗余计算。例如,一旦您绕过障碍物,到达目标的最有效路线可能是您在发现障碍物之前计划采取的路线。只需重新运行 A*,您就需要重新计算上一条路径的这一部分。

    您可以使用Dynamic A* (D*) 来避免这种情况。由于它跟踪先前计算的路径,因此当代理发现新的障碍物时,系统只需要计算障碍物周围区域的新路线。之后,它可以重用现有路径。

    【讨论】:

    • 那是针对重点 D* 的论文,而不是针对 D* 的论文。但是,这两个都已被 D*-Lite 取代。有关更多信息以及可能适用于 OP 问题的其他算法,请参阅here
    【解决方案3】:

    我会使用以目标为导向的方法。您的问题表明目标不是探索地图并避开障碍物,这就是我们的目标。但是我们如何探索整个地图呢?我们探索未探索的事物。

    从一开始,您就只有一个未探索的区域,即您所在的广场。地图的其余部分被标记为未探索。您选择一个未探索的位置,并将探索它作为您的目标。但是你怎么去那里?您创建一个子目标来探索它旁边的位置。以及如何做到这一点 - 探索旁边的方格,依此类推,直到您的原始目标分解为一系列探索,从您当前的方格开始并导航到目标方格。

    当您遇到障碍并发现地图的特征时,可能需要更改一些子目标。例如。当你碰壁时,探索那个广场的子目标必须被清除,你创建一个新的计划来寻找替代路线。这称为回溯。

    这基本上就是高级描述。希望对你有帮助!

    【讨论】:

    • 我不会这样做——你想在附近选择一个目标。我的目标是探索最近的未探索广场。
    【解决方案4】:

    我似乎在聚会上迟到了。如果你的小动物手头有 GPS 和完整的地图,那么正确的做法肯定是 A*,如果地图足够小,如果你不想编码 A*(A * 有很多你想要正确处理的极端情况。

    但是另一个问题是,如果你的小动物只知道目标的方向并且只能局部地观察它周围的情况怎么办?如果你的小动物不知道完整的地图怎么办?

    在这种情况下,您可能希望为导航实现“错误算法”。链接:http://www.cs.cmu.edu/~./motionplanning/lecture/Chap2-Bug-Alg_howie.pdf

    这是一种适用于所有未知地图的可爱算法,我敢肯定,你一定会对它进行编码。

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2011-08-25
      • 2013-12-08
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多