java - 植绒小鸟行为问题

标签 java simulation artificial-life boids

昨天我遇到了 Craig Reynolds 的 Boids ,随后我想我会尝试用 Java 实现一个简单的 2D 版本。 我根据 Conrad Parker's notes 整理了一个相当基本的设置.

但是,我遇到了一些相当奇怪的(在我看来)行为。目前,我的 boids 相当快地移动到一个粗糙的网格或格子中,并继续当场抽搐。我的意思是它们会四处移动并非常频繁地旋转。

目前,我已经实现了:

  1. 对齐
  2. 凝聚力
  3. 分离
  4. 限速

最初,我的类群随机分布在屏幕区域(与帕克的方法略有不同),并且它们的速度都指向屏幕区域的中心(请注意,随机初始化的速度给出相同的结果)。更改速度限制值只会改变 boids 移动到此模式的速度,而不是模式的形成。

在我看来,这可能是:

  1. 我使用的参数的结果(现在我的代码如 Parker 的伪代码中所述;我还没有尝试过 Reynolds 描述的由角度和半径定义的影响区域。)
  2. 我需要实现但我不知道的事情。
  3. 我做错了什么。

预期的行为将更类似于 Reynolds 的 boids 页面上的小程序中发生的二维版本,尽管现在我还没有实现任何方法来将 boids 保持在屏幕上。

有没有人遇到过这个?关于原因和/或如何解决它的任何想法?如果有帮助,我可以发布相关行为的 .gif 图像。

最佳答案

也许您对分离规则的权重太高,导致所有的类群都尽可能远离所有相邻的类群。我的伪代码中有各种常量作为权重:规则 1 中的/100 和规则 3 中的/8(以及规则 2 中的隐式 *1);这些可以进行调整,这通常可用于模拟不同的行为,例如近距离聚集的昆虫或滑翔的鸟类。

还有任意|距离|应修改分隔规则中的 < 100 以匹配您的模拟单位;这条规则应该只适用于距离很近的 boid,基本上是为了避免碰撞。

玩得开心!

关于java - 植绒小鸟行为问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6209829/

相关文章:

java - 为什么这个抽屉导航打不开?

bayesian - 如何使用 pymc3 从先验模拟

initialization - 我应该在哪里调用 VHDL 中 protected 类型的初始化函数?

artificial-intelligence - 无法向另一个 Jason 代理发送操作

java - 使用 AWS 按需运行长 Java 进程

java - 当 Future.get(timeout) 超时时线程是否继续运行

java - Android AGP 4.2.0 + Java 11 编译失败

javascript - 处理语言 vs javascript?

c# - XNA 二维视野

artificial-intelligence - 我是否应该向由遗传算法训练的人工神经网络添加偏差