思维导图

文字版:

5 结构化架构:游戏AI开发的常用技巧

本章目的

  • 让读者对游戏AI的全局框架有充分的了解,并针对开发问题提供思路和解决方案

  • 不会说深入具体方法和技术细节,这些内容可以参考文后文献资料

定义

  • AI架构

    • 实现AI评估形式并做出决策的底层代码(通常使用C++实现)

  • 配置

    • 从具体感知数据(即具体输入)映射到具体决策结果或动作(即具体输出)的一份行为规约。例如FPS中AI角色是否应该攻击,逃跑,为武器装填弹药等

    • 注:AI配置可以理解为,AI感知,AI决策和AI行为三者的统称。

  • 角色

    • 把AI实际控制的事物成为角色(character)

    • 决策体

      • 决策体也叫推理器(reasoner)

        • 一名角色会有多个决策体(decision-maker),例如选择使用哪件武器的算法,确定射击目标的算法,表达感情的算法等等。

        • 注:一个决策体可以理解为单一的“决策算法”

      • 推理器的输出结果成为选项(option)

        • 推理器选定(select)选项

        • 推理器取消(deselect)选项

        • 注:选项可以理解为可执行的行为或行为序列。

常用AI架构

  • 脚本(scripting)

  • 有限状态机(Finite-State Machine, FSM)

    • 一组状态和状态迁移的集合

    • 状态表示推理器可以选定的选项,而状态迁移是从一个状态变化至另一个状态的条件。

  • 基于规则的AI(rule-based AI)

    • 包含一组有序的为此断言-选项对。

    • 注:似乎就是if-else?

  • 基于效用的AI(utility-based AI)

    • 使用启发函数(heuristic function),为每个选项指定一个浮点值(即权重、优先级或效用值),然后基于这些数值选定要执行的选项。

    • 选用效用值最高,或为每个选项指定权重值再加权随机等

  • 面向目标的行动规划(GOAP)或层次化任务网络(HTN)

    • 为AI的目标状态创建一组允许它们达成目标的选项序列。

  • 行为树(behavior tree)

    • 很特殊:可以嵌入其他架构的架构。

    • P71 待看:可以将几乎任意的架构应用在选择器上,使行为树本身更接近一种框架(或者元架构)而非特定的架构。

      • 注:看参考资料,并思考解决”行为树元架构,兼容其他框架的解决方案“

AI架构常用技术

  • 层次结构

    • AI配置复杂度高

      • AI配置随配置空间大小而增加,即AI要处理的情况越多,考虑因素就越多,需要囊括的选项也越多,复杂度越高。

      • 添加新选项时,需要考虑和已有选项的影响

    • 常见AI架构复杂度

      • n是选项数量

      • FSM:O(n^2)

      • 基于效用的AI

        • 对已有的启发函数进行必要的平衡性调整

        • 注:应该是O(n)

      • 基于规则的AI

        • 将新定义的规则插入到已有序列中合适的位置。但数量过多时这个架构也难以驾驭

    • 定义

      • 对决策过程进行层次划分

    • 优势

      • 大大降低AI配置复杂度:新增选项时,需要考虑的关联选项被限制在了每个推理器的局部范围。

        • 例如FSM,25个选项,复杂度是25^2=625。如果有5个推理器,各有5个选项,那么配置AI的复杂度仅仅是5*5^2=125。

    • 应用

      • 层次化FSM

      • HTN规划器

      • GOAP

      • 命令层级

      • 行为树

  • 选项堆栈

    • 机制

      • 惯性(inertia)

        • 让AI始终执行一件任务,直到有更好的理由去做别的事情

      • 冷却

        • AI有意识地做出停止当前动作的决策后,应该无视被取消选项的惯性,而且还需要防止AI在短时间内返回之前选项的机制

      • 选项堆栈

        • AI需要对当前的需求或机会做出及时的反应,完成后回到之前的选项继续执行。

        • 也叫状态堆栈 state stack

    • 目的

      • 选项堆栈不是要防止AI改变自己的想法,而是保存先前的状态,使AI再做决策时能够得到更合理的结果

  • 知识管理

    • 两类知识

      • 认知所处环境所需的知识

      • 评估形式并做出决策所需的知识

    • 黑板

      • 定义

        • 游戏中,黑板通常指不同AI组件用来保存其他组件使用或者自己多次使用的知识信息的一块共享内存空间

      • 角色黑板

        • 保存角色特有信息,只有角色AI可以访问

      • 全局黑板

        • 存储通用信息,对所有角色开放

      • 用途

        • 协调不同AI或同一角色的不同AI组件工作

    • 场景智能

      • 不能把所有知识都塞给角色AI

      • 场景本身可以包含只能逻辑

  • 模块化

    • 角色组件系统

      • 移动组件

      • 动画组件

      • AI组件

      • 武器组件

    • 模块化

      • 可重用/可插拔:组件代码复用,项目内或项目间

      • 提高开发效率。选择合适的模块,快速实现角色原型

      • 模块化,或复用的本质:把我们从细节和琐碎中解放,得以从宏观概念上思考并解决更大(例如整个AI系统和AI模块)的问题。

