欢迎您访问广东某某机械环保科有限公司网站,公司主营某某机械、某某设备、某某模具等产品!
全国咨询热线: 400-123-4567

新闻资讯

哈希游戏| 哈希游戏平台| 哈希游戏官方网站

haxiyouxi-haxiyouxipingtai-haxiyouxiguanfangwangzhan

哈希游戏- 哈希游戏平台- 官方网站分享]HaloHalo2的人工智能设计讲座

作者:小编2025-01-21 20:20:14

  哈希游戏- 哈希游戏平台- 哈希游戏官方网站

哈希游戏- 哈希游戏平台- 哈希游戏官方网站分享]HaloHalo2游戏的人工智能设计讲座

  说明: 游戏的AI是一个听上去很高深但又是每一个玩家都有着直接明了的体会的东西。在目睹了游戏里面的AI人物做出种种神奇的举动之后,你会禁不住想要了解到底 这些看上去很有智慧的行为是怎么实现的。要以普通玩家的身份分析游戏的AI结构实在是太难了,好在网络上流传着一些这方面的相对浅显易懂的资料。游戏开 发者会议是游戏理论方面权威的机构,在最近的GDC会议上,有两个游戏先后有机会在大会上作了关于它们的AI系统的演讲,一个是Halo系列,另一个就是 Killzone。

  为了达成AI的复杂性,我们在这些方面付出了代价: •一致性:如果把行为理解成动作长时间的累积,我们就必须要保证我们的AI总是在合适的时机开始,终止,或者改变动作。我们必须不惜一切代价防止“行为抖 动”(AI在数个动作之间快速的来回交替重复)。 •透明度:AI的行为必须可以被一个未经训练的观察者(通常水平的玩家)理解,可以合理的揣测AI的内在状态,可以解释和预测AI的动作。 •运行:所有限制中最明显的一个,AI必须与每秒30次或者更高的速度运行。 •智力限制:当我们无法理解系统的行为的时候,我们也就失去了对这个系统的控制。

  当行为树的规模越来越大,我们很容易想象,要决定行为的相关程度会成为占用运行时间的主要因素。毕竟,我们通常是在检查大量并不在实际运行的行为和刺 激。有趣的时,我们发现很多基本的相关条件在很多候选者中都是相同的。比如,在Halo2中,驾驶状态(AI人物是车辆的驾驶员,还是乘员,还是徒步)和机 警状态(AI人物是看到了目标,仅仅意识到了目标的存在,还是根本没有感觉的任何目标)在决定相关性的时候基本上都会被检测。 行为标签的想法,就是把这些共同的条件从相关性方程中移除,编码成行为的一个标签,在决策的时候直接检查。在Halo2中,这些条件被编码为一个比特向 量,被用来和代表AI目前真实状态的比特向量直接比较。那些满足了特定条件的行为和刺激再进行完整的相关性检测。其它的责备完全忽略。 这种方法可以被看成是简单得为了提高相关性检测的速度,不过还有另一种有趣的解读方式。我们可以把这些条件看成对于行为树的大范围的上锁和解锁,从而 可以从根本上修改行为树的结构。比如,对于一个车辆的乘员而言,被解锁的行为树范围实际很小,控制逃脱,自卫和搜寻的部分都不可以使用。而一个车辆的 驾驶员就可以部分的接触到这些行为,但依然不如一个步兵AI所能做的多。如果我们仔细的考察遇敌这个行为,我们还会发现其他的东西,驾驶员的战斗行为和 一个步兵的战斗行为是不同的,步兵单位使用战斗_行为(倾向于选择一个地点据守),而驾驶员则使用车辆_战斗_行为(这个行为保持AI单位不停的移动)。 类似的,对于步兵和驾驶员而言,搜寻的过程也是很不相同的,主要是对于后者而言,有很多的团队行为可以去实现团队搜寻。

  我们可以通过对关联性作二元判断来大大简化这个问题。通过这种手段,我们可以定义数量相对较少的标准决策计划, •优先次序列表:根据子行为的优先次序依次检查,有最高优先次序而且可以被运行的那个子行为将被选中。其它有着更高优先次序的子行为在合适的情况下可 以打断当前被选中的子行为取得优先权。 •顺序列表:依次运行每一个子行为,跳过那些当前不相关的,而且也永不重新访问。当遇到列表结尾的时候,父行为就结束了。 •顺序循环:和上面的方式基本一样,但当我们走到列表结尾的时候,跳转到表头重新开始。 •随机性的:在相关的子行为中随机选择。 •唯一性的:选择随机或者优先次序的方式,但永不重复同样的选择。

  •可用性:AI必须可以支持游戏的设定,这是对于游戏的关卡设计者而言。 •多样性:根据角色的不同,不同的AI有不同的行为方式。我们必须设计出这样的系统,在提供坚实的常识行为的同时也表现出角色和角色之间的不同特点。 •可变性:AI应该可以根据情况的变化作出不同的行为,尤其是在那些游戏设计者特别导演的和剧情相关的部分(比如AI在一段剧情里是你的盟友,下一段剧情 里变成了敌人)。 •运行:这个因素可以对复杂性有正面或者负面的影响。Halo2中很多的结构复杂性的来源是因为我们试图避免许多不需要的工作。 这篇文章将会讨论Bungie在Halo2 AI设计中为了解决复杂性难题所采用的技术。文章的第一部分是关于内部构架,尤其是关于内存和决策方式。第二部分将会展 示一些有用的关卡设计工具,我们用这些工具来控制AI,并为关卡编写脚本。 核心战斗循环 开头的时候很简单,最初的工作看上去就和下图所示一样。这张图就是游戏设计者用来描述玩家和AI接触方式的示意图。显然,这里的每一个状态都描述了AI和 玩家不同的互动方式,最好每种状态都有它们自己的动作模式。我们如何才能把这张图表应用起来呢?

  假设我们在使用子行为竞争决策模式,我们应该怎么选择胜出者呢?每一个子行为提供一个浮点数来表达自己的相关性,相关性最高的胜出,前次的胜者可以在 这个数值上得到奖励,从而避免前面提到的“行为抖动”现象的出现。但这样还是会不可避免地遇到扩展性的问题,当这些竞争的子行为数目超过一定程度之后, 尤其是当一系列特定的优先权被指定的时候。比如“和目标交战,除非目标是在车辆里面的,在这样的情况下,先进入该车辆。”当选择只有两种三种的时候,去 调解那些浮点数来给出一定的规则和优先权是可行的,但当子行为多达20种的时候这就基本不可能了。

  刺激还在另一种方式上为我们服务。考虑一个永远不会返回正关联的刺激:这个刺激永远不能给我们提供一个可供运行的行为。另一方面,这是一个随意的,不 重要代码段,可以在行为树的任何地点自主运行。这样的代码可以用来做什么呢?任何事情。也许我们可以做一个数据巡检,来记录我们曾经到达过优先级列表 的这个位置的事实。或者我们可以用它来在主机做一些调试功能。或者可以用来让游戏人物在特定的情况下发出某种声音。事实上,代码并不需要一定是行为中 明确的一部分也一样可以有用。也许这可以被认为是某种程度的Hack行为,因为我们特意的绕过了行为执行这一步,但这是刺激的设计目的之一:为了让我们 方便的在行为树的特定位置放置任意的代码段。

  数量,当然也就是复杂性,尤其是当你考虑到游戏本身带来的限制的时候。AI仅仅是能做很多事情是不够的,同样重要的还有,AI要把这些事情做对,在正确的 时间去做,AI的行为方式不能打破玩家对日常生活的印象,不能破坏玩家对于AI行为目的和动机的揣测。在Halo 2中,如果玩家能感觉他们是在何一个活着的生 物作战,并且可以相应的回应和预测这些生物的行动的话,这样的AI就是最好的。作为行为的主导者,我们的一个主要目标就是要去协助玩家所经历的游戏叙事 过程:“噢,这个grunt刚刚大叫着逃跑了,是因为我拔出了能量剑把它吓到了,但当我把它逼到绝路的时候,它又转过身来开始战斗了。”

  当谈论游戏AI的时候,多通常来说就是更好,AI的行为库组织的越好,AI就能识别更多的独特的触发事件,AI所能做出的反应的独特方式也就更多,我们也就越 倾向于把这个AI当成常识里的“生物”。一个符合“常识”理解的AI是人工智能研究团体长期努力的目标。对很多人来说,常识的问题都和如何获取和表达信息紧密 相连。毕竟,这些常识通常都被认为是大量的理所应当的,日常的知识,它们非常的明显,比如走路,观看,思考这些人类从来都不需要去特别学习就能表现出 来的行为。这样一来,这些常识就很容易被人们忽略。

  然而,这也带来了一个新的问题:如果优先权顺序不是确定怎么办?换句话说,在某些情况下行为A的优先权高于B(战斗,而不是进入临近的车辆),但在其它的 情况下B的优先权又要高于A(除非玩家就在车辆里面,这时候优先进入车辆)。为了解决这个问题,我们使用了“行为刺激”。刺激是一个自由触发事件,它像完整 的行为一样提供二元相关性,但它自身仅仅是一个完整行为的参照。当刺激在子行为竞争中获胜的时候,要么目前正在运行的行为堆栈被重新定向到这个刺激所 指向的行为,要么这么被指向的行为就在刺激所处的位置开始运行。在上面给出的例子中,我们对后一种方式更加感兴趣。我的优先级列表就变成了:

  就像上面提到的一样,刺激也可以被用来把目前的行为堆栈重定向到(行为树)的另一个部分。比如,可能存在自卫的刺激(由于被伤害,遇到了可怕的敌人, 等等),它是遇敌行为的一个子行为,这样的话,这个刺激就只在AI遇敌的时候才会被考虑。当这样的刺激被选择的时候,我们不会去运行遇敌下面所属的那个 自卫,而是在行为树中创建一个新的层,在这个自然的地方去运行自卫刺激。也就是说,刺激可以在一定的情况下被当作指针使用,指向行为树的其他分支,引 起分支之间的跳跃。

  游戏AI的设计者总是希望在他们所建造的虚拟大脑里塞入更多的复杂性。然而复杂性是需要付出代价的,甚至是许多代价:运行起来不够快,很差的可扩展性, 缺乏可操纵性,以及最可怕的,在玩家的眼里这样的AI可能是一片朦胧,AI的行为是随机的而不是有计划的。我们将讨论一下复杂性的来源,一些能让复杂的AI 变得清晰的方法,以及我们再Halo2的工作中减轻这些负面效果所采用的构架手段。讨论将集中在可扩展的决策方法上,同时也会涉及到存储,知识模型,脚本 的控制表现,以及关卡设计对AI的影响。