目录

  • Flocking:模拟群体行为的简单技术
  • 有齿物群的模拟:捕食者和猎物

一、flocking:模拟群体行为的简单技术


Flocking(有时也称为是warming或herding),拥有4项简单的规则,把它们组合在一起时,为自治主体群给出一个类似于鸟群、鱼群的群体行为的逼真形式。


定向行为规则:分离原则、列队原则、聚合原则、躲避原则

分离原则:定向时要避免与本地flock同伴拥挤。即定时检测邻近同伴,避免拥挤;
        列队原则:驶向本地flock同伴的平均航向。即检测邻近同伴航向、速度,获取平均值并调整自己;
        聚合原则:定向时朝着本地flock同伴的平均位置移动。即检测邻近同伴,平均位置然后调整其匹配航向;
        躲避原则:使避免撞上局部区域内的障碍或敌人。即“向前看一段距离”,遇到障碍物、敌人调整航向、速度进行躲避。


无存储:

flocking是一个无状态算法,在2次更新之间没有保存任何信息。定向行为与状态信息、保存flock知识的主体、它所前往的环境以及喜好无关。每轮更新中,每个个体会对它的环境进行重新评估。这不仅减少了存储需求,也允许flock对于变化的环境条件进行实时反应。因而,flock显示出了涌现行为要素。    
       :“涌现”指一个系统中个体间预设的简单互动行为所造就的无法预知的复杂样态的现象。


游戏开发实际应用:

Flocking为个体运动和构造一个更真实的玩家可探索环境提供了了强有力帮助;它可以用于许多怪兽以及威胁性小的生物,以及控制不对队形与越过3D环境的运动。与简单的脚本结果相比,被创造的动物群体能在地形中更真实地游走。怪兽能以一种更自然的方式在场景中徘徊,躲避玩家可能袭击的位置,当flock(群体)变得足够强大时也许会发动反击。可能性几乎是无穷的。


拓展:

为flock添加生命时钟规则,使其拥有时间的概念——偏离同伴的成员联系越来越低,配偶之间能进行“繁衍”产生下一代,年老的成员会逐渐老死。以及捕食者和捕食行为——一种flock被喂养另一种。


二、有齿物群的模拟:捕食者和猎物


在上文中,介绍了flocking的基础入门,接下来将通过几个方面来介绍flocking的拓展——有齿物群的模拟。


对象个异性:

猫守宫个异体

根据对象的属性,设计一个异化的方法。该方法针对需要个异化的参数随机生成参数值进行赋予。甚至对其功能进行限制或增强(如一个对象被其他“捕食者”攻击导致腿部受损,则移动受限;一个对象在其群体为优先变异体,则变异部分功能加强如力量、敏捷等)。
        目的:为了使生物行为更加逼真,也为了使不同生物交互式将呈现突发行为,这也使得集体行为的物群更加逼真。
        例如:有些对象比伙伴饥饿,这样会增加其“捕食”的频率,或者说觅食的频率,这能增加物种的交互性;有些对象视野广,当它们在群体里时会增强物群的警戒强度,而当它们休息或者外出觅食时,则物群的警戒强度又会下降。甚至为捕食者增强一定的智能(当捕食者“注意”到这些警戒能力强的被捕食者时,会等待其离开物群时进行捕食或优先捕食其他警戒力较差的猎物),让整个群体行为模拟变得更加真实、有趣。


物群的喂养:

食物链

不同类型的物种以其他类型的物种为食,则需要控制物种的饥饿长度。所以,为每个需要的物种设立饥饿值,在游戏的每个更新周期中进行减少。当饥饿达到一定程度,物种开始寻找食物,甚至饥饿值达到一定程度会给物种带来死亡!饥饿值会影响物种的决策,比如物种饱腹后,遇到猎物可能不会去捕食(避免浪费,从而影响后续饥饿时捕食的效率)。每当一个物种被杀死时,则会被删除。


物群的繁衍:

