历史发展
- 第一阶段AI概念的发展同步于早年一战和二战带来的电报密码分析需求所带来的计算机开发需求。总的来说是为了解决计算相关的智能需求
- 第二阶段属于符号匹配(symbolic matching)带来的AI,类似于基本的NLP自动语言生成技术,主要依赖于符号/知识集(Knowledge set,类似字典),依靠定义的规则/关系(relation,类似语法),通过数学和逻辑进行搜索和查找(search),最后生成结果。
- 第三阶段属于生物模仿阶段,即模拟人脑或自然界中的现象来发展AI。主要例子有人脑带来的神经网络,深度学习,物种发展带来的各类进化算法等。值得注意的是这些概念很早就被提及,只是因为算力的发展而重新进入人们的视野。
游戏AI的重要原则-只有最合适的,没有最好的。
- 数学概念上,No Free Lunch Theorem(没有免费午餐定理)假设,若两算法的在不同问题上的平均效果一致,则两算法的价值是相等的。定理最终推导出的结果是当无限制条件,也无确定所针对的问题范围时,所有算法效果一致(均等于最简方法,即乱猜)。
- 过强的AI会让玩家导致挫折,也可能导致开发困难,软硬件设施跟不上等问题
- 过于简单的AI会让玩家有脱离/不真实感
- AI的效果应该与游戏设计相结合讨论,不能单独提出。更多时候我们先基于游戏设计目的,需求AI要做的事,再想办法解决问题。
游戏AI的模型
- 知觉或传感器(Perception),用于接受游戏世界的信息
- 执行阶段(Execution),占用CPU时间,依赖已有信息(人物内部或源于游戏世界)作出决策
- 一个群体AI可能拥有整体的策略(Strategy),例如战法牧组队击杀玩家会各司其职,乃至让一个个体做出牺牲进而让全局胜利
- 个体AI决定自己的行动(Decision Making),再进行操作(Movement)。注意决定行动这一概念更加模糊,例如"接近玩家"。而进行操作(Movement)则更加具体,例如在战棋游戏中依次走哪些格子来接近玩家。
- 渲染阶段,将执行阶段的行动转化为真正的动画和物理效果
- 开发管线,包括世界与AI的交互方式,代码书写,资源管理与开发等
游戏AI的设计
- 为每个个体设置AI,让他们自由的与世界交互(例如荒野大嫖客2,玩家观感是AI彼此独立再产生了小镇)
- 为世界设置AI,再逐步生成,拉低到个体(例如育碧的路人,GTA的车)
游戏AI的算法设计
- 人工操作/怪方法/细节(Hack)。计算机科学中的hack指的一般是用天马行空/偏门/无法在其他地方重新利用的方法实现目的。这种方法往往非常有效但是收到各种因素的极大局限。一些小小的hack就能让游戏效果很好,但是可能需要在每一个AI单独设计一些hack。例子包括:人手设定角色在10s站立不动后不是发呆而是擦枪/播动画。
- 启发性算法(heuristic),不要求所有问题的最优化,而是大部分问题的大幅度优化。以下有三个常见例子
- 最受限制的事情(Most Constrained),例如在TRPG中4v1,敌方boss只有我方法师能破防,那么法师在大部分情况下只应该输出(输出这一任务只能由法师完成)
- 最难的事(Most Difficult),最灵活的操作可以过段时间再做,只能在有限情况下做的事应该先做。例如酒馆战旗升本,卡牌游戏拍高费怪,经营类游戏购买最高花费的建筑
- 做最稳妥的事(Most Promising),即做风险较低的事情,lol能直接推一座高地就不要打大龙推两座以免被抢,7成概率能撑到下回合必赢就不需要这回合做胜率55开的事情。
开发游戏AI所需要注意的问题
- 玩家至上,游戏AI主要服务于玩家。好的AI指行为有迹可循且自然的AI,不是混乱的真实世界人物。
- 关注变化(Change),游戏AI的变化在心理学上是最为影响玩家体验的,无论是惊喜/惊吓,还是在本该有变化的地方没有变化。
- 硬件设施环境,算力是多少,用户的硬件是否统一,是否支持多核/线程等
- 算法,多且复杂的独立分支是否影响了并行操作问题(普遍来讲复杂的逻辑导致无法复制在gpu上,往往使用cpu运行),时空复杂度是否过高
- 耦合度问题,是否过于依赖周围的游戏环境,例如需要时刻观察周围10m/其他角色的变化,是否过度依赖其他模组
- 开发速度和维护性。常见问题比如OOP所带来的虚表搜索时间与继承多态开发便利性的权衡
- 各类缓存和时空重(chong)用度。
posted @
2022-03-31 06:04
一支随缘箭
阅读(
101)
评论()
编辑
收藏
举报