数字生命
思路整理
我对市面上所有的游戏,注意,是所有的游戏,我都不满意。
因为我认为:
游戏里应该是一个真正的的世界。无论你去或者不去,它都在哪里,在前进。
游戏里的生物,也应该是活生生的。它们应该能发展,能进化,能思考。
人们玩游戏,就像是去穿越去异世界进行发掘宝藏的大冒险一般,能收获满满。
游戏是人成为神的必经之路。人类在游戏中创造世界,最后发现自己。
既然没有这么一款游戏,那我也只好自己做出来了。
整体设计思路:
通过简单规则,在大量运算后生成的复杂结果,并且让普通人也可以参与进这一过程
类似于细胞自动机,遗传算法等等。
但是因为玩家毕竟是来玩游戏的,所以出于对用户理解性的考虑,所以没法完全放飞自我,必须要考虑到玩家面对一堆无法参考无法理解的生物淤泥时候,肯定是没有耐心的。
简介
游戏应该是一个真实世界,游戏里都是活生生的生物。
因为缺乏现有词汇,我很难简单的概括,我只能描述出我理想中游戏的游戏。
游戏中的每一个生物,都是独一无二的,不是开发者设置好的,而是一步步进化来的,有历史有未来,有无限的可能性。
打个比方:
电脑中有一个世界,世界具备某些类物理现象,世界中有可以繁殖变异的数字生命。
这些数字生命会有性/无性繁殖后代,后代的结构会变异。它们可以互相厮杀、交配、帮助。。。
玩家可以通过放置贡献算力,来游戏世界快速演化,比如说,现实中一天就是游戏中一百年。
游戏中有一系列现象,生命的进化就是更好的利用这些现象,适应环境竞争物资繁殖后代,比如说有水,呼吸器官,物理碰撞等现象,生物就可以进化出更大的水下储气结构,可以把敌人推到水里,按住淹死,从而进化出一种特殊两栖猎食者。
生物除了具备生理结构,还具备大脑(我偏好neat神经网络结构),进化不仅仅是生理的,还是智力层次的。
这一套框架拓展起来有很多可玩性,但是我身为开拓者,暂不考虑玩法可玩性之类的,先集中注意力到实现上,毕竟没有实物,其他都是空谈。
但注意,我们的游戏是一直挂机放置才能让生物进化的,也就是说要长时间让一个游戏世界全地图运算,是非常消耗算力的。
如何节约算力也是很关键的。
进化
每个生命可以繁殖后代,后代会产生变异。
生命生存会消耗资源,杀死他人可以获得资源。
物理现象
现实中,所有的生命啊技术啊,几乎任何东西,细细拆分下去,最后的本质都是现象。
比如说:物体通过形变可以蓄积能量,这是弓箭,肌肉,地震等等事物的本质之一。
比如说:压强与受力面积的关系,这是爪子,刀剑,子弹等等的本质之一。
道生一,一生二,二生三,三生万物。而现象,就是一二三。
但这有个问题,那就是三生万物这个过程,是要消耗算力的。自然本身有无限的算力,而我们哪怕用超级计算机,用最先进的算法,模拟几个原子都很吃力。
我们无法在电脑中复现三生万物,只能直接展示万物,并且笨拙的把每个物体都定义一下。
比如说你在游戏中会看见弓箭命中远处物体,那是直接代码定义好的。很难看见材料的形变蓄力,因为相比于直接定义出弓箭,吃力不讨好。
所以我在前面一直说,现在的游戏里的世界,都不是真正的世界,而只是对人眼看见世界的照搬。
现象,排列组合成现实,
现象的数量质量,决定了可能性的边界。
拳皇游戏中,只存在上下左右ABCD血量敌我攻击防御等现象,在这个世界里,你再怎么折腾,你也不可能帮助他人,不可能搭建城堡,不可能画画。因为世界的现象中不包含这些行为的基本要素。这个世界不包含盖房子这种可能性。
但是如果拳皇游戏中增加一个现象,可以通过按A键在正下方产生一格像素物体,那么你足够有耐心就完全可以搭建一栋房子。
通过遗传算法和神经网络,可以模拟出生命的行为,比如说让死板的AI在拳皇世界中天下无敌。
但是想要真正的成为具备无限可能的生命,就必须要具备由现象堆叠起来的生命结构。
层级
关于模拟世界,模拟生命,有以下几个层次:
- 空间级模拟
- 原子级模拟
- 分子级模拟
- 细胞级模拟
- 组织级模拟
- 器官级模拟
- 个体级模拟
空间级
(只具备理论上可能性)
理论是参考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的预演。
可以参考细胞自动机,但是细胞自动机展示的,是简单的规则演化复杂的世界,而我们要展示的,是简单的复制变异,演化复杂的生命。
我们可以把这个混沌海,作为数字生命的一个前置练手。
遵循细胞自动机的思路
结构
点线结构
本质上其实是神经网络的可视化,物理化。然后对环境数据,竞争数据的处理优劣,决定后代繁殖数量。
生命由点和线构成,
然后有两种思路:节点+骨骼,点线+骨骼+肌肉。
前者通过配置关节实现,后者是铰链关节+弹簧关节,
打算两种都做demo,看看那种运行效率高。
点可以进行信息接受、处理、存储、发送。
线可以进行收缩运动、信息传递。
基本点的设计:
信息输入:视觉,触觉(掉血时候向后传信)
信息处理:内置一个函数,对各个入参进行计算,大于x,则触发功能。
功能触发:向后发信息,收缩线,生长,分裂,回收等等
有一个问题:每个点,只执行单个功能,还是执行多个功能
执行单个功能,代码实现比较容易,也比较简洁。
缺点是节点数量会极大增加,可能一个简单的功能,就需要几十上百个节点,而且每个节点都具备碰撞体。
目前我比较倾向于单一功能。但是具体哪种比较好,需要demo验证
实现生长不难,难的是让它的结构自然具备生长能力,而不是人为设计出的生长功能
生长,分裂,回收。这些功能,我在思考是作为专门的功能点,还是做成功能。
分裂功能:单体分裂繁殖用的点,每次触发繁殖点时候,会根据繁殖点中信息,让整个生命的某些线进行断裂处理,将整个生命分为两个生命。
回收点:可以将和回收点相连的点线,全部无损的化为能量,让其他点吸收。(设计目的是进行变态发育,理论上生命可以频繁进行变态发育来切换自身形态)
点和线可以组成一个神经网络。
每个生命,既可以当做一个具备神经网络的AI,也是一个具备运动碰撞实体的游戏生物。
(感觉就像是把一个神经网络,每个点线都赋予空间坐标,扭成一个可以运动的生命结构)
点和线都具备血量。依靠动量碰撞进行攻击。
点有硬度、生长两个互斥的属性,硬度决定受伤掉血,生长决定长出新点线的速度和消耗。 硬度越高,则点生长越慢,线伸缩越差。 点的硬化密集排布,可以做到骨盾类似的结构
关于生长,节点可以消耗能量,在自己坐标位置的x,y,z处生成一个节点。
有一个设计问题,
点线是否需要具备级别?
点线可以消耗能量生长。越高级的点血量越高,可以存储更多信息,可以连接更多的线。
线等级越高就越长,伸缩能力越强。
又或者全部一视同仁,点全部一样,方便计算。
做升级功能的坏处是,会增加人物设计程度,而人为的设计往往是最差的。
他们互相攻击时候,每掉落一部分身体,就会缺失一部分神经网络。
不过我相信它们会进化出萎缩硬化的脑组织专门用来打架
有一些特殊的点线:
透明点,无碰撞体,可以作为视觉触手
透明线,无碰撞体,牵引透明点
死亡:血量归零的点,会根据血量,按比例化为能量掉落在地,接触一段时间后会吸收。点可以储存能量。
(能量回收比例一定低于100%)
点线具备颜色
特殊视觉:信息素,某种AI专用的大量信息传输用的方式。
环境规则:
原地不动的就会掉血。
线的缩放会消耗能量,消耗能量时候会恢复血量。
特殊算法:繁殖算法,有性繁殖,无性繁殖,自我构建繁殖