每个物种都应该能繁衍自己的成员,而作为食物链的底层,其繁衍能力就更强了。注意:为了避免物种过多,应该有所繁衍限制。例如最底层的生物繁衍到一定程度则会停止繁殖(每个地区只能供养一定数量的底层生物),而底层的生物作为被捕者,其数量也会影响到上一层的生物数量,这样层层递进,食物链顶端的生物将会是最少。即使食物链顶端的生物繁衍过多,也会因为大量捕食,使食物大量减少从而使自己饿死。这样循环也符合了自然现象。甚至为其添加进化的原则(同类的不同物群进行繁衍时会进行遗产不同的DNA——记忆,影响下一代的特长,比如长颈鹿和短颈鹿的脖子长度或者速度。长颈鹿和速度快的捕食者能获取的食物机会更大,则成员不断增加,而短颈鹿和速度较慢的捕食者则成员不断减少直至灭绝),进行模拟自然选择!


物种的趋利避害:

大部分情况下,捕食者的速度都要比被捕者快,而为了逃脱被捕食的命运,只能依靠捕食者遇到麻烦(体力暂时耗尽或者遇到天敌?)。比较容易的方法就是通过障碍物来进行逃脱,为了避开障碍物,捕食者不得不降低速度,这使猎物有机会逃脱。


有齿物群的模拟:

1.世界模拟:在布满不同的障碍物世界中,顶级猎手会因饥饿而去捕食中层的物种,被捕食者会四处逃窜以免成为猎手的盘中餐。猎手常常障碍物的妨碍以至于猎物逃脱,而散开的物种会寻找其他同伴组成新的物群,然后整个循环再次重新开始。
       2.世界终结:整个世界会以2种方式之一结束,这取决于配置和运气。
            一种是最底层的生产者灭绝了,造成整个生态链崩溃。或者是顶层猎手将生物链的一环消灭了,造成该环相关的上层食物链崩溃,如果是简单的生物链,则可能导致整个世界只剩下了繁衍到极限的底层生产者。
            另一种是形成静态平衡,顶层猎手运气不好捕食不到猎物而灭绝。而只剩下中层物种与生产者,此时世界继续发展要么进入前一个状态,要么则生产者繁殖够快,提供了中层物种足够食物生存下去(如果除生产者其他物种都不可繁衍)。
            如果所有物种都可以繁衍,则可能出现任何结果,这是最逼真的配置模拟的方式,也是最难以进行正确的平衡。
       3.局限性和可改进的地方:针对物种的参数可更细化的开发,如物种视野,大多数猎手的视觉很敏锐,能看很远;而被捕食者视野较小且看不到后面。为了使视觉属性更逼真,将会带来大量的数学开销(视线检测和视角检测)。


个人想法:

可以利用flocking算法的思维针对游戏中阵营模块不同阵营的AI进行物群模拟决策,让其更加智能(阵营每一个小势力为一个同伴,当然每个同伴也可以增加彼此的关系属性,从而影响各个原则如因为讨厌增强分离原则并彼此设置一个厌恶权值后将其加入躲避原则的对象)。并在其新增新的原则如攻击(捕食)、防御(躲避或阻碍)、团结(根据彼此的关系,会根据距离、强弱等因素对弱势的同伴进行援助)原则等,让其宏观上的AI更加智能。在微观上可以自定义如同将军一个的更高级的AI,让其进行局部影响,累积成果最终影响甚至改变其阵营宏观的策略(如因为整体的力量比对手强到一定程度,则会攻守转换,并在局部优势地域进行攻击,而在局部弱势地域进行援助——团结原则)。
           整个flocking算法为我们打开了游戏对生物学的生物行为进行模拟的大门,但不应该仅仅局限于已有的基础模块。整个算法仅论基础模块,是一个比较简单的算法,但其可拓展性极强。根据自己游戏需求,对flocking算法进行针对性的开辟原则,可以极大还原真实群体行为,甚至让其拥有更高的智慧(针对首领以及特异性个体进行AI增强,甚至使用机器学习、深度学习等技术进行训练、学习来提高整体群体的基础智慧!)。


学习资源

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

更详尽的内容和代码实现可在书中阅读。

