在游戏开发AI系统



从今天开始,我为大家讲解开发AI系统,在游戏开发,特别是大型三维网络游戏中,人工智能的开发占有重要的比例。一个游戏的好玩程度跟人工智能部分的开发有很大关系。我们首先学习 一些关于游戏AI方面的基础知识,让大家有个大体的了解,然后我们会结合Unity,做出一些简单的示例来让大家学习如何在unity中制作AI系统。 本节内容可能有些枯燥,这是在网上搜集的关于 AI方面的一些理论知识。大家可以慢慢研究,然后大家可以在网上多找一些资料来学习。

— AI的描述

使得游戏表现出与人的智能行为/ 活动相类似,或者与玩家的思维/感知相符合的特性

— AI的实现

— 技术实现

— 利用充分的领域知识和常识

— 客观世界的运动规律(game physics)

— 利用已有的AI技术

— 融合娱乐性

— 游戏中涉及的AI技术

— 专家系统

— 用知识表示专家的经验,并在此基础上作自动推理

— 案例式推理

— 将输入与数据库中已有的案例进行比较,选取最为相近的案例,其已有的解决方法即为输出

— 有限状态机

— 基于规则的系统,有限个状态连接成一有向图,每一条边称为一个转移

游戏中涉及的AI技术1

— 产生式系统

— 包含多个产生式,每一条产生式由条件和动作两部分组成,当产生式的条件满足时,系统就执行相应的动作

— 决策树

— 给定输入,从树的根部开始,将输入与当前结点相比较,选择当前结点的某一个子结点作为下一次比较的对象。当到达树的叶子时,则给出相应的决策

— 搜索方法

— 找到一列动作(或状态转移),使得最终的结果满足某一特定目标

— 游戏中涉及的AI技术2

— 规划系统

— 给定世界的初始状态,以及下一步可能采取的动作的精确定义,找到完成某个特定目标的最优路径

— 一阶谓词逻辑

— 谓词逻辑通过定义“物体”、“属性”、“关系”等对当前场景的状态进行推理

— 情景演算

— 用一阶逻辑计算在给定情景下AI生命的反应

游戏中涉及的AI技术3

— 多Agent

— 研究在多个相互竞争相互合作的智能体之间所产生的交互智能行为

— 人工生命

— 多agent系统一种,试图将生命系统中一些普遍规律应用到虚拟世界的人工智能体上

— 群组行为(Flocking)

— 人工生命的一类,研究协同移动技术,例如人工智能体如何在大量的羊群中移动

— 游戏中涉及的AI技术4

— Robotics

— 让机器在自然环境下交互的工作

— 遗传算法

— 直接模拟生物进化过程,通过随机选择、杂交和突变等对程序、算法或者一系列参数进行操作

— 神经网络

— 模拟动物神经系统功能的机器学习方法

— 通过反复调节系统内部中各个神经元之间的连接参数,使得训练得到的系统在大多数情况下作出优或者近似优的反应

— 游戏中涉及的AI技术5

— 模糊逻辑

— 与传统二值(对-错)逻辑不同,模糊逻辑用实数表示物体隶属于某一类的可能性

— 置信网络

— 提供建立不同现象之间内在因果关系的工具,并利用概率理论处理未知的和不完全的知识

— 对当前状态作出判断,并决定下一步可能的动作以及其带来的后果

— GAME AI技术的分类

— 确定型

— 基于领域固定领域知识,模拟简单的固定行为

— 行为型

— 基于行为模式来模拟智能行为

— 战术型

— 策略模拟

— RTS(realtime strategy)

— 其他

特定状态的查找

— 结点 - 包含查找目标

— 终点 - 搜索路径的结束

— 查找空间 - 所有结点的集合

— 目标 - 所要到达的结点

— 经验 - 在一定程度上提示下一步搜索的方向

— 解答路径 - 从起始结点开始,到目标的一条有向路径

启发式搜索

— 定义目标函数,反映拥有的先验知识

 ◦ 估计离目标的距离

 ◦ 估计到达目标的花费

— 用上述估计指导路径的搜索,加快搜索过程

贪婪搜索法

— 永远沿着具有最小目标函数值的路径进行搜索

— 不一定能够找到目标

— 可能得到局部最优解,而不是全局最优

 A*启发搜索

— 考虑到贪婪搜索法不能保证找到最优解

