Project Icon

particle-life

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

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

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>

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

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

待办事项:

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

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号