数字生命

来自科幻设定百科
晦暗天明讨论 | 贡献2023年2月17日 (五) 16:57的版本
编写者


思路整理

我对市面上所有的游戏,注意,是所有的游戏,我都不满意

因为我认为:

游戏里应该是一个真正的的世界。无论你去或者不去,它都在哪里,在前进。

游戏里的生物,也应该是活生生的。它们应该能发展,能进化,能思考。

人们玩游戏,就像是去穿越去异世界进行发掘宝藏的大冒险一般,能收获满满。

游戏是人成为神的必经之路。人类在游戏中创造世界,最后发现自己。

既然没有这么一款游戏,那我也只好自己做出来了。

整体设计思路:

通过简单规则,在大量运算后生成的复杂结果,并且让普通人也可以参与进这一过程

类似于细胞自动机,遗传算法等等。

但是因为玩家毕竟是来玩游戏的,所以出于对用户理解性的考虑,所以没法完全放飞自我,必须要考虑到玩家面对一堆无法参考无法理解的生物淤泥时候,肯定是没有耐心的。

简介

游戏应该是一个真实世界,游戏里都是活生生的生物。

因为缺乏现有词汇,我很难简单的概括,我只能描述出我理想中游戏的游戏。

游戏中的每一个生物,都是独一无二的,不是开发者设置好的,而是一步步进化来的,有历史有未来,有无限的可能性。

打个比方:

电脑中有一个世界,世界具备某些类物理现象,世界中有可以繁殖变异的数字生命。

这些数字生命会有性/无性繁殖后代,后代的结构会变异。它们可以互相厮杀、交配、帮助。。。

玩家可以通过放置贡献算力,来游戏世界快速演化,比如说,现实中一天就是游戏中一百年。

游戏中有一系列现象,生命的进化就是更好的利用这些现象,适应环境竞争物资繁殖后代,比如说有水,呼吸器官,物理碰撞等现象,生物就可以进化出更大的水下储气结构,可以把敌人推到水里,按住淹死,从而进化出一种特殊两栖猎食者。

生物除了具备生理结构,还具备大脑(我偏好neat神经网络结构),进化不仅仅是生理的,还是智力层次的。

这一套框架拓展起来有很多可玩性,但是我身为开拓者,暂不考虑玩法可玩性之类的,先集中注意力到实现上,毕竟没有实物,其他都是空谈。

但注意,我们的游戏是一直挂机放置才能让生物进化的,也就是说要长时间让一个游戏世界全地图运算,是非常消耗算力的。

如何节约算力也是很关键的。

进化

每个生命可以繁殖后代,后代会产生变异。

生命生存会消耗资源,杀死他人可以获得资源。

物理现象

现实中,所有的生命啊技术啊,几乎任何东西,细细拆分下去,最后的本质都是现象。

比如说:物体通过形变可以蓄积能量,这是弓箭,肌肉,地震等等事物的本质之一。

比如说:压强与受力面积的关系,这是爪子,刀剑,子弹等等的本质之一。

道生一,一生二,二生三,三生万物。而现象,就是一二三。

但这有个问题,那就是三生万物这个过程,是要消耗算力的。自然本身有无限的算力,而我们哪怕用超级计算机,用最先进的算法,模拟几个原子都很吃力。

我们无法在电脑中复现三生万物,只能直接展示万物,并且笨拙的把每个物体都定义一下。

比如说你在游戏中会看见弓箭命中远处物体,那是直接代码定义好的。很难看见材料的形变蓄力,因为相比于直接定义出弓箭,吃力不讨好。

所以我在前面一直说,现在的游戏里的世界,都不是真正的世界,而只是对人眼看见世界的照搬。

现象,排列组合成现实,

现象的数量质量,决定了可能性的边界。

拳皇游戏中,只存在上下左右ABCD血量敌我攻击防御等现象,在这个世界里,你再怎么折腾,你也不可能帮助他人,不可能搭建城堡,不可能画画。因为世界的现象中不包含这些行为的基本要素。这个世界不包含盖房子这种可能性。

但是如果拳皇游戏中增加一个现象,可以通过按A键在正下方产生一格像素物体,那么你足够有耐心就完全可以搭建一栋房子。

通过遗传算法和神经网络,可以模拟出生命的行为,比如说让死板的AI在拳皇世界中天下无敌。

但是想要真正的成为具备无限可能的生命,就必须要具备由现象堆叠起来的生命结构。

层级

