设计面向游戏的人工智能(第 3 部分)

战术和战略人工智能 (AI)

上次谈到游戏主角时,他们已经能够观察周围情况并能够判断前进方向。在本文中,我将向大家介绍如何提高代理的智能级别。代理现已能够处理即时情况。现在,大家正在努力实现人工智能。人工智能具有丰富功能,能够处理各种工作。

战术人工智能

战术人工智能的作用是协调游戏中智能代理组的工作。这种人工智能的实施对许多类型的游戏都至关重要。战术第一人称射击 (FPS) 游戏中的小队以及实时战略游戏中的单元组都使用战术方法。小组更加高效,因为组员能够相互支持,作为一个整体开展行动,一起获取和分享信息。

战术人工智能的概念以小组动力为基础,需要游戏跟踪不同的实体小组。每个小组需要与单个成员分开进行更新。您需要使用专用的更新模块实施更新,该模块能够跟踪不同的小组及其目标和组成。然而,这种方法需要为引擎开发一个单独的系统,因此我更喜好使用组长方法 (group captain method)。

您可为单个小组分配空军上校的角色。小组中的每个其他成员都需要听从组长指挥,根据组长的命令采取相应行动。组长全面负责实施整个小组的战术人工智能计算。

小组移动: 路径查找

实体移动是一个实施区域,可通过小组动力进行改进。智能代理用作一个单元可提升移动的效率和逼真度。

路径查找较为耗时,即使使用预计算的路径图和多线程人工智能进行加速也无效。小组动力可大幅减轻路径查找系统的压力。

当单元小组获得了行动目标(通过玩家或人工智能指令),最接近目标的单元被设置为组长,所有其他成员都需要跟随组长。当组长被替换时,它需要查询路径系统。借助路径信息,组长可以达到目标。小组中的所有其他单元只需要跟随组长,无论组长要去哪里。

小组移动:阵型

由于小组作为一个集体采取行动,因此您能够成功减轻路径系统的负载。遗憾的是,各单元的行动方式较为松散,缺乏组织性。输入阵型。借助阵型,小组能够以规则的图案开展行动,如方阵(历史模拟)或三角形(Codemaster《霸王(Overlord*)》中的士兵开展行动的方式,如图 1 所示)。
 

图 1. 在《霸王》中,士兵(红色着装者)在听到玩家(身披盔甲者)的命令之后会以编队形式集体行动。


编队的设置非常简单,而且是对组长概念的延伸。在编队中,每个成员都有一个不可或缺的特定角色。编队组建完成后,每个成员都有特定站位,就像单个成员被指定为组长一样。编队中每个成员的站位都需要与其他成员保持相对距离。

让我们以《霸王》中的士兵为例。他们以金字塔编队开展行动。在图 2 中,组长“C”只需按照路径行动。成员 1 将在目标成员“C”的后方偏左位置以设定速度行进,成员 2 需与成员 1 保持一致。成员 3 完全以成员 1 而非组长为行动导向。小组中的每位成员都需要以这种编队方式开展行动。
 

图 2. 三角形行动编队设置


小组战术

战术不仅仅指以编队形式行进,而且注重团队并肩作战。组长负责团队的规划和协调工作。毕竟,保护小组成员的生命是指挥官的职责所在。

小组战术的实施需使用以往文章探讨的系统,如基于规则的系统或有限状态机 (FSM)。下面列举一些有关典型小组行动的示例(见图 3):
 

  • 治疗支持。有些游戏具有医疗兵或牧师等治疗支持角色,例如,游戏中的医疗兵需要了解小组成员的健康水平。组长可根据相关信息安排战斗。例如,组长可命令医疗兵守护在可能受到火力攻击的组员附近。
  • 侦察。在《深入敌后:雷神战争 (Enemy Territory: Quake Wars)》*等游戏中,相关角色可为其他组员提供侦察服务。在这款游戏中,侦察兵可以部署雷达以提供有关敌军行动的信息。即使没有雷达,任何被战斗人员发现的敌人将被添加到整个团队中的小组雷达。如欲接近未覆盖的区域,可派遣人员潜入未知区域侦察敌方阵地。经过乔装打扮的任何侦察兵可轻松完成这一任务。
  • 掩护火力。当某区域受到周全防御时,支持人员可以提供掩护火力,集中攻击敌人防御部队,尽可能延长与他们的交战时间,以便到达攻击目标。
  • 牺牲。当敌方攻击火力异常密集且人员牺牲不可避免,应考虑组织敢死队。负责关键任务的小组成员(如某些情况下的工兵)需要受到保护,具体方式包括优先攻击以己方工兵为打击目标的敌方人员,以及参与火线狙击,保护工兵的生命安全。

