游戏人工智能(AI)开发(一)

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

 

—  AI的描述

 

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

 

—  AI的实现

 

—  技术实现

 

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

 

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

 

—  利用已有的AI技术

 

—  融合娱乐性

 

—  游戏中涉及的AI技术

 

—  专家系统

 

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

 

—  案例式推理

 

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

 

—  有限状态机

 

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

 

—  游戏中涉及的AI技术

 

—  产生式系统

 

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

 

—  决策树

 

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

 

—  搜索方法

 

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

 

—  游戏中涉及的AI技术

 

—  规划系统

 

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

 

—  一阶谓词逻辑

 

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

 

—  情景演算

 

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

 

—  游戏中涉及的AI技术

 

—  多Agent

 

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

 

—  人工生命

 

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

 

—  群组行为(Flocking)

 

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

 

—  游戏中涉及的AI技术

 

—  Robotics

 

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

 

—  遗传算法

 

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

 

—  神经网络

 

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

 

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

 

—  游戏中涉及的AI技术(续)

 

—  模糊逻辑

 

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

 

—  置信网络

 

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

 

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

 

—  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
用户觉得游戏角色挺聪明的,感觉到游戏角色的确随着经历而在成长,一层层的揭开面纱,知道最后才恍然大悟
原文链接:http://www.unitymanual.com/thread-2446-1-1.html
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值