总结

  • 层次结构

    • 将AI的决策过程划分为规模合理的多个子部分,进而极大简化AI配置的创建

  • 选项堆栈

    • 允许AI对临时情况作出及时响应,并随后继续执行原有目标

  • 知识

    • 黑板共享

    • 场景智能

  • 模块化

    • 代码复用

    • 从宏观层面构思AI的行为配置,而不局限于代码细节

XMind - Trial Version

《游戏人工智能》学习笔记2——5 结构化架构:游戏AI开发的常用技巧相关推荐

  1. java2d游戏代码_JAVA游戏编程学习笔记(三)Java 2D游戏底层绘图框架

    前二篇记录了java如何绘制图形与动画,今天打算总结复习一下,把这些知识点集合起来,制作一个Java2D小游戏框架(暂且这么叫,好像挺牛逼似的!). Java AWT 下边提供一个 class Can ...

  2. 3D游戏编程学习笔记(五):与游戏世界交互

    一.前言 本次3D游戏编程我们将设计一个简单打飞碟(Hit UFO)有游戏. 二.游戏基本内容及规定 游戏基本内容 游戏有 n 个 round,每个 round 都包括10 次 trial: 每个 t ...

  3. 知识图谱学习笔记-非结构化数据处理

    非结构话数据到知识图谱 非结构数据-> 信息抽取(命名实体识别.关系抽取)-> 图谱构建(实体消歧.链接预测)-> 图分析算法 一.文本分析关键技术 拼写纠错 分词 词干提取 词的过 ...

  4. 阿里涉江:你真的会学习吗?从结构化思维说起

    阿里妹导读:学习是我们从呱呱坠地开始就在进行的事,从简单的模仿,到系统的训练,学习对我们而言似乎已经习以为常.然而,我们真的学会学习了吗?学习的终极目标是什么?技术性学习思维又有什么不同?本文从结构化 ...

  5. 大数据深度学习下的车辆结构化——明景车辆结构化分析

    大数据深度学习下的车辆结构化--明景车辆结构化分析 车辆全特征结构化识别技术是计算机人工智能.图像处理.计算机视觉.模式识别等相关技术的综合应用.目前涉车涉驾案件的快速增长,以及车辆结构化.智慧城市应 ...

  6. 你真的会学习吗?从结构化思维说起

    作者 | 涉江 来源|阿里巴巴云原生公众号 导读:学习是我们从呱呱坠地开始就在进行的事,从简单的模仿,到系统的训练,学习对我们而言似乎已经习以为常.然而,我们真的学会学习了吗?学习的终极目标是什么?技 ...

  7. 花书+吴恩达深度学习(二三)结构化概率模型(贝叶斯网络、马尔可夫随机场)

    文章目录 0. 前言 1. 有向模型 2. 无向模型 3. 因子图 4. 分离和d-分离 5. 从图模型中采样 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深 ...

  8. RPG游戏Demo学习笔记一

    导航 RPG游戏Demo学习笔记一 UE笔记 -- 一个简单的AI_weixin_52918492的博客-CSDN博客 目录 一.准备资源 二.基础功能 生命值与能量值 创建Widget Bluepr ...

  9. Verilog学习笔记-——Verilog模块例化

    Verilog学习笔记---Verilog模块例化 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化.模块例化建立了描述的层次.信号端口可以通过位置或名称关联,端口连接也必须遵循一些规则 ...

最新文章

  1. Html报表用Excel打开保持表格线【Html报表模板】
  2. Java黑皮书课后题第5章:**5.45(统计:计算平均值和标准方差)在商务应用中……编写一个程序,提示用户输入10个数字,然后运用下面的公式,显示这些数字的平均值以及标准方差
  3. Leetcode周赛复盘——第 276 场力扣周赛
  4. Java面试常问计算机网络问题
  5. idea中如何将一个普通项目转换为maven项目
  6. python打开浏览器并最大化_我需要Selenium以更大的分辨率打开它的Web浏览器(最好是最大化)...
  7. C#开发笔记之20-如何用C#深克隆一个对象(优雅方案)?
  8. RHEL 8 - 记录用户会话操作
  9. 如何向github上传文件
  10. LeetCode() Reorder List
  11. 回顾 | Apache Flink Meetup ·上海站(附PPT下载链接)
  12. C#调用谷歌翻译API
  13. java微信订阅号(公众号)开发案例
  14. 将路由器当成交换机使用
  15. 大连发展中韩跨境电子商务势在必行
  16. ZIP压缩算法详细分析及解压实例解释
  17. 苹果id登录_英雄联盟手游是用苹果ID好还是拳头好 账号选择建议
  18. 2.zookeeper客户端使用与集群特性
  19. Windows下自动连接WiFi 脚本
  20. latex并排显示多个图片

热门文章

  1. 从计算机应用基础中学到了什么,计算机应用基础教学心得体会.docx
  2. (VS2010)C语言浅尝冒泡排序
  3. 抓包工具Fiddler简单教程
  4. 从源码角度分析RabbitMQ重启后,消费者停止消费怎么解决
  5. 计算机网络和配置管理
  6. 人工智能发展弊端的解决方案_目前人工智能存在的问题
  7. 安装ANSYS2021R1出现错误Failover feature“ANSYS mechanical enterprise“is not
  8. Java中Lambda表达式使用前提及省略规则
  9. 嵌入式Linux开发24——Linux 按键输入实验
  10. 谷歌开源首个通用全同态加密转译器