图 3. 在 Id Software* 和 Splash Damage, Ltd.* 开发的《深入敌后:雷神战争》中,小组动力包括五种不同角色的士兵。


另一个可帮助小组的分析级别是针对每位小组成员能力的自我分析。组长需要了解小组在哪些情况下能够有效作战,小组何时具备优势以及何时撤退。

例如,Blizzard 的《星际争霸 (Starcraft)》*等战略游戏包含飞行部队和地面部队。并非每个地面部队都能攻击飞行部队。每个小组都需要了解自身是否具备这一攻击能力。如果小组不具备任何可攻击飞行部队的部队,那么当飞行部队来袭时最好逃跑。即使能够攻击飞行部队的部队数量不多,只要支持部队能够为攻击飞行部队的部队提供治疗服务或支援,那么最好与飞行部队顽强对抗。

实体能力的多样性及具备实体能力的部队数量可用于衡量小组在QQ号码转让平台不同情况下的战斗力。考虑这些因素能够大幅增强战斗力。

战略人工智能

至此,我介绍了实体和实体小组可如何应对艰难的作战环境。现在,我将介绍人工智能的更大意义。战略人工智能是更高级别的人工智能,可用于指挥整个军队和制定指导战略。

战略人工智能最常用于实时战略 (RTS) 游戏,但正日益频繁地用于战术 FPS 游戏。玩家控制的指挥官可以使用自身的系统,或设置为空实体系统,即没有场地或图形,但会进行更新并具有思考能力。

指挥官将由等级规则系统和 FSM 指导,它们用于管理多种元素,如资源收集、研究技术树、构建军队等。在多数情况下,游戏元素的这种基本维护不需要太多实际思考能力。而与其他玩家进行互动则需要智能。

战略人工智能的基本要素可用于支持这类互动(或战斗)。指挥官需要了解游戏地图,以找到玩家,识别关键点(如障碍),构建防御系统,并分析其他玩家的防御策略。具体如何执行并不明确,但决策地图能够发挥重要作用。

决策地图

决策地图是二维阵列,类似于游戏地图。阵列中的每个单元对应着游戏中的一个区域,并具有关于该区域的重要信息。这些地图可用于帮助您的战略人工智能针对整个游戏制定有效决策。

资源地图

资源地图包含战略游戏中资源的位置信息。了解资源集中在地图的什么位置可影响指挥官的许多决策,例如在哪部署扩充或卫星基地(指挥官基地附近的资源),敌方可能在哪部署其扩充(他们基地附近的资源)以及可能需要争夺的阵地(中间资源)。

计算潜在的可用资源还可影响支持哪些部队以及如何部署军队。如果资源缺乏,那么指挥官在为每个部队安排任务时需要更谨慎,因为补充兵员可能较少。如果资源充裕,那么指挥官便可实施积极作战战略,动员大量兵员或组建强大的作战部队。

进攻地图

这些地图包含有关指挥官目标的信息,例如敌军基地位置、地图目标(炸毁、保护、攻击等)位置、指挥官军队的要素(主要基地、英雄部队等)。掌握这些信息可帮助指挥官合理部署军队。需要保护的据点应该被防御工事环绕,并安排小分队始终驻守在这些据点附近。找到攻击目标后便可对防御工事进行测试。必须通过分析目标周围的防御工事找到最佳的攻破策略。这是军事游戏冲突地图的基础。

冲突地图

冲突地图(见图 4)的使用和更新频率远高于前述地图。冲突地图可在整个关卡中跟踪战斗的发生场所。无论何时与敌军战斗,士兵都需要使用关键信息及时更新冲突地图:

  • 冲突类型。部队和/或建筑物
  • 部队能力。攻击地面和/或空中力量
  • 数量。遭遇的敌军数量
  • 兵力。相关区域的破坏潜力


通过分析这些信息,可确定以下情况:
 

  • 当敌人发动攻击时,人工智能将能判定部署的防御措施是否有效,防御措施是得到启用还是被忽略,以及冲突是否发生在防御目标附近。然后,人工智能可以适当改变防御工事的布局和结构。
  • 在攻击敌人(最好有侦察兵提供协助)时,快速找到敌军防御工事的弱点。如果路径有利于避免冲突或最大限度减少冲突,您便可以实施最佳的军队部署战略。
  • 对抗措施是否适当取决于敌军军事能力的组成。因为多数战略游戏试图在各部队之间保持某种平衡,所以电脑将能够确定突破不同据点防御措施所需的部队数量和类型。

