移动单个对象似乎很容易。寻路很复杂。为什么要麻烦寻路?

考虑以下情况:

该单位最初位于地图底部并希望到达顶部。它扫描的区域(以粉红色显示)中没有任何东西表明该单元不应向上移动,因此它会继续前进。在顶部附近,它检测到障碍物并改变方向。然后它沿着红色路径绕过“U”形障碍物。相比之下,探路者会扫描更大的区域(以浅蓝色显示),但会发现更短的路径(蓝色),永远不会将单位送入凹形障碍物。

但是,您可以扩展移动算法以解决上面显示的陷阱。要么避免创建凹形障碍物,要么将它们的凸形外壳标记为危险(仅当目标在内部时才进入):

探路者让您提前计划,而不是等到最后一刻才发现问题。在使用探路者进行规划和使用运动算法做出反应之间需要进行权衡。计划通常较慢,但会产生更好的结果;移动通常更快,但可能会卡住。如果游戏世界经常变化,那么提前计划就没有那么重要了。我建议同时使用两者:大图寻路、缓慢变化的障碍物和长路径;和局部区域的移动、快速变化和短路径。

算法#

我已经写了这一页更新版本,但没有写其余的页面。它有交互式图表和示例代码。

计算机科学教科书中的寻路算法处理数学意义上的——一组顶点,边连接它们。一个平铺的游戏地图可以被认为是一个图,每个图块是一个顶点,边绘制在彼此相邻的图块之间:

现在,我假设我们使用的是二维网格。如果您以前没有使用过图表,请参阅此入门指南。稍后,我将讨论如何在您的游戏世界中构建其他类型的图表

大多数来自 AI 或算法研究的寻路算法都是为任意图而不是基于网格的游戏而设计的。我们想找到可以利用游戏地图性质的东西。有些事情我们认为是常识,但算法不理解。我们对距离有一些了解:一般来说,当两个物体相距更远时,假设没有虫洞,从一个物体移动到另一个物体需要更长的时间。我们对方向有所了解:如果您的目的地是东边,那么向东步行比向西步行更有可能找到最佳路径。在网格上,我们对对称性有所了解:大多数情况下,先北后东与先东后北移动相同。这些附加信息可以帮助我们使寻路算法运行得更快。

Dijkstra 算法和最佳优先搜索#

Dijkstra 算法的工作原理是从对象的起点开始访问图中的顶点。然后它反复检查最近的尚未检查的顶点,将其顶点添加到要检查的顶点集中。它从起点向外扩展,直到到达目标。Dijkstra 算法可以保证找到从起点到目标的最短路径,只要所有边都没有负成本。(我写“最短路径”是因为通常有多个等效的短路径。)在下图中,粉红色方块是起点,蓝色方块是目标,青色区域显示 Dijkstra 算法扫描的区域。最浅的青色区域是离起点最远的区域,因此形成了探索的“前沿”:

Greedy Best-First-Search 算法以类似的方式工作,不同之处在于它对任何顶点距目标的距离有一些估计(称为启发式)。它不是选择离起点最近的顶点,而是选择离目标最近的顶点。贪婪的最佳优先搜索不是保证找到最短路径。但是,它比 Dijkstra 算法运行得快得多,因为它使用启发式函数非常快速地引导其朝着目标前进。例如,如果目标是起始位置的南边,Greedy Best-First-Search 将倾向于关注通往南边的路径。在下图中,黄色代表具有高启发值(达到目标的成本高)的节点,黑色代表具有低启发值(达到目标的成本低)的节点。它表明与 Dijkstra 算法相比,Greedy Best-First-Search 可以非常快速地找到路径:

然而,这两个例子都说明了最简单的情况——地图上没有障碍物,最短路径确实是一条直线。让我们考虑上一节中描述的凹形障碍物。Dijkstra 的算法工作更努力,但保证找到最短路径:

另一方面,Greedy Best-First-Search 做的工作较少,但它的路径显然没有那么好:

问题在于贪婪的最佳优先搜索是“贪婪的”,即使它不是正确的路径,也会试图朝着目标前进。由于它只考虑到达目标的成本,而忽略了到目前为止的路径成本,因此即使它所走的路径变得很长,它也会继续前进。

将两者的优点结合起来不是很好吗?A* 于 1968 年开发,结合了诸如贪心最佳优先搜索之类的启发式方法和 Dijsktra 算法之类的形式化方法。这有点不寻常,因为启发式方法通常会为您提供解决问题的近似方法,但不能保证您得到最佳答案。但是,A* 是建立在启发式之上的,虽然启发式本身并不能保证,但 A*可以保证最短路径。

A* 算法#

我将专注于A* 算法。A* 是最流行的寻路选择,因为它相当灵活,可以在广泛的上下文中使用。

A* 类似于 Dijkstra 算法,因为它可以用来寻找最短路径。A* 类似于 Greedy Best-First-Search,因为它可以使用启发式方法来引导自己。在简单的情况下,它与 Greedy Best-First-Search 一样快:

在具有凹形障碍物的示例中,A* 找到了与 Dijkstra 算法找到的路径一样好的路径:

其成功的秘诀在于它结合了 Dijkstra 算法使用的信息片段(偏好靠近起点的顶点)贪婪最佳优先搜索使用的信息(偏好靠近目标的顶点)。在谈论 A* 时使用的标准术语中,g(n)表示从起点到任何顶点的路径的确切成本n,并h(n)表示从顶点到目标的启发式估计成本n。在上图中,黄色 ( h) 代表远离目标的顶点和青色 (g) 表示远离起点的顶点。A* 在从起点移动到目标时平衡了两者。每次通过主循环时,它都会检查n具有最低的顶点f(n) = g(n) + h(n)