关于模拟世界,模拟生命,有以下几个层次:

  1. 空间级模拟
  2. 原子级模拟
  3. 分子级模拟
  4. 细胞级模拟
  5. 组织级模拟
  6. 器官级模拟
  7. 个体级模拟

空间级

只具备理论上可能性

理论是参考Stephen Wolfram的新物理模型,思路则是一样 “通过简单规则涌现出复杂结果”。

其理论证明了简单的规则下,如何演化出空间时间结构。理论上可以演化出真正的宇宙。

但是算力消耗,我觉得量子计算机都撑不住。

原子级

只具备理论上可能性

地球上生命全部都是碳基生命,碳元素是所有元素中化合物种类最多的。碳就像是一个万能积木一样,可以搭配出无数种结构的化合物。

从元素周期表出发模拟生命,可以模拟本宇宙生命的所有可能性。

分子级

只具备理论上可能性

组成碳基生物的是DNA、RNA和二十种氨基酸这些大分子结构。

碳元素啊,DNA啊,氨基酸啊,这些,都可以看做某种现象。它们具备优秀的复杂性稳定性,具备无限的可能性,而进化和智力,则是从无限的可能性中,寻找到某些适应环境的可能性。

从DNA、RNA、氨基酸出发模拟生命,可以模拟出地球生命的所有可能性。

细胞级

1完全模拟现实

有实验室模拟几种细胞的结构和运动,在计算机中测试这些细胞的各种的排列结构,最后在现实中用细胞组装成一个生物机器人,可以做到在血管中游动,搬运少量物质到特定目的地。

但是这种模拟是有限的,因为人类对细胞的理解是很有限的,完全模拟现实,力不从心。

2自定义细胞

从这一步开始,我们就没必要完全按照现实来走,而是自己定义。

比如说,将细胞定义成在合适环境下可以复制变异自己,可以根据身周其他细胞的行动而做成行动。然后观察其演化结果。

组织级

在细胞级往上,就不是直接模拟现实了。而是抽象的模拟

组织的一个特点,单个组织提供单一功能。比如说肌肉组织可以拉伸,神经组织可以传递电信号。单个的组织毫无用处,但是组织可以组合成有意义的器官。

游戏常见的,是mc里的红石系统。一些游戏里的电路系统。

特点是自由度极高,上限极高,但是普通人压根玩不转。

案例:

游戏 “进化小车”,简单遗传算法

器官级

器官的特点,是每个器官都可以有一个独立的可以直接使用的功能

比如说肺部器官,手部器官。

游戏常见的,是一些可以自由搭配的造船游戏,造车游戏。比如说提供轮子,发动机,护盾等等。

这些游戏,玩家用一大堆零件组装成一个飞船,有的游戏甚至会不同部分血量单独计算。

特点是自由度尚可,下限极高,普通人随便凑合也能造出点东西。

个体级

这就是普通动作游戏中最常见的情况,直接用血量代表一个生物,用攻击防御等数据量化个体。

优点是开发简单,符合玩家认知。

缺点是根本没有自由度,根本谈不上是创造世界,创造生命。

开发思路

虽然我很想做原子级模拟,但是很遗憾,大家谁都没有量子计算机。

目前有几种方案:

方案一:结合细胞级、组织级和器官级两个特点,

简单地说,游戏提供一些基础组织零件,可以玩家搭配/游戏演化成某些器官,而游戏的生物则是这些器官构成的。

类比一下,游戏提供电路板螺栓等组织零件,组合成轮子、发动机、外壳、激光枪等等器官。然后这些器官组合出一个机器人去战斗。

缺点:生物的进化,仅仅是将组织和器官的排列组合,进化出更有效的器官,更强大的个体。AI不是这个世界的真实大脑,而是一种灵魂。繁殖是写死的代码

不推荐。

方案二:游戏内编程

方案一中,AI的结构和复制,都是独立于游戏世界之外的代码,就像是灵魂独立于物质世界一样。这样子,AI无法产生本质进步,仅仅是更加擅长战斗而已。

但是如果我们把AI的思维结构,也放到这个世界上呢?(类似虚拟机)

举个例子,我们在 我的世界 这个游戏中,用红石电路做出一个时钟,这个时钟也许简陋,但是玩家可以在游戏中破坏或者改进它。但如果这个时钟是写死在代码里,玩家就根本无法改变它。

我们要在游戏场景内,做出实时可变的某种结构,而这种结构,就是生命本身。

它类似于编程,但是并不是给人类准备的,它最重要的是可能性与复杂度。

方案二有三个子方案:

方案2.1:仿虚拟机仿软件

设计一种特殊的游戏世界里的编程代码,特点是高度容错高度复杂可变异可繁殖。

给每个生物提供一定量的虚拟机硬件配置,每个生物都是一段代码,繁殖后代就是复制程序分发硬件,变异就是改变代码。

方案2.2:仿DNA仿蛋白质

设计出一种可以自复制的复杂结构,分子级模仿。

几乎相当于从走一遍生命诞生之路。

但这种结构是什么呢?没人知道。

PS:不看好这个方案,可行性是有的,思路也有一点,但是可玩性几乎没有,而且消耗算力过大。

方案2.3:混沌海

这不是一个独立的方案,而是一个尝试性补充。

假设世界中没有生命,至少没有我们设定好的,我们认定的那种生命。

整个世界全都是某种蠕动的复制自我的奇特物质结构。这是一种原始的半生命。

整个世界就像是一片混沌海,我们没有明确的目的性,就是单纯的好奇会打捞出什么奇奇怪怪东西。

关于这种原始半生命,有两种方案

1是某种结构,比如说生命游戏的煮汤。

2是某种代码,比如说规定一些自复制的代码。

目前倾向于第一种,因为第二种完全可以用之前的方案一。

可以说第一种是对方案2.2的预演。

可以参考细胞自动机,但是细胞自动机展示的,是简单的规则演化复杂的世界,而我们要展示的,是简单的复制变异,演化复杂的生命。

我们可以把这个混沌海,作为数字生命的一个前置练手。

遵循细胞自动机的思路

结构

点线结构

生命由点和线构成,

点是关节,线是肌肉。


点可以进行信息接受、处理、存储、发送。

线可以进行收缩运动、信息传递。


基本点的设计:

信息输入:视觉,触觉(掉血时候向后传信)

信息处理:内置一个函数,对各个入参进行计算,大于x,则触发功能。

功能触发:向后发信息,收缩线,生长,分裂,回收等等


有一个问题:每个点,只执行单个功能,还是执行多个功能

执行单个功能,代码实现比较容易,也比较简洁。

缺点是节点数量会极大增加,可能一个简单的功能,就需要几十上百个节点,而且每个节点都具备碰撞体。

目前我比较倾向于单一功能。但是具体哪种比较好,需要demo验证


实现生长不难,难的是让它的结构自然具备生长能力,而不是人为设计出的生长功能


生长,分裂,回收。这些功能,我在思考是作为专门的功能点,还是做成功能。

分裂功能:单体分裂繁殖用的点,每次触发繁殖点时候,会根据繁殖点中信息,让整个生命的某些线进行断裂处理,将整个生命分为两个生命。

回收点:可以将和回收点相连的点线,全部无损的化为能量,让其他点吸收。(设计目的是进行变态发育,理论上生命可以频繁进行变态发育来切换自身形态)


点和线可以组成一个神经网络。

每个生命,既可以当做一个具备神经网络的AI,也是一个具备运动碰撞实体的游戏生物。

(感觉就像是把一个神经网络,每个点线都赋予空间坐标,扭成一个可以运动的生命结构)


点和线都具备血量。依靠动量碰撞进行攻击。

点有硬度、生长两个互斥的属性,硬度决定受伤掉血,生长决定长出新点线的速度和消耗。 硬度越高,则点生长越慢,线伸缩越差。 点的硬化密集排布,可以做到骨盾类似的结构


关于生长,节点可以消耗能量,在自己坐标位置的x,y,z处生成一个节点。


有一个设计问题,

点线是否需要具备级别?

点线可以消耗能量生长。越高级的点血量越高,可以存储更多信息,可以连接更多的线。

线等级越高就越长,伸缩能力越强。

又或者全部一视同仁,点全部一样,方便计算。

做升级功能的坏处是,会增加人物设计程度,而人为的设计往往是最差的。


他们互相攻击时候,每掉落一部分身体,就会缺失一部分神经网络。

不过我相信它们会进化出萎缩硬化的脑组织专门用来打架


有一些特殊的点线:

透明点,无碰撞体,可以作为视觉触手

透明线,无碰撞体,牵引透明点


死亡:血量归零的点,会根据血量,按比例化为能量掉落在地,接触一段时间后会吸收。点可以储存能量。

(能量回收比例一定低于100%)

点线具备颜色


特殊算法:有性繁殖算法


环境规则:

原地不动的就会掉血。

线的缩放会消耗能量,消耗能量时候会恢复血量。