图 4. 某地形上的冲突地图示例。红色越黑,遭遇的冲突越多。


构建和应用地图

我以前说过,这些地图由指挥官的部队构建。它们属于规则的一部分,旨在引导人工智能尽快派遣侦察兵探秘敌军阵地,以开始构建地图。卓越的人工智能应该定期确保这些地图处于最新状态。在游戏开始时,只有少数部队具有这些地图,因此游戏引擎更新比较容易。当游戏正在激烈进行时,大量部队同时提供信息,这可能会影响游戏的运行性能。

确保决策地图快速得到维护并不太难,通过将决策地图系统集成到其线程中便可做到。事实上,人工智能控制的每位玩家都应该具有自己的线程,以处理自己的一套决策地图。如果所有的实体都分解为多个线程,那么性能便会得到真正提升。决策地图线程只需要处理并行化实体更新消息中的请求。

总结

智能系统采用的最基本形式是基于规则的系统。该系统需充分利用人工智能特性,因为实际的智能性较低。一组预设行为用于确定游戏实体的行为。对于各种行为,总体结果可以是不明显的行为系统。

游戏世界的智能代理开始形成。您能够借助其基本能力开展侦察和行动,并增强决策和行为的有效性。您的智能代理现在能够在游戏扮演更主动的角色,而不是仅仅被动应对局势变化。您能够为玩家创建更聪明和难以对付对手,反过来,厉害的玩家能够取得出色的成绩。

本系列到此结束。下篇文章将重点介绍将多线程应用于人工智能。您甚至将获得一些实用高效的算法来运行人工智能,随着应用于更多的实体,它们将不可避免地变得日益复杂。如果希望您的系统能够满足增长的需求,您需要利用多核处理器。下篇文章将介绍通过简单改动代码,获取多线程优势。

作者简介