— 改进 - 目标函数由两个部分组成

 ◦ 从当前状态到目标状态的“花费”(估计)

 从初始状态到当前状态的“花费

 A*算法

— 优先队列PQ - 初始为空

— V(一系列三元组(状态,f,回溯指针)集合,表示访问过的结点)- 初始为空

— 将初始结点S置于PQ中,V中放入(S, f(s),NULL)

— 算法:

◦ 如果V为空,退出程序,没有解

 ◦ 否则,从PQ中取出第一项,记为n

 ◦ 如果n就是目标结点,则搜索结束

 ◦ 否则,产生n的后继结点

—  对n的每一个后继结点n’

 ◦ 计算f’=g(n’)+h(n’)=g(n)+cost(n,n’)+h(n’)

 ◦ 如果n’未被访问过,或者n’曾经被访问过,但是记录的f(n’)>f’,或者n’已经在PQ队列中,但是记录的f(n’)>f’

— 放置/更新n’于优先队列中,使其对应的目标函数值为f’

— 添加(n’, f’, n)至V当中

 ◦ 否则忽略n’

 A*算法性质

— 令h*(n)=从目标到n最小花费真实值.

— 经验h称为可行的当且仅当对所有的状态n, h(n) <=h*(n).

— 可行经验确保永不过估计结点到目标的花费

— 具有可行经验的A*算法一定收敛到最优解

— 比较费内存

— 当不存在解时,算法失败

 ◦ 避免对全空间进行搜索

 ◦ 作双向搜索

 群体行为的模拟

— 物群的行为

◦ 物群聚集在一起飞行,遇到另一物群时,他们将避开和分散,必要时分成多群

◦ 分开后,将寻找伙伴,形成新的物群,并最终恢复原来的物群

◦ 物群能够对付突发行为,能否对不断变化的环境做出实时的反应,并作为一个整体行动

— 物群模拟的简单规则

◦ 分离(separation):同物群中的其他成员若即若离。

◦ 列队(alignment):与物群中的其他成员保持相同的航向

◦ 内聚(cohesion):不掉队

◦ 避开(avoidance):避开障碍物和天敌

◦ 生存(survival):必要时进行捕食或者逃脱被吃

◦ ……..

— 游戏中的物群行为

◦ RTS游戏的部队的编队模拟

◦ RPG游戏中的群体行为模拟

— 行为模拟的实现

◦ 无状态

◦ 不纪录任何信息

◦ 每次将重新评估其环境

— 示例

◦ 前进方向不确定,但整体行动

◦ 避开障碍物

◦ 飞行动物

— 老鹰:飞行速度快,视野广,吃麻雀

— 麻雀:飞行速度一般,视野一般,吃昆虫

— 昆虫:飞行速度慢,视野小,不捕食,能繁殖

◦ 物群的喂养

— 饿→吃→试图接近猎物

— 昆虫不能灭绝

模糊逻辑

— 传统逻辑把思维过程绝对化,从而达到精确、严格的目的

— 举例:一个被讨论的对象X,要么属于某一个集合A,要么不属于该集合,两者比居其一,而且两者仅居其一,决不模棱两可

— 对于命题:张三的性格稳重,如何判断这一命题的真假?

— 对于上述的例子,模糊逻辑允许我们用一个[0,1]的实数表示X属于A的隶属程度。传统逻辑即隶属程度只能从0和1之间选择的情况

— 对于“性格稳重”这个模糊概念,我们能够用“一点而也不稳重”、“不太稳重”、“不好说”、“有点稳重”、“挺稳重”、“很稳重”等没有明确界限的词语形容

— 将重心转移至物体属于某个集合的隶属程度上

— 在AI领域的主要应用为

— 决策

— 行为选择

— 输入、输出过滤

符合逻辑操作

— 设A,B,C均为U中的模糊集

◦ 模糊并

– 若对8x2U,均有mc=max(mA(x),mB(x)),则称C为A与B的模糊并

◦ 模糊交

– 若对8x2U,均有mc=min(mA(x),mB(x)),则称C为A与B的模糊交

模糊控制

— 举例:车辆驾驶

— 前提:两辆车之间不能相撞

— 在模糊逻辑中的实现:

◦ 用两个变量描述每一辆车

– 当前时刻,车与前面一辆车之间的距离d

– 当前时刻与前一时刻距离的差dd

— If dd=0且d=两个车位长,保持现有速度

— If dd<0且d<两个车位长,减慢速度

— If dd>0且d>两个车位长,加快速度