【游戏精粹】模拟群体行为:Flocking算法相关推荐

  1. 【游戏精粹】AI系统(一):优化策略

    优化策略 策略1:使用事件驱动行为而非轮询             最理想的情况是自主体应不断地监控其所处的环境,并做出相应的反应.这种方法的问题在于,它将导致大量重复计算.替换方法是尽可能采用事件驱 ...

  2. 【游戏精粹】AI个性化决策系统

    目录 创建影响力地图 策略评估技术 有关态度的一切:为意见.声望和NPC个性构建单元 个人观点 一.创建影响力地图 前言             本节和下一节将介绍这样的一些技术:让AI主体能够从战术 ...

  3. Flocking算法0704

    一.常识 "Flocking"算法是一种基于行为的模型,主要被用来模拟动物群体的行为,如鸟群或鱼群.它在1986年由计算机图形学家Craig Reynolds首次提出. 1. 凝聚 ...

  4. 操作系统学习之用C语言模拟伙伴(Buddy)算法

    前言 学到了操作系统的的虚拟内存部分,硬件不太好的我学起来有些吃力,概念性知识点太多,所以我决定用软件的方式,实现一下虚拟内存常用的算法,因为用到了指针,暂时用C语言写一下Buddy算法.FIFO算法 ...

  5. 游戏与常用的五大算法---上篇

    前言: 什么时候,我们之间竟然变得这么生疏 什么时候,我想见到你,却又害怕见到你 什么时候,才能在我身边,告诉我.其实,你一直都在 -----------<仙剑奇侠传> PS:为了方便大家 ...

  6. 基于Flocking算法的多智能体编队matlab仿真

    UP目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 Flocking(有时也称为是warming或herding),拥有4项简单的规则,把它们组合在一起时,为自治主体群给出一个类似于鸟群 ...

  7. 游戏编程中的寻路算法研究

    近年来,游戏产业的快速发展带动了游戏中人工 智能(Artificial Intelligence,简称AI)的发展,越来越 多的游戏采用人工智能技术提高游戏的可玩性.在电 子游戏中,玩家操控主要角色, ...

  8. [转] 游戏编程中的寻路算法研究

    [url]http://blog.csdn.net/ityuany/archive/2010/04/21/5509750.aspx[/url] 近年来,游戏产业的快速发展带动了游戏中人工 智能(Art ...

  9. Flocking算法0705

    一.科研工作 今天的任务主要是检索了大量的论文,开展相关的理论研究.那么在人群行为模型中,我今天是找了学位论文来进行研究. 第一篇 张楚楚. 基于多智能体仿真的人群疏散模型优化研究[D].郑州大学,2 ...

最新文章

  1. ubuntu更改用户名密码
  2. Spring Aop 组件概述
  3. freenas安装使用和弃坑
  4. CCIE路由实验(4) -- BGP路由控制
  5. 基于事件驱动架构构建微服务第8部分:在应用程序上实现事件溯源
  6. C#的protected internal
  7. java 数据结构 迷宫_JAVA数据结构与算法之递归(一)~ 迷宫问题
  8. stack heap java_java中的Heap 和 Stack | 学步园
  9. cmd命令行怎样运行python_在CMD命令行中运行python脚本的方法
  10. c语言编程实现二叉树的镜像,C/C++知识点之C++实现利用(前序和中序生成二叉树)以及(二叉树的镜像)...
  11. 矩池云利用ipykernel为JupyterLab添加kernel以及展示出来
  12. 分页SQL语句/存储过程(.net/SQL技术交流群206656202 入群需注明博客园)
  13. Ubuntu下fcitx安装。(ibus不会用)
  14. php环境配置PHPWAMP
  15. (QACNN)自然语言处理:智能问答 IBM 保险QA QACNN 实现笔记
  16. 计算机二级程序设计提交,程序设计方法与风格(计算机二级复习指导)
  17. 行动诠释价值,城联优品韩董事长出席广东英德抗洪捐赠公益活动会
  18. 厦门理工嵌入式开发LPC1768开发板教程
  19. 学习ARM开发(4)
  20. 计算机安全属性中可用性是,计算机安全的基本概念试题解析

热门文章

  1. 虚拟机安装mysql步骤
  2. 前端面试题汇总及答案十二
  3. 微信小程序跳转h5链接(web-view)
  4. 由JVM深入了解Java的线程安全与锁优化
  5. java确认对话框否_如何在Swing中显示是/否和取消选项的确认对话框?
  6. xlc编译mysql库_[Xlcteam](Web)Xlcteam客户留言板
  7. thinkphp6 框架源码分析
  8. 初尝微信小程序2-Swiper组件、导航栏标题配置
  9. C语言中的char用法
  10. 关于大学生如何轻松找到高薪工作