引言
很久以前,当没有什么比ZX-Spectrum更好时,我记得一个玩具,其中有必要为机器人设置程序,以便它可以在自主导航中击败敌人。 在工作和休息的空闲时间里,我开始开发一个程序,借助从XML格式的文本文件中读取的设置,您可以:
- 创建一个受计算机资源限制的扁平世界。 它从边缘的另一边出现,而不是沿着边缘的冰墙,对于世界内部的物体而言,它似乎是连续的。
- 添加无限数量的固定地热能源
- 以点的形式观察太阳照明,该点模仿随着白天和每年的时间变化而变化的灯具的运动。
- 描述具有不同程度的“挥发性”的矿物,即由于扩散而对表面任意运动的敏感性
- 描述生物体在能量影响下可以进行的物质之间的化学反应
- 当然,要观察“活着的”生物。
与现有游戏的主要区别-在模型中,脚本没有预定义任何结尾。
模型世界
图中显示了世界-一个大的点是阳光(随着时间的推移而移动),两个较小的点是另一种称为地热的能量的来源。 被照亮的表面主要是蓝色的,因为它的每个点都含水。 如果由于扩散,相应元素的相对浓度暂时变得高于平均值,则会出现并消失不同颜色的点。

为了节省内存消耗,每个点上的物质数量以浮点类型存储,该类型提供7个有效位。 对于该模型,在每个水位设置10万个单位,在每个水位设置2万个二氧化碳,以10个单位的氢(即比水少一万倍)设置零氧气和甲烷。 引入模型的物质描述示例如下:
<Element name="CarbonDioxide" color="yellow" volatility="0.12" visibility="true"> <rect left="0" top="0" right="max" bottom="max" amount="20000"/> </Element> <Element name="Oxygen" color="green" volatility="0.12" visibility="false"> <rect left="0" top="0" right="max" bottom="max" amount="0"/> </Element> ...
接下来,描述了在地热能存在下由二氧化碳和氢气形成甲烷和水的反应。
<Reaction name="CO2+4H2=CH4+2H2O" geothermalEnergy="0.00001" solarEnergy="0"> <LeftReagent name="CarbonDioxide" amount="1"/> <LeftReagent name="Hydrogen" amount="4"/> <RightReagent name="Methane" amount="1"/> <RightReagent name="Water" amount="2"/> </Reaction>
具有这种反应的第一个LUCA原生物被种植在一个地热泉中。
<section name="Organisms"> <item name="LUCA" author="DEMI" x="300" y="30" reaction="CO2+4H2=CH4+2H2O"/> </section>
此外,该程序中还包含一个过滤器,以显示包含甲烷的点,并且甲烷污渍开始在身体周围扩散。 第一个单元只能从其自身所在的位置接收物质,并且由于扩散而进行了物质转移。 如果减少可用物质的量,则反应产物的传播速度会急剧下降。

当点增加到一个正方形时,程序将执行近似模式,该模式将显示其中包含的物质和活生物体的列表。 如果打开了用于多个元素的过滤器,则将使用此点上相对浓度最高的元素的颜色对该点进行着色,否则,将始终只能看到最多的水。

选拔
起始材料很丰富,但迟早它们都会耗尽。 如果一个细胞成功地“消化了食物”,那么它就会积累“脂肪”(内部能量),并且可以按分裂繁殖,并在分裂过程中发生变异。 或精疲力尽而死 她的行为也被继承并受到突变的影响,在此期间,细胞自动机参数的微不足道的部分发生了变化。 接下来,当用户仅指示他希望接收哪种突变时,将控制突变引入模型中。 预期的突变将以某种可能性发生,并且新物种必须能够生存才能进一步突变。
因此,我们有一种需要地热能的原生物甲烷。 它定居在地热能区,那些从中扩散出来的单个物种灭绝。 死亡的生物继续占据他们的位置一段时间,然后,如果没有人吃掉它们,它们就会消失。 分别为生物生长而消耗的矿物质并没有实现,当它们腐烂时,它们只是消失了。 开始模拟后,生物体迅速繁殖,占据了地热源周围的整个区域。 一段时间后,死细胞似乎超出了地热能的作用。 有趣的是,有时您会注意到最中心的生物死亡-那些矿物质不足的人在进食时会吃掉所有东西。 该图显示了白色和深褐色的活生物体,蓝色显示了水,粉红色的圆圈显示了感觉到地热能的区域(其强度随距中心的距离而减小)。