神经网络

— 简化的人脑模型

◦ 人脑大概有1012个神经元

◦ 每一个神经元都能够处理和发送信息

— 神经元的三个主要组成部分:

◦ 细胞体,神经元新陈代谢的中心

◦ 树突,接收来自其他神经元的信号

◦ 轴突,向其他神经元发送信号

— 生物学发现

◦ 神经元是人脑的基本组成部分

◦ 如果将神经元看作结点,它们之间的连接看作弧,则这些神经元组成一个稠密连接的图

— 虽然单个神经元的工作过程较简单,当大量神经元连成一个网络并动态运行时,系统是非常复杂的

— McCulloch and Pitts与1943年第一次提出人工神经网络概念

— 一个处理单元将接收的信息x0,x1,L,xn-1通过用W0,W1,L,Wn-1表示互联强度,以点积的形式合成自己的输入,并将输入与以某种方式设定的阈值q相比较,再经某种形式的作用函数f的转换,得到该单元的输出y

— f可以是阶梯函数、线性或者是指数形式的函数

— 神经网络是基于人脑的平行体系结构

— 与多处理器计算机相类似

◦ 独立处理单元

◦ 高度互联

◦ 简单消息传递

◦ 适应性交互

— 初始化:随机设定各条边的W值

— 给定一对(输入,输出),已有神经网络根据输入计算输出,将其与预计输出相比较,并根据两者之间的差值调整各条边的W值

— 神经网络也可以自动学习,但是相比训练,收敛速度要慢很多

— 对已知样本分类的正确率

— 对未知样本分类的正确率

— 过训练

神经网络应用

— 对于那些传统计算解决不了的问题,神经网络也无法解决

— 神经网络可以简化某些特定问题的解答,例如,从数据中提炼一个模型

— 对于数据形成过程未知或者复杂的问题而言,神经网络能够帮助我们从一定程度上理解内在的规律

神经网络与游戏

— 判断所处的环境

— 决定下一步的动作

— 用于表示积累的经验

AI引擎设计

— AI引擎可以帮助解决很多问题

◦ 使得游戏角色之间交流更为容易

◦ 提供实现AI行为的解决方法

◦ 协助保留每一个错误报告

技巧

— 对于行为简单的物体,使用简单的确定性AI技术

— 对于不是主要角色,但是需要一点智能行为的物体,可以对其设定几种模式,并加上一点随机的因素扰动即可

— 对于比较重要的角色,可以使用有限状态机技术,加上另外一些辅助技巧

— 对于最最重要的角色,你需要利用一切可能利用的技术

◦ 状态驱动,使用条件逻辑、概率、以及经历过的状态等控制状态转移

◦ 如果状态转移条件满足,物体要能够发生强制性状态转移动作

什么是好的AI

用户觉得游戏角色挺聪明的,感觉到游戏角色的确随着经历而在成长,一层层的揭开面纱,知道最后才恍然大悟

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言在嵌入式系统游戏开发人工智能都有广泛的应用。 在嵌入式系统领域,C语言是一种常用的编程语言。嵌入式系统通常是指嵌入到其他设备或系统的计算机系统,如汽车电子、家用电器、机器人等。由于嵌入式系统通常具有资源受限和功耗低的特点,因此需要使用一种高效、节省资源的编程语言。C语言正是一种这样的语言,它可以直接访问硬件,提供了丰富的底层支持,并且可以通过编译器对代码进行优化,提高系统性能。 在游戏开发领域,C语言也是一种常用的编程语言。游戏通常需要实现复杂的图形渲染、物理模拟、AI逻辑等功能,需要高效的代码和良好的性能。C语言提供了底层的内存管理、指针操作等支持,可以进行高效的计算和优化,同时还可以与汇编语言结合使用,提高性能和效率。 在人工智能领域,C语言也有着广泛的应用。虽然现代的人工智能技术通常使用Python等高级语言进行开发,但是C语言作为一种底层语言,可以为人工智能提供高效、快速的支持。例如,C语言可以用于实现神经网络、机器学习等领域的底层算法,提高计算速度和效率。此外,C语言还可以方便地与其他高级语言进行集成和交互,为人工智能应用提供更广泛的支持。 总之,C语言在嵌入式系统游戏开发人工智能等领域都有着广泛的应用。由于C语言提供了底层的支持和高效的代码执行能力,因此可以满足这些领域对性能和效率的要求,为应用开发提供了强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值