书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第6章目录
6.2 车辆和转向
1、代码实现自治智能体
- 我们可以从各种方向开始,比如蚂蚁和蚁群的模拟,这是自治智能体最好的演示。然而,我们打算在前5章的知识基础上学习自治智能体的模拟,前面探讨了用向量模拟运动和用力驱动运动的方法。我们曾经把Mover类改造成Particle类,现在要把它重命名为Vehicle类。
class Vehicle {
PVector location;
PVector velocity;
PVector acceleration;
//我们还需添加什么呢
- 我们打算使用这个术语 “小车”(vehicle)描述自治智能体,
- 小车模型表现出了各种行为,这些行为包括恐惧、侵略、喜爱、远见和乐观
2、小车模型的运动方式
- Reynolds从动作选择、转向、驱动机构3个层面描述了理想小车模型的运动方式(由于我们不考虑小车模型的内部实现,只设想它的行为规则,因此称为理想模型)。
1)动作选择
- 小车模型拥有一个(或多个)目的,它根据这些目的选择一个(或一系
列)动作。 - 自治智能体模型能够很好地进行这个层面模拟。
比如,小车在观察周围的环境,然后发现:“我看见一大波僵尸正在靠近,我不想让它们吃掉我的脑袋,必须想办法躲开它们。” - 本例的目标就是“保住自己的脑袋”,动作就是“躲开僵尸”。
- Reynolds的论文描述了各种目的和相关行为,包括:寻找目标、避开障碍和跟随路径。
- 后面我们将用Processing实现这些行为。
2)转向
- 一旦动作被确定,小车就开始计算下一步动作。
- 在我们的程序中,下一步动作就是施加一个力,准确地说,这是一个转向力。
- Reynolds提出了转向力计算公式:
转向力 = 所需速度 - 当前速度。 - 在下一节中,我们将会深入探讨这个公式,分析它为何适用于此类场景。
3)驱动机构
- 在大部分情况下,我们可以忽略第三个层面。
- 在躲避僵尸的例子中,驱动力可以描述为“以最大的速度向左,向右,再向左,再向右”。
- 在Processing世界中,矩形、圆圈或三角形并没有驱动机构,因为它们都是假想出来的。但你并不能完全忽略这个层面。
- 为小车设计驱动效果和动画也是有实践意义的。
- 本章示例程序的视觉效果非常简陋,你可以在练习中加入动画效果——为小车加上滚动的轮子、摆动的船桨或行走的双腿。
3、总结
- 我们最应该关心的是第一个层面,也就是动作选择。
- 你需要知道系统是由什么元素组成的,这些元素有什么目的。
- 本章涉及一系列转向行为:寻觅、逃跑、跟随路径、跟随流场、群集等。
- 学习这些行为的主要目的并不是在项目中使用它们,而是为了掌握建模方法。我们完全可以实现更多有创意的新行为。
- 尽管本章从像素的角度思考问题,但我们的思维不能局限在像素上,我们应该像Braitenberg一样抽象地思考问题。
- 示例程序可能只涉及一种行为,比如第一个例子讲解的只是“目标寻找”行为,但我们可以尝试着在同一个模型中添加各种行为。因此,你不能孤立地对待这些示例程序,而应该尝试着把它们装配在一起。
网友评论