哈Ha!
2012年,我写了一篇关于自己爱好的文章-《
宇宙:模拟多细胞生物的进化》从那时起已经过去了将近7年的时间,在此期间我一直致力于该项目的开发。 今天,我想告诉您一些我学到的知识以及我打算如何进一步发展该项目。
动机“大进化”
Cosmos 2012是从观看中获得“沉浸效果”感觉的一个很好的例子,这是构思“模拟GPU上的生活”的想法的起点。
但是,这种演变并没有在那里发生:该过程应该不断发展,并且在发射后几分钟内不会达到某种最终状态。
事实证明,最困难的事情是实现“没有收敛到发展极限”的物种尽可能长的进化,从而产生出各种各样的形式。 然后将有可能探索这些形式,然后真正的兴趣是要运行数天,数周,数月的模拟-等待越来越复杂和发达的研究形式出现。
物理学
您可以想到任何物理学:使用GPU,您可以构建种类繁多的模型,其中包含的元素数量足以实时进行进化过程。 某些“元素”,“原子”,“细胞”相互作用的原理的任何组合都会引起形式的发展,其中一些复杂组织的模拟实际上可以从零开始进行自我组装。
一开始,我想创造一种多细胞的物质,它可以使宇宙直接接触彼此,而无需经过,就像真实生物的细胞组织那样,它们的球状结构相互镶嵌在一起。
生物体必须变得与真实生物体更加相似,并且物理意义出现在其身体的不同结构中。 您可以使用此类细胞“绘制”具有皮肤,四肢,肌肉,腿部和内部器官的物体,并且这些物体实际上将在模拟中存在并发展。
CUDA SDK的一个示例是基于空间网格实现圆形粒子碰撞的实现,从而使粒子只能与附近的粒子进行交互。
我弄清楚了3D示例的工作原理-并编写了2D模拟。
在当时的GTX 580上,这可以实时计算25.6万个粒子。
CUDA + JavaScript
另一个问题是,用JavaScript提出一个宇宙概念对我来说很方便,而只有在GPU上才能进行真正的大规模仿真。
在JS上更方便快捷地大约100倍
在GPU上的速度大约快1000倍。
解决方案是在CUDA上编写粒子交互的物理过程,并提供机会通过JavaScript创建粒子并控制其参数,并集成了当时在模拟中作为脚本语言出现的Google V8引擎。
我添加了将粒子连接到与第一个空间相同的“橡皮筋”的功能。 结果,可以在JS控制脚本中编写代码:
var ball1 = new Ball(); var ball2 = new Ball(); ball1.xy = [0,0]; ball1.rgb = [1,1,1]; ball2.xy = [1,0]; ball2.rgb = [1,1,1]; var link = new Link(ball1, ball2);
屏幕上出现了两个白球,它们之间通过“松紧带”相互连接。
在引擎的这一发展水平上,利用虚拟物理进行实验的有趣机会出现了:
建筑
通过为球添加几个属性,例如键合强度,质量,大小,弹性-我得到了一个JavaScript控制的构造函数,可以在其中绘制成千上万个由具有不同物理属性的细胞组成的生物的结构-所有这些都是由GPU实时计算的。
为了在价格和质量之间取得平衡,选择了八角形的柔软流线型章鱼。
身体的每个元素(中心,四肢)都是通过最少数量的球来实现的,而体积和质量是自然分布的(四肢朝中心加厚的地方),该物质变得更耐用,更重:
动力性
下一步是创造宇宙体的动力。 肌肉很容易制作-足以拉紧爪子之间的球之间的纽带,这引起了肌肉收缩的作用。
起作用的神经元连接到这些肌肉,如果有信号,则肌肉收缩。 每肢两条肌肉-完全可控的二维章鱼。
借助一个小的随机变异的递归神经网络(大约10-100个神经元),并根据标准简单地选择最佳个体,例如“谁可以进一步运动”,您可以为每种个体形状调用必要的运动学:
创世记
另一个积极探索的身体形状是“类六边形”。 这种生物的身体由细胞组成,这些细胞根据接近六边形的非严格晶格从相同大小的球上形成任意形状。
这种形式非常适合研究“结合”的身体形状和运动的同时演化,同时最大程度地利用强度和功能各异的各种类型的细胞进行实验。 例如,宇宙物体可以由形成生物框架的固体细胞和使结构运动的肌肉组成。
随后,当浸没在复杂的栖息地中时,根据这些原理,可以开发出截然不同的生物形式-其中一些将更“装甲”,另一些则被设计为快速移动,另一些被设计为有效攻击等。
狩猎与繁殖
如果教导宇宙互相狩猎,则模拟中的物质量可以保持恒定,而世代生物将彼此继发。
然后可以形成稳定的食物链,并且开始不同物种生物共同进化的大过程。
对于第一个实验,我使用了四种类型的单元格:
- 消化池(有色) -接触另一个宇宙物体时,会咬碎一块
- 装甲(轻型) -不能被咬的坚固的机械笼
- 结缔组织(灰色) -柔软的弹性织物
- 运动电池(深色) -允许空间移动得更快
一旦宇宙吃了足够数量的细胞,它就会“分裂”,在其略微突变的拷贝附近形成。
这样的过程已经在生成具有不同结构和行为的表单:
生境
空冷的空间不是最好的居住地。
要创建虚拟生物群落,您可以使用基本的建筑材料-能够生长的土壤,水,光和植物细胞的颗粒。
土壤颗粒彼此粘在一起,形成坚固的平台。 如果有水颗粒附着在土壤上,则土壤可能会变湿。
在潮湿的土壤上,在良好的光照下,植物可以生长。 植物群是用于动物形式的有机食品的主要来源。
腐烂的动物尸体将无机物质返回到生物群落生态系统。
聚苯乙烯
这是一篇评论文章,其大小不允许对项目开发的所有领域进行一致的披露。
现在,我正在研究一个功能齐全的交互式设计师,它将为您提供在沙盒模式下“玩太空游戏”,设计新型生物,在“上帝模式下”绘制生态系统并实时观察进化的机会。
至于技术部分,进展不会停滞不前:自2012年以来,开发范例已发生了四次变化,从本文所述的CUDA + JS概念逐渐转向完全在GPU端工作并具有自己的存储过程对象语言的GPU ORM模型。
就这样,谢谢您的关注!关注项目的开发并在此处支持开发:
https://www.patreon.com/samadhi_toolbox博客文章仍然很少,但是如果有订阅者,我保证会发布它们,在过去的7年中,我毫不掩饰地积累了很多内容
总结-一点工作见识: