欢迎光临散文网 会员登陆 & 注册

基础 | 自治智能体----类鸟群(一)

2020-03-17 16:59 作者:有木乘舟  | 我要投稿

本系列为笔者初学c/c++和游戏AI开发的学习过程,算法为主,不涉及到具体的游戏开发软件学习(如unity,虚幻4等),若有错误请在评论区留下批评意见。

  • 语言:c/c++ (11及以上) 

  • 平台:macOS mojave 

  • 编译器:vs Code / g++

  Boids,类鸟群,最早由Craig Reynolds在1986年BBC的纪录片中提出的计算模型,指在计算机中模拟自然界中鸟群和鱼群的行为模式,并称其为操控行为。

  该操控行为(Steering Behaviors)主要有三种行为模式:

  • 体积排斥:个体占据一定的体积,且永不相交,即每个个体都会避免与最近的个体发生碰撞。

Separation: steer to avoid crowding local flockmates
  • 速度对齐:每个个体与其近邻(如与第k个粒子距离最近的Nk个邻居)保持速度同步。

Alignment: steer towards the average heading of local flockmates
  • 聚集倾向:粒子不会倾向于独立行动(粒子群保持维持),每个个体会尽量与附近个体靠近,以避免孤立。

Cohesion: steer to move toward the average position of local flockmates

Cohesion: steer to move toward the average position of local flockmates

  个体运动是独立的,每个个体均独立执行以上三个行为模式,即每个个体只会根据附近其他个体的运动来调整自身当前的运动状态,而没有任何“领导”在起作用。

  在计算机模型中,个体(boid)可以获取整个场景的全部信息,但要发生群集的行为需要个体的领域(neighborhood)内出现一个群体(flockmates)。

  邻域有两个特征:一是距离(从boid的中心测量),二是角度(从boid的飞行方向测量)。

图1:a boid's neighborhood

  不在个体邻域内的群体会被忽略掉。邻域可以被当做是一个有限感知模型,但更正确的说法是,领域定义了一个区域,在这个区域里,群体影响着个体的航向(行为)

有关Boids的所有资料均可在Craig Reynolds的个人网站上查阅到:http://www.red3d.com/cwr/boids/

  类鸟群是一个很好的有关自治智能体的样本,它能帮我们很好的理解和实现一个自治智能体程序。所谓自治智能体,是指能在一定条件下对周围的环境做出有限的自治行为的对象。

一个自治智能体是这样一个系统,它位于一个环境的内部,是环境的一部分,且能感知该环境对他它有效实施的作用,并永远按此进行,为未来的新感知提供条件。

----《游戏人工智能编程案例精粹》

  自治智能体在游戏中有着很好的应用,适用于非常多的场景,如游荡的怪物自动避开障碍物,巡逻的卫兵避开人群等等。

  当然也可以通过编写硬规则来实现上述的功能,但这样就会让NPC看起来傻傻呆呆的,同时也会让游戏失去许多乐趣,不是么。

  自治智能体的运行过程可以分解为三个步骤:

  • 行动选择:负责制定计划,选定目标。

  • 操控:负责分解目标,发出控制信号,服务行动选择环节制定的目标和计划。

  • 移动:负责执行操控行为发过来的控制信号,做出具体的动作。

  举个例子,你半夜时候突然感到饿了,决定到冰箱拿点东西吃,于是你掀起被子、下床,打开冰箱拿出了牛奶和面包吃了起来。

  在这整个过程当中,对“感到饿了”这个环境的变化,大脑会做出“吃东西”这样的计划,并将目标定在“冰箱”;之后,大脑中其他部位会将计划分解为“下床,打开冰箱,吃东西”这一系列操作,并通过各种神经信号发送给手脚;最后,你的手和脚执行这些操控信号,走到了目标点,开心的吃了一顿。

  该项目仍然来自《游戏人工智能编程案例精粹》,但是由于各种原因的限制,笔者对其进行了大量的修改,并且会按照自己的理解来讲解该项目,但其核心思想和内容不会改变。

  具体的演示视频,笔者已经上传到B站,可以在这里看到。

  笔者选用了跨平台的第三方库SFML来实现图形界面的开发,这是一个简单方便的多媒体库,  非常适合用来当做简单的2D游戏引擎,开发小游戏。

  具体的安装教程,在这篇文章里有个简单的介绍。

  至于SFML的使用教程,推荐直接参考官方文档:https://www.sfml-dev.org/ ,也可以跟着这本书学习《SFML Game Development》。


参考: 

  • 《游戏人工智能编程案例精粹》

  • http://www.red3d.com/cwr/boids/    Craig Reynolds

相关代码下载:https://github.com/linpeijie/GameToy/tree/master/GameAI

基础 | 自治智能体----类鸟群(一)的评论 (共 条)

分享到微博请遵守国家法律