Donald “DJ” Kehoe:作为新泽西理工学院信息技术项目的导师,DJ 开拓了游戏开发领域的专业化之路,并教授该项目中有关游戏架构、编程和关卡设计的许多课程,以及集成 3D 显卡与游戏的课程。目前他正在攻读生物医学工程博士学位,运用游戏和虚拟现实来增强神经肌肉康复的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 目录 1 Graph 图论 3 | DAG 的深度优先搜索标记 3 | 无向图找桥 3 | 无向图连通度(割) 3 | 最大团问题 DP + DFS 3 | 欧拉路径 O(E) 3 | DIJKSTRA 数组实现 O(N^2) 3 | DIJKSTRA O(E * LOG E) 4 | BELLMANFORD 单源最短路 O(VE) 4 | SPFA(SHORTEST PATH FASTER ALGORITHM) 4 | 第 K 短路(DIJKSTRA) 5 | 第 K 短路(A*) 5 | PRIM 求 MST 6 | 次小生成树 O(V^2) 6 | 最小生成森林问题(K 颗树)O(MLOGM). 6 | 有向图最小树形图 6 | MINIMAL STEINER TREE 6 | TARJAN 强连通分量 7 | 弦图判断 7 | 弦图的 PERFECT ELIMINATION 点排列 7 | 稳定婚姻问题 O(N^2) 7 | 拓扑排序 8 | 无向图连通分支(DFS/BFS 邻接阵) 8 | 有向图强连通分支(DFS/BFS 邻接阵)O(N^2) 8 | 有向图最小点基(邻接阵)O(N^2) 9 | FLOYD 求最小环 9 | 2-SAT 问题 9 Network 网络流 11 | 二分图匹配(匈牙利算法 DFS 实现) 11 | 二分图匹配(匈牙利算法 BFS 实现) 11 | 二分图匹配(HOPCROFT-CARP 的算法) 11 | 二分图最佳匹配(KUHN MUNKRAS 算法 O(M*M*N)) 11 | 无向图最小割 O(N^3) 12 | 有上下界的最小(最大)流 12 | DINIC 最大流 O(V^2 * E) 12 | HLPP 最大流 O(V^3) 13 | 最小费用流 O(V * E * F) 13 | 最小费用流 O(V^2 * F) 14 | 最佳边割集 15 | 最佳点割集 15 | 最小边割集 15 | 最小点割集(点连通度) 16 | 最小路径覆盖 O(N^3) 16 | 最小点集覆盖 16 Structure 数据结构 17 | 求某天是星期几 17 | 左偏树 合并复杂度 O(LOG N) 17 | 树状数组 17 | 二维树状数组 17 | TRIE 树(K 叉) 17 | TRIE 树(左儿子又兄弟) 18 | 后缀数组 O(N * LOG N) 18 | 后缀数组 O(N) 18 | RMQ 离线算法 O(N*LOGN)+O(1) 19 | RMQ(RANGE MINIMUM/MAXIMUM QUERY)-ST 算法 (O(NLOGN + Q)) 19 | RMQ 离线算法 O(N*LOGN)+O(1)求解 LCA 19 | LCA 离线算法 O(E)+O(1) 20 | 带权值的并查集 20 | 快速排序 20 | 2 台机器工作调度 20 | 比较高效的大数 20 | 普通的大数运算 21 | 最长公共递增子序列 O(N^2) 22 | 0-1 分数规划 22 | 最长有序子序列(递增/递减/非递增/非递减) 22 | 最长公共子序列 23 | 最少找硬币问题(贪心策略-深搜实现) 23 | 棋盘分割 23 | 汉诺塔 23 | STL 的 PRIORITY_QUEUE 24 | 堆栈 24 | 区间最大频率 24 | 取第 K 个元素 25 | 归并排序求逆序数 25 | 逆序数推排列数 25 | 二分查找 25 | 二分查找(大于等于 V 的第一个值) 25 | 所有数位相加 25 Number 数论 26 1 |递推求欧拉函数 PHI(I) 26 |单独求欧拉函数 PHI(X) 26 | GCD 最大公约数 26 | 快速 GCD 26 | 扩展 GCD 26 | 模线性方程 A * X = B (% N) 26 | 模线性方程组 26 | 筛素数 [1..N] 26 | 高效求小范围素数 [1..N] 26 | 随机素数测试(伪素数原理) 26 | 组合数学相关 26 | POLYA 计数 27 | 组合数 C(N, R) 27 | 最大 1 矩阵 27 | 约瑟夫环问题(数学方法) 27 | 约瑟夫环问题(数组模拟) 27 | 取石子游戏 1 27 | 集合划分问题 27 | 大数平方根(字符串数组表示) 28 | 大数取模的二进制方法 28 | 线性方程组 A[][]X[]=B[] 28 | 追赶法解周期性方程 28 | 阶乘最后非零位,复杂度 O(NLOGN) 29 递归方法求解排列组合问题 30 | 类循环排列 30 | 全排列 30 | 不重复排列 30 | 全组合 31 | 不重复组合 31 | 应用 31 模式串匹配问题总结 32 | 字符串 HASH 32 | KMP 匹配算法 O(M+N) 32 | KARP-RABIN 字符串匹配 32 | 基于 KARP-RABIN 的字符块匹配 32 | 函数名: STRSTR 32 | BM 算法的改进的算法 SUNDAY ALGORITHM 32 | 最短公共祖先(两个长字符串) 33 | 最短公共祖先(多个短字符串) 33 Geometry 计算几何 34 | GRAHAM 求凸包 O(N * LOGN) 34 | 判断线段相交 34 | 求多边形重心 34 | 三角形几个重要的点 34 | 平面最近点对 O(N * LOGN) 34 | LIUCTIC 的计算几何库 35 | 求平面上两点之间的距离 35 | (P1-P0)*(P2-P0)的叉积 35 | 确定两条线段是否相交 35 | 判断点 P 是否在线段 L 上 35 | 判断两个点是否相等 35 | 线段相交判断函数 35 | 判断点 Q 是否在多边形内 35 | 计算多边形的面积 35 | 解二次方程 AX^2+BX+C=0 36 | 计算直线的一般式 AX+BY+C=0 36 | 点到直线距离 36 | 直线与圆的交点,已知直线与圆相交 36 | 点是否在射线的正向 36 | 射线与圆的第一个交点 36 | 求点 P1 关于直线 LN 的对称点 P2 36 | 两直线夹角(弧度) 36 ACM/ICPC 竞赛之 STL 37 ACM/ICPC 竞赛之 STL 简介 37 ACM/ICPC 竞赛之 STL--PAIR 37 ACM/ICPC 竞赛之 STL--VECTOR 37 ACM/ICPC 竞赛之 STL--ITERATOR 简介 38 ACM/ICPC 竞赛之 STL--STRING 38 ACM/ICPC 竞赛之 STL--STACK/QUEUE 38 ACM/ICPC 竞赛之 STL--MAP 40 ACM/ICPC 竞赛之 STL--ALGORITHM 40 STL IN ACM 41 头文件 42 线段树 43 求矩形并的面积(线段树+离散化+扫描线) 43 求矩形并的周长(线段树+离散化+扫描线) 44
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值