优化策略

策略1:使用事件驱动行为而非轮询
            最理想的情况是自主体应不断地监控其所处的环境,并做出相应的反应。这种方法的问题在于,它将导致大量重复计算。替换方法是尽可能采用事件驱动技术。如棒球游戏,当棒球被击打时,棒球只需告诉接球手,自己被击打即可。
        策略2:减少重复计算
            通过在多个AI主体之间共享结果以减少重复计算。很多时候,虽然本可以只计算一次并共享计算结果,但主体将重复计算相同的信息。这种优化很容易,通常可以节省大量的时间。
        策略3:由管理员集中进行协调
            对于多个主体之间的协作,可由一个管理员实体来做出复杂决策,从而使协作更简单、更快速。这种复杂的决策通常是确定每个成员的任务,而主体将完成相应的任务。
        策略4:不那么频繁的运行AI
            AI主体很少需要在每帧都运行其整个决策函数。因为真正的生物都有一定的反应时间,这样变提供了一种简捷的削减AI处理途径。
            这种策略的问题之一是可能存在AI处理高峰。最简单的解决方案是随机化每个主体处理出口。每次AI回调后,随机选择新的延迟。这种随机执行窗口实际上确保了主体之间不会同步,从而导致处理高峰产生。
        策略5:将处理工作分散到多帧中完成
            任何所需时间不确定的算法(将占用大量的CPU时间),都可将其工作分散到多帧完成。通过保存每帧计算得到的结果,并在下一帧恢复,直到完成工作。
            本策略可作为一个特例在一个模块(如寻径模块)中实现。
        策略6:利用细节级AI
            细节级(level-of-detail,LOD)概念是一种精巧的优化,被大量用于图形领域之外。其思想是:当物体远离摄像机时,使用一个包含较少多边形的模型;而当物体较近时,使用一个包含较多多边形模型。简而言之:远处的对象不渲染或者“粗”渲染,较近的对象进行“细”渲染。这样,显示速度将极大地提高,而对游戏视觉效果几乎没任何影响。
            用于AI的细节级技术:
                1.根据主体离摄像机、玩家或现场的距离,改变处理频率;
                2.根据相关程度,改变主体算法的复杂度,方法是如果主体远离画面,则不进行精准的寻径;
                3.当主体对玩家的重要性降低时,在单个模拟算法中显示多个主体。其极端的例子是:使用简单的公式来模拟远处争斗的结果,而对于离玩家较近的战斗,则对每个士兵和每颗子弹都进行模拟。
            细节级旨在在玩家不会察觉的情况下减少计算量。如果玩家将发现有问题或差别,则说明优化过头了。
        策略7:只解决问题的一部分
            对于大型问题,有时只需解决急需的部分就足够了,可在以后需要时再计算解决方案的其余部分。甚至可能出现这种情况:情形出现很大变化,问题的余下部分已经无关紧要,不再需要计算。这种策略非常类似迟缓计算。
            例如A*寻路的层次式寻径(分级路径):计算角色到达目的地的高级路径(从房间到房间),然后进入新房间后计算到下一个房间的微路径。如果由于某种原因,角色改道或者死亡,则丢弃余下的路径。这种按需寻径可以极大地提高速度。
        策略8:离线完成困难的工作
            有时,问题非常困难,没有解决它所需的CPU时间。则可以在开发阶段预先计算好结果,并通过一个包含索引的查找表来获得所需的值。这是最强大的优化策略之一,因为它能够将几千小时的计算结果存储为几KB的数据。
        策略9:使用突发行为以避免编写脚本
            该策略与前一个策略相反。如果没有足够的时间来为出现在场景数以百计的背景AI实体创建行为或脚本,对此解决方案是指定简单的规则,以实现智能、突发的行为。可参考本栏目的【游戏精粹】模拟群体行为:Flocking算法。
            但是,该策略在减少离线工作量时,可能导致意外结果(模拟群体不完善导致)。它最适合用于非关键AI实体,这些实体并非游戏发展或完成的关键。
        策略10:通过连续记录来分摊查询成本
            有时需要收集大量的数据,以做出智能的决策。如果需要数据时才进行收集,则用于计算的时间可能是不可接受的。对此,解决方案是不断地更新数据结构中的数据。虽然跟踪数据所需的时间和内存更多,但这被分摊到很多帧中。这样,对数据的简单查询将不会影响帧频。
        策略11:重新考虑问题
            重新考虑问题以将代码的速度提高多个数量级。优化代码的某部分常常会获得意外的收货。真正的优化方法是,从稍微不同的角度,以其他方法或算法来解决问题。
            在“【游戏精粹】模糊逻辑”一文的“避免模糊系统的组合激增”一节中解释了这种策略。在那节中,介绍了Combs的替代算法,这种算法巧妙地避免了传统模糊系统的指数特征。虽然得到的结果不相同,但具有可比性,对大多数用途而言足够了。
            从不同的角度重新考虑问题,可能是任何人都能够提供的优化建议。它是其他优化的根源所在。只有重新定义或抽象问题、进行类比或改变自身的角度,才能完成真正优化代码的一跃。


