从今天开始,我为大家讲解在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
—  用户觉得游戏角色挺聪明的
—  感觉到游戏角色的确随着经历而在成长
—  一层层的揭开面纱,知道最后才恍然大悟

游戏人工智能(AI)开发(一)相关推荐

  1. 游戏人工智能AI会议

    ACAI IEEE Conference on Games (COG) IEEE Conference on Computational Intelligence and Games Artifici ...

  2. 发挥游戏人工智能的最大价值:线程化

    文 / Donald Kehoe 之前的所有本系列文章一直都在为本文奠定基础.我们希望,您现在能够清楚地了解到游戏人工智能 (AI) 是什么,并知道如何将其用于您的游戏中.如今,极具挑战性的任务是,最 ...

  3. AIPU——游戏人工智能专用处理器

    AIPU--游戏人工智能专用处理器 本文发表于恋花蝶的博客http://blog.csdn.net/lanphaday ,如蒙转转,敬请保留全文完整,务必包含本声明. 即便我们拥有最强劲的 CPU , ...

  4. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  5. 【转】【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    原文连接:http://www.cnblogs.com/dyllove98/archive/2012/04/07/2461865.html#commentform 我们常常听闻AI(Artificia ...

  6. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

  7. [原]【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

  8. 游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    我们常常听闻AI(Artificial Intelligence人工智能)这个名词,比如Dota里面的AI地图.写这篇文章的时候,最新版的Dota AI是6.72f,估计过几天6.73的AI也要出来了 ...

  9. 《游戏AI开发指南(基于Lua的人工智能在游戏中的应用)》(Yanlz+Unity+SteamVR+5G+AI+VR云游戏+Lua+人机交互+沙箱+导航+决策树+影响力地图+立钻哥哥+==)

    <游戏AI开发指南(基于Lua的人工智能在游戏中的应用)> <游戏AI开发指南(基于Lua的人工智能在游戏中的应用)> 版本 作者 参与者 完成日期 备注 YanlzAI_Lu ...

最新文章

  1. ECMASCript 2019可能会有哪些特性?
  2. kindeditor图片上传 struts2实现
  3. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现
  4. charles 简单使用
  5. 物理史2000年来最豪华阵容也是最为精彩的对决!
  6. silverlight(二)样式
  7. 在 Python 中使用函数式编程的最佳实践!
  8. hdu6086(AC 自动机)
  9. thinkphp6 加载第三方类库_thinkphp中第三方类引入问题
  10. 致敬CondConv!Intel提出即插即用的“万金油”动态卷积ODConv
  11. function signature是什么
  12. 没有人更比他懂基金业务:博格和他的先锋集团创业史(4):
  13. android的自定义字体,Android中使用自定义字体的方法
  14. win10中常用快捷键 (包括切换窗口、打开我的电脑等快捷键)
  15. ORA-12154: TNS: 无法解析指定的连接标识符
  16. php 云片网对接,如何实现php调用云片网接口发送短信
  17. 织梦套用html模板文件,织梦CMS套模板建站流程
  18. 360浏览器打不开微信的连接服务器,360浏览器打不开网页怎么办-解决360浏览器打不开网页的方法 - 河东软件园...
  19. 重庆拟与惠普成立共同基金 打造中国西部“硅谷”
  20. 教你怎样用CAD做三维图

热门文章

  1. 神经网络 和 NLP —— 神经网络入门
  2. 机器视觉(12)- 机器视觉解决方案供应商
  3. php ul前面的点,html里面ul那个点怎么消
  4. 大学计算机 信息编码与数据表示什么意思,大学计算机之-计算机中信息编码ppt课件...
  5. 八核智能视频分析边缘计算盒子,4.8T+24路1080P视频解码
  6. 磁盘阵列RAID理解
  7. 对JSON数据进行排序
  8. 中国科学院大学计算机科学与技术学院复试,中国科学院大学计算机科学与技术考研经验分享...
  9. 学会这3个小技巧,轻松去图片水印
  10. 耶鲁计算机科学专业,耶鲁大学(Yale University)计算机科学Computer Science专业排名第29位(2021年THE世界大学商科排名)...