游戏人工智能(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

—  用户觉得游戏角色挺聪明的

—  感觉到游戏角色的确随着经历而在成长

—  一层层的揭开面纱,知道最后才恍然大悟
阅读更多
换一批

没有更多推荐了,返回首页