与朋友和敌人共舞:boids的群体智能
摘要
展示在Mathematica中模拟群体智能,使用简单的粒子运动规则,创造受动物行为启发的动态视觉模式。
暂无内容
查看缓存全文
缓存时间: 2026/08/17 00:46
# 与友共舞,与敌同旋:Boids 群体智能
来源:https://community.wolfram.com/groups/-/m/t/122095
## 讨论区
41 条回复 | 10.4 万次浏览 | 30 条回复 | 160 个赞
我发现的一种用昂贵数学软件进行"无意义娱乐"的方式如下。这样描述它:
- 1000 个舞者在舞池上随机分布。
- 每个舞者随机选择一个"朋友"和一个"敌人"。
- 每一步,每个舞者:
- 向舞池中心移动 0.5%
- 向朋友迈一大步
- 向远离敌人的方向迈一小步
- 随机间隔下,一个舞者会重新选择朋友和敌人
随机性被刻意引入。这是舞蹈效果:
(代码块保留原文)
感谢 Vitaliy 代表我发布并附上了动画 :\-)
背景:我曾读到,动物群体(比如椋鸟群或鲱鱼群)的宏观行为可以用每个个体遵循其邻域内非常简单的规则来解释,本质上是 1)努力跟上队伍,2)努力避免碰撞。我开始在 Mathematica 中尝试这个想法,但识别每个粒子的最近邻相当慢。于是我想知道,如果每个粒子根据另外两个粒子的位置行动,而不管它们的远近,会发生什么。规则很简单:远离一个,靠近另一个。
收缩项(x = 0\.995 x)是为了防止粒子云向无穷远扩散或远离原点。我调整了"靠近"和"远离"的步长,以平衡聚集和扩散的趋势(如果步长相等,你会得到更像苍蝇群的东西)。由于每个粒子的吸引子和排斥子是固定的,系统会达到某种动态平衡。为了让事物保持变化,我添加了一条规则,定期为一个粒子改变吸引子和排斥子。最后的调整是让非常近距离的粒子所受的"力"趋于零。这有助于阻止形成非常紧密的团块,并防止当粒子将自己选为吸引子或排斥子时出现除以零的错误。
将该系统描述为舞蹈,是试图在不使用数学术语的情况下解释屏幕上旋转的图案。我很想看看使用其他简单规则能创造出什么其他"舞蹈"。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
迷人的工作,13 年后,这是我的三枚硬币。它使用 `GraphicsComplex` 而不是 `Point` 实时运行,利用了 WLJS Notebook 前端上的 GPU 管道。
(图片占位符)
我无法上传视频,所以这是链接 (https://wljs.io/attachments/53dee6ea-dancers.mp4)。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
你所谓的"无意义娱乐",社会科学家(包括社会物理学家)称之为"严肃研究"。我更喜欢你的描述,但在我看来,大多数社会科学模拟,如果被视为研究(它们确实如此),应该被认定为荒谬的伪科学。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
@Jari Kirma: 太棒了,非常感谢
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
@MohamedZaghloul: 你可以按以下方式导出每帧数据,这里是 100 帧:
(代码块保留原文)
这会生成文件 swarm\_1\.dat, swarm\_2\.dat, \.\.\. swarm\_100\.dat。
导出格式由文件扩展名(本例中为".dat",表示表格格式)或 Export 的第三个参数决定(请参阅文档)。
你也可以"回放"这样一系列文件,尽管这种方式可能有点慢:
(代码块保留原文)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
改进的 Manipulate,2D/3D 选项卡,颜色样式,方程标签 \.\.\. 享受吧!
(代码块保留原文)
感谢 Andre 和 Vitaliy 提出了其中一些改进建议。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
这是一个变体,其中明确链式连接了友环(本例中为两个)。敌人仍然是随机的,但在创建后不会被修改:
(代码块保留原文)
参与的环数量可以通过在 Mod 内的 i 上加不同的值来修改。0 表示单个环,2 表示三个环,依此类推(前提是 n 是环数量的倍数)。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
这个帖子在 **Reddit (http://redd.it/1me8r3) 上被讨论**,结果使用名为 Processing 的编程语言重新创建了该算法,使用了 1,000,000 个粒子并运行了一整夜!这是**视频链接 (http://youtu.be/7WYewjhQKqo):** [](http://youtu.be/7WYewjhQKqo)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
@Vitaliy,看起来社区越来越受欢迎了。在这个讨论开始的那天,我也做了一个通宵模拟。这是原始(53MB)200,000 个粒子模拟的压缩输出,使用 Mathematica:
在这个 GIF 中,时间之箭被反转了。就像回到大爆炸!
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
嗨,Vitaliy,
感谢你的精彩帖子。
这个问题在环境或土木工程中有什么应用吗?
谢谢你的时间。
此致,
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
\.\.\. 这是使用球体而非点生成动画 GIF 的代码:
(代码块保留原文)
对于二维动画,可以使用我在讨论《使用 Image3D 沿时间维度可视化动画 GIF》(http://community.wolfram.com/groups/-/m/t/118467) 中解释的方法来跟踪群体的复杂动态。
[](http://community.wolfram.com/groups/-/m/t/118467) 时间?
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
太神奇了!这是我的 Manipulate,为这群体舞蹈增添额外的兴奋感。
(代码块保留原文)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
我确实非常喜欢 Bernat 所做的。它让我有机会找到一个有趣的参数范围,在其中几乎完美的多重相互作用环系统可以形成 \{ 向朋友迈步 = 0\.068, 远离敌人迈步 = 0\.006 \}。这看起来非常令人着迷:
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
谢谢 Vitaliy。好发现!我在你的和 Woods 的参数范围之间得到了一些管状结构 (http://pille.iwr.uni-heidelberg.de/~fractaltree01/dancing_spheres.gif)。提示:颜色滑块总是可以调整以获得漂亮的色彩调色板。
[](http://pille.iwr.uni-heidelberg.de/~fractaltree01/dancing_spheres.gif)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
Simon,如果你想处理物理邻域,你可以使用 NearestFunction 获得相当合理的速度,每个时间步创建一次。另一种方法可能是跟踪哪个粒子位于哪个网格扇区中,但额外的编码工作可能会让你从无意义娱乐进入严重痴迷爱好的层次。
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
Daniel,哈哈,是的,这条线很微妙!我的经验法则是,当你开始需要版本控制时,你就不再是在享受乐趣了 :\-\)
- 回复 (https://community.wolfram.com/groups/-/m/t/122095#)
- |
- 标记 (https://community.wolfram.com/groups/-/m/t/122095#)
这是一些基于速度使用 3D 代码进行颜色测试的结果。
(代码块保留原文)
相似文章
图动力系统中受群体智能启发的集体行为生成
本文介绍了受群体智能启发的涌现同步器(SIES),这是一个图动力框架,能够学习可泛化的局部交互规则,以实现可控的集体组织,适用于同步控制和异质图表示学习。
666ghj/MiroFish
MiroFish是一个开源的群体智能引擎,利用多智能体技术创建平行数字世界以预测未来结果。用户上传种子材料,即可获得详细的预测报告和交互式模拟。
Cosine Swarm
Cosine Swarm 全新发布,通过并行 AI 智能体应对长周期、高复杂度的软件开发任务。
Stateful Swarms: 性能提升2倍,成本降低39倍
Irys 推出了 Stateful Swarms,这是一种开源范式,通过结构化黑板内存提升 AI 代理的性能并降低成本。在 Harvey AI 的法律代理基准测试中,它以每任务 1.30 美元的成本达成了 83.74% 的标准通过率,而当前最先进水平为 10.4% 通过率、每任务 50.90 美元。
@0xMorlex: https://x.com/0xMorlex/status/2070079645148451263
从单个AI智能体过渡到协调的智能体集群的详细路线图,涵盖何时拆分、如何无冲突地运行并行子智能体,以及如何使用Claude Code原语在大规模下保持系统稳定。