学习资源

  • 《游戏编程精粹2》第三章第一节

【游戏精粹】AI系统(一):优化策略相关推荐

  1. B4:Unity制作Moba类游戏——小兵AI系统

    若想取得战争的胜利,必先控好兵线. ---- 麦克阿瑟 是时候让敌人经历一下我们兵线的洗礼. ---- 拿破仑 在LOL对局中,职业选手对兵线的控制可以说是达到了"运筹帷幄之中,决胜千里之外 ...

  2. 嵌入式Linux 系统的优化策略和方法

    嵌入式Linux 系统启动优化的那些事儿 嵌入式Linux 系统优化的那些儿事之系统启动时间的优化方法.. 嵌入式Linux 系统时间测量工具以及用法 Printk Times – 用于显示每个 pr ...

  3. linux系统安全优化策略

    1.口令复杂度检查 重新启用某个旧密码,要确保此密码在继上次使用后已被修改过几次.此策略是管理员能够通过确保旧密码不被连续重新使用来增强安全性 参考配置操作,在/etc/pam.d/system-au ...

  4. Stuart Russell对话姚期智:为全人类设计AI系统,可以借鉴墨子「兼爱」思想丨2023智源大会AI安全与对齐论坛...

    导读 在2023智源大会「AI安全与对齐论坛」的对话环节,加州大学伯克利分校教授Stuart Russell与图灵奖得主.中国科学院院士姚期智针对「如何设计对人类有益的AI」.「如何管控AI技术」,以 ...

  5. Silverlight 2.5D RPG游戏技巧与特“.NET技术”效处理:(十一)AI系统

    谈到人工智能(AI),这个话题就太大了:大学里有<人工智能教程>专门讲这方面的知识,什么大名鼎鼎的人工神经网络.遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧. ...

  6. Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统

    Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统 作者: 深蓝色右手  来源: 博客园  发布时间: 2011-04-19 11:18  阅读: 1282 次  推荐: 0 ...

  7. Silverlight 2.5D RPG游戏技巧与特效处理:(十一“.NET研究”)AI系统

    谈到人工智能(AI),这个话题就太大了:大学里有<人工智能教程>专门讲这方面的知识,什么大名鼎鼎的人工神经网络.遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧. ...

  8. 一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统

    谈到人工智能(AI),这个话题就太大了:大学里有<人工智能教程>专门讲这方面的知识,什么大名鼎鼎的人工神经网络.遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧. ...

  9. Facebook成功打破纸牌游戏Hanabi的AI系统得分纪录

    据外媒Venture Beat报道,Facebook人工智能研究院(Facebook AI Research,FAIR)称,他们推出了一个与纸牌游戏Hanabi相关的最新AI项目.AI系统的得分是24 ...

最新文章

  1. Retrofit2.0和Rxjava结合使用的简单记录
  2. 导数,微积分,牛顿运动学制作创意地图
  3. 软件测试python基础_软件测试学习教程——python基础
  4. php异步查询数据库,php中mysql数据库异步查询实现
  5. Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件
  6. 南大首届AI本科课程曝光:周志华为第一批00后,准备了大剂量烧脑数学
  7. linux先cd到mysql的运行路径下,Linux常用的服务器运维命令
  8. tcs标准编写软件_标准编写工具TCS2017使用指南.PDF
  9. [转] 如何把书上的字弄到电脑
  10. Mysql数据库锁与隔离级别
  11. 安装AD软件后,无法打开PCB,打开后一直提示advpcb.dll丢失,然后一直是停不下来的滚动条,解决方法。
  12. python 判断是否为中文
  13. 一目了然——二叉树的遍历(先序,中序,后序遍历)
  14. 计算机网络:广域网以及相关协议
  15. SNMP采集测试工具使用方法
  16. 简述计算机网络测试和故障诊断的发展趋势,网络测试和故障诊断
  17. 【WPS绘图】用PPT画立方八面体单晶
  18. NYU-Depth数据集
  19. WEB结合WML图铃下载全功略
  20. Linux 命令神器:lsof 入门(一)

热门文章

  1. 824 Greedy Mouse
  2. 【每日早报】2019/11/20
  3. MySQL之两个字段的in
  4. 《达摩院2023十大科技趋势》发布,生成式AI、多模态预训练大模型入选
  5. ios 仿优酷app主页分类滑动页面及流媒体视频播放
  6. python实验目的_python实验一
  7. PMI官网查询PDU
  8. mysql开启多端口以及mysql主从配置
  9. Python代码封装的可执行exe文件反编译为Py脚本
  10. 找不到打印机开启什么服务器,找不到打印机服务?