世界上描述了几种地热能来源,其中一种是原生生物。 当模拟持续了足够长的时间(几个小时)时,我惊讶地发现附近的信号源也被填充了-一些尸体很幸运地活了下来。
无论世界有多大,如果其中仅发生一种反应,所有的二氧化碳(或氢)迟早都会被消耗掉,此后所有生物都会饿死,留下大量的甲烷。
该图像包括生物体和甲烷(在地热源周围生长的紫罗兰色斑点)的显示,以及来自太阳的背光(第一缕清晨开始射向甲烷点,太阳在右边,而黑色则显示出来,因为仅显示甲烷和生物生物体)并在打开完整照明后打开。

由于矿产资源的分配很差,人口处于生存的边缘,最多只能有几十个人。 该图显示了最初在氢的每个点只有两个反应时的一种选择。

Snapshoot2017.rar文件包含一个为Windows编译的可执行文件及其支持文件。 无需安装,他不会留下任何工作痕迹-要启动它,只需解压缩然后删除即可。 更改默认设置-可以在简单的文本编辑器中打开ThemeAero / template.demi文件。 这些控件在项目Wiki的相应部分中进行了描述。
进一步的计划
根据生物的运气和可变性来进行选择。 现在,我们需要手动进行进化。 向配置文件中添加一个突变-一种具有逆反应的有机体,不需要外部能量,但是效率低得多。 现在,当原生生物分裂时,偶尔会出现一个子物种,这种子物种不再与地热能源有关,而是需要一种重要的生命活动产物。 结果应该是两个物种之间的平衡。
接下来,我们尚未开发太阳能。 在空间的某一点上只能放置一种生物,这使它们不仅在能量和物质上竞争,也在空间上竞争。
结论
目前,主要困难是选择模型中现有对象的比率,以使其保持稳定和有趣。 这是矿物质,能量,速度,代谢反应的体积之比,然后是“生命自然”领域中的任务-如何确保细胞自动机的编码。 更准确地说,我们只需要以适应的形式获取周围世界的数据。 “ DNA”应该是紧凑的,能够进行原子非破坏性突变,既要描述身体的结构(一组细胞-神经系统,受体,肌肉,盔甲等),又要描述其作用的算法。
在遥远的将来,该模型将可以分发-每个用户都有自己的花园,他在该花园中繁殖自己的生物,散布在该地区,邻居的牲畜也可以进入该花园。 陡度可以衡量为一个物种的普遍程度。
对我来说,这个项目是娱乐活动,我不打算获得任何好处。 本文的目的是寻找对这一领域感兴趣的人,他们可以分享他们的最佳实践和想法。
在程序中,从技术上讲,模型是在单独的线程中计算的,可以通过模型运行的时间来估算模型的速度,因此,模型的速度不取决于在屏幕上绘制图片的比例和细节。 还有一个单独的流,可以从模型世界中渲染图片。 它的速度更高,显示的模型点更少-例如,当少量点以高放大倍数显示在屏幕上时,fps比整个世界在宽屏显示器上以最大距离显示时要高。 显示速度限制为60 fps,显示在左上角,没有任何意义。
PS:该模型是GNU GPL版本3(2007年6月29日)下的开源代码, 可供任何想要进行实验或创建fork的人下载 。 已与MSVS2015上的跨平台ClanLib库组装在一起。 OS Windows的二进制文件在存档中-根本不会安装,而只是在解压缩后启动。 我假设针对其他平台进行编译不会引起问题。 可以在合适的文本编辑器中编辑Template.xml,某些文档在wiki部分的github上。