本文的其余部分将探讨启发式设计实现地图表示以及与在游戏中使用寻路相关的各种其他主题。有些部分发展得很好,而另一些则相当不完整。

(0)

相关推荐

  • 算法解析:自动驾驶实时路径规划

    导读: 本文由Vehicle授权发布,作者为Pirate Jack. 本节主要介绍在自动道路驾驶领域现有研究中使用的规划技术.给定一条由路线规划(导航)提供的路线,在道路上行驶的运动规划(以下简称规划 ...

  • 弗洛伊德(Floyd)算法求图的最短路径

    弗洛伊德基本思想 弗洛伊德算法作为求最短路径的经典算法,其算法实现相比迪杰斯特拉等算法是非常优雅的,可读性和理解都非常好. 基本思想: 弗洛伊德算法定义了两个二维矩阵: 矩阵D记录顶点间的最小路径 例 ...

  • 最短路径之贝尔曼-福特算法

    基本概念 图: 有顶点和边组成.又分为 有向图: 在这里只能从A到B,不能从B到A. 无向图: 能从A到B,也能从B到A,也可以用下图表示: 还有就是给边加上权重,变成加权图: 权重代表了两个顶点连接 ...

  • 迪杰斯特拉算法求最短路径

    (针对从某一源点到其余各顶点间的最短距离) 初步的思想过程: 1.引进两个集合S和T,指定起始点O.S用来记录已求出的最短路径的顶点(以及相应的最短路径长度),T用来记录未求出最短路径的顶点(以及该顶 ...

  • Dijkstra算法(迪杰斯特拉算法)

    对比算法好坏需要考虑的因素 执行算法所耗费的时间 执行算法所耗费的存储空间 Dijkstra算法(迪杰斯特拉算法) 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,是从一个顶点到其余各 ...

  • 离家出走的扫地机器人是会“思考”的

    近日有这样一条消息"趁着门没有关好,扫地机器人竟然自己跑出去了",鉴于扫地机器人的价格还是比较昂贵,所以业主张贴了这样的寻物启事. 面对这样的消息,网友们也纷纷送来了"安 ...

  • 心理学:结婚对象的「长相」很重要吗?回答有关长相的常见问题

    结婚对象是共同走过漫长人生的重要存在.每个人在寻找结婚对象的时候,都会说:「这个很重要,那个也很必要」,如此这样想,然后对能够结婚的对方设定几个条件.在各种各样的条件下,对结婚对象的「长相」的重视程度 ...

  • 想到找对象就焦虑对未来很迷茫怎么办?

    发布时间:2021-08-02 by 壹心理优秀答主们 问答 36岁单身男,想到找对象就焦虑对未来很迷茫怎么办? 回答13有用79 讨论 男36,去年疫情公司裁员爱情长跑分手,悲愤交加就回省会城市了, ...

  • 100多年前的水彩,现在看还是很美,很惊艳,超经典!

    迷上景观手绘 46篇原创内容 公众号 免费学习景观手绘 这期我们整理了一部分百年前的水彩 创作时间以18-19世纪为主 在欧洲的美术馆.博物馆收藏体系里 水彩是和素描.手稿.设计稿等放在一起的 老惯例 ...

  • 小猫咪的脸被蜜蜂叮肿了,虽然很心疼但是很好笑,跳跳虎是你吗?

    每个人都会有好奇心吧,只要是自己未了解的事情,那么就有兴趣去知道其中的秘密,才能推动社会的进步.不过也有这么一句话,叫做好奇心害死猫.如果你感兴趣的事情是非常危险的话,那么就要承担后果的风险. 就有这 ...

  • 混凝土质量通病防治大盘点,很实用、很方便!

    混凝土质量通病大盘点 工 程施工过程中,混凝土出现质量问题,一般缺陷在所难免.对于混凝土工程,出现不同的质量缺陷,都有不同的处理方法和预防措施.下面小编带大家做一回"质量"医生. ...

  • 刘若英的41句话,很温暖,很心疼

    刘若英的41句话,很温暖,很心疼

  • 一位鱼友介绍如何培养青苔绿水的方法,很详细、很全面

    一.鱼缸的水质转变过程 先来说一下水的转变过程,新水转为老水有一个浑浊期,一般会保持2-4天后开始转清,这个浑浊期,实际上是相对洁净的水环境中微生物群落开始繁衍的征兆. 很多新手朋友在这个时候就开始大 ...

  • 少年之页/黄铂原:那份爱,很甜,很甜……(辅导老师/喻荣春) ​

    文/黄铂原 辅导老师/喻荣春 终于盼到了那个日子 和妈妈团聚 怀抱让我难忘 那温暖流淌全身-- "鱼香肉丝" "巧克力蛋糕" 和妈妈一起享分享 好香!好甜! 快 ...

  • 触动人心的几句话,很短,很精辟,却超现实!

    文/飞鱼 导语:触动人心的几句话,超现实! 1.生气解决不了问题,反而伤到了自己. 人生当有过一些经历后,才懂得生气解决不了问题,反而伤到了自己,所以遇事要冷静.宽心. 我一个朋友就是,过去的十年,每 ...