particle-life

particle-life

基于简单规则的粒子生命模拟系统

Particle Life Simulation是一个模拟原始人工生命的开源项目。它基于粒子间简单的吸引或排斥规则,生成复杂的自组织生命模式。项目支持C++、JavaScript和Python,并提供在线演示。通过调整参数,可探索多样化的模式,展示简单规则如何产生复杂行为。该项目为复杂系统和自组织现象研究提供了直观的工具。

粒子生命模拟人工生命自组织模式复杂系统GitHubGithub开源项目

GitHub 仓库大小 GitHub

粒子生命模拟

这是一个简单的程序,用于模拟原始的人工生命。通过类似原子的粒子之间简单的吸引或排斥规则,产生复杂的自组织类生命模式。除去图形界面元素,代码不到一页。视频教程和详细说明请见下方。

了解更多(YouTube 视频教程):

https://youtu.be/0Kx4Y9TVMGg

在线演示(JavaScript 版本):

点击这里查看实时演示(JavaScript):

界面(C++ 版本)

示例结果

一些有趣的模式复现:

复现这些模式时,参数不需要完全精确。获得有趣模式的最佳方法是先尝试随机参数探索,一旦发现有趣的模式,就尝试逐步微调。为避免陷入局部最优,可以偶尔进行大幅度的参数跳跃。通过这种方式,有趣且不同的模式将不断涌现。

使用方法:

下载此仓库。解压文件后,进入 /particle_life/bin/ 文件夹,点击 particle_life.exe

代码:

源代码有 C++、JavaScript 和 Python 版本。 观看此 YouTube 视频获取详细教程:https://youtu.be/0Kx4Y9TVMGg

如果你想为 C++ 程序做出贡献,核心算法位于 "/particle_life/src/ofApp.cpp" 文件的前 100 行。其余部分是由 openFrameworks 库提供的图形界面组件和渲染控制,这是一个开源且易用的图像渲染库。

首先,下载此仓库,然后从这里下载 openFrameworks 库:https://openframeworks.cc/。使用 openFramework 的 projectGenerator 并将 /particle_life/ 文件夹导入到项目中。

或者,生成一个新的 openFramework 项目并添加 ofxGui。一旦项目文件生成,用这里提供的 /src/ 文件夹替换原有的文件夹。

现在你可以在你的机器上编译 C++ 代码了。

其他移植版本:

JavaScript 代码就像这样简单:

另外,查看 particle_life.html 文件以获取更优化的版本 - 感谢那些做出贡献的人。

<canvas id="life" width="500" height="500"></canvas> <script> //Hunar Ahmad @ brainxyz m = document.getElementById("life").getContext("2d"); draw = (x, y, c, s) => { m.fillStyle = c; m.fillRect(x, y, s, s); }; atoms = []; atom = (x, y, c) => { return { x: x, y: y, vx: 0, vy: 0, color: c }; }; random = () => { return Math.random() * 400 + 50; }; create = (number, color) => { group = []; for (let i = 0; i < number; i++) { group.push(atom(random(), random(), color)); atoms.push(group[i]); } return group; }; rule = (atoms1, atoms2, g) => { for (let i = 0; i < atoms1.length; i++) { fx = 0; fy = 0; for (let j = 0; j < atoms2.length; j++) { a = atoms1[i]; b = atoms2[j]; dx = a.x - b.x; dy = a.y - b.y; d = Math.sqrt(dx * dx + dy * dy); if (d > 0 && d < 80) { F = (g * 1) / d; fx += F * dx; fy += F * dy; } } a.vx = (a.vx + fx) * 0.5; a.vy = (a.vy + fy) * 0.5; a.x += a.vx; a.y += a.vy; if (a.x <= 0 || a.x >= 500) { a.vx *= -1; } if (a.y <= 0 || a.y >= 500) { a.vy *= -1; } } }; yellow = create(200, "yellow"); red = create(200, "red"); green = create(200, "green"); update = () => { rule(green, green, -0.32); rule(green, red, -0.17); rule(green, yellow, 0.34); rule(red, red, -0.1); rule(red, green, -0.34); rule(yellow, yellow, 0.15); rule(yellow, green, -0.2); m.clearRect(0, 0, 500, 500); draw(0, 0, "black", 500); for (i = 0; i < atoms.length; i++) { draw(atoms[i].x, atoms[i].y, atoms[i].color, 5); } requestAnimationFrame(update); }; update(); </script>
</br>

相关主题: 粒子生命模拟、 原始汤 - 进化、 康威生命游戏、 细胞自动机、 自组织模式、

这个项目的灵感来自Jeffery Ventrella的Clusters http://www.ventrella.com/Clusters/。我无法访问Ventrella的代码,但我猜这个项目与其他粒子生命项目的主要区别在于我没有实现碰撞检测,这使得实时模拟数千个粒子成为可能。此外,我添加了GUI控件来实时更改参数,从而可以轻松微调和探索,因此,我能够发现一些从未见过的模式从一些极其简单的关系模型中涌现出来。 这里的代码可能比其他人工生命代码简单一个数量级,因为我最初编写这段代码仅仅是作为非程序员和普通观众的教育材料,以证明复杂性可以从简单性中产生。

待办事项:

  1. 添加保存和加载参数的功能(这样人们就可以轻松分享他们发现的有趣模型)
  2. 能够添加更多粒子类型(目前固定为四种粒子类型)
  3. 目前,最大的瓶颈是嵌套的for循环(计算所有粒子之间的成对距离),使计算复杂度呈二次方增长。如果我们能找到解决方法就太棒了。
  4. 作为第3点的替代方案,计算成对距离是极易并行的,因此可以在GPU上计算。
  5. 添加调整屏幕大小的功能,并改进边界检查,因为许多快速移动的粒子可能会逃离屏幕边界。
  6. 添加更直观的UI,以便对参数进行更精细的控制。
  7. 添加一个随机化按钮,或者更好的是,有一个简单的元规则来持续和递归地改变初始规则。这样,模式就永远不会陷入局部最大值,并且会不断变化!
  8. 更好的微调方法是使用进化算法来选择和优化参数,但需要为此编写一个适应度函数。我目前不知道适应度函数在这个程序的领域中对应什么。在我们的世界中,适应度函数是竞争和适者生存。然而,在这里,我们微调和选择产生有趣模式的参数,但"有趣"这个词说起来容易,定义起来难!

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多