世界运行(人工生命系统模拟)
各等级各架构及核心思想
0.2.1
- 流程图架构:实现于2025年10月。
环境是嵌套的,环境内的指令节点组成流程图,控制该环境运行。
数据节点使得程序修改数据的过程直观(变量有实体)。
指令节点组成的流程图不像表达式图一样需要保证始终为有向无环图,指令节点成环其实就是循环。
指令节点与要操作的数据节点相连,并连向下一个或多个指令节点,仅加入IF指令即可实现分支与循环。数据节点连接不正确的指令节点运行时跳过。
虽然采用解释执行,但其实可以完全编译达到最高性能,只要保证流程图在运行时不可修改流程图本身即可。
- 满树架构:实现于2025年9月。
树的引用就是树当前访问的节点,保留父节点引用即可实现自由跳转,避免了每次修改都需要传入完整路径的问题。
所有树都是合法的表达式,表达式所有节点都是满的,只能交换相同类型的子树。虽然这导致树根无法被修改,但也因此保证了树根只可能是树根类型,可在此存放这棵树的信息。
- 字符串重写系统:实现于2025年9月。
类似《A=B》的字符串重写系统,改进点为:靠转义实现规则自复制程序。
- 栈类型区分的后缀表达式:实现于2025年4月。
启发自Push语言,改进点为:靠约束保证了程序可编译为js而非低效的解释。
(错误的创新)指令统一为int,任何int数组都带一个指针集实现数组树,虽然int数组既是程序也是数据,实现了“代码即数据”,但这导致设计异常复杂,极大增加维护成本,不如原版Push语言。
(弊大于利的创新)使用不可变数据结构,使数组复制为O(1)。但增加了设计复杂度,且导致更高频的数组修改性能降低,属于为了保证仅操作int数组类型及复用int数组的编译结果的妥协。
0.2.0
- 前缀表达式架构+图案渲染:实现于2025年10月。
前缀表达式可以知道下一个未完成节点的类型需求,随机寻找类型符合的指令即可完成表达式的生成。
程序编译为js,在图案这种重复计算上相比解释执行性能提升巨大。
- 线性指令程序:实现于2021年10月。
任何指令组合均为合法程序。类似于仅有指令的汇编。数值对应动作。
0.1.0
各等级简介
0.1:世界运行
0.1.0:
- 下限:世界中个体的程序会自动运行。只要规则恰当(如b3s23或boids或神经网络),就会涌现出因适应程序规则而产生的动态图案。
- 上限:程序固定,每个单元的自由度很低,如只有几个向量,无法表达复杂的内部结构。这导致必须靠大量个体才可能实现通用计算,但由于个体过于简单,要实现精确计算就必须大量冗余,因此在冯诺依曼架构下效率极低。
他人样例:
- 康威生命游戏等大部分元胞自动机规则(可用Golly高效运行)
0.2:生命进化
0.2.0:
- 下限:遗传编程级,生命的基因可变,可自由表达图灵完备程序
- 上限:基因程序没有修改基因本身的自由度,遗传操作只能靠人设计固定算子
他人样例:
- 早期人工生命项目Tierra
0.2.1:
- 下限:在0.2.0的基础上加入基因底层操作的指令,可以实现Quine程序(自产生程序),理论上可以实现任何基因遗传操作算子
- 上限:虽然理论上可以对基因进行任何自操作,但与遗传操作完全固定的遗传编程相比在效果上没有明显优势
他人样例:
- 人工生命环境项目ALIEN
0.3未实现,计划是:通过设计一套兼顾自由、效率、性能与安全的协议,让生命可以自定义世界规则、自创语言,不再局限于人设计的世界结构和基因语言形式
- 下限:生命拥有设计底层语言、设计指令的自由,可以不断迭代改进语言本身的表达效率从而提升进化效率,且从原语言创造新语言的性能不减,始终保持编译级性能,相当于自举。而底层语言足够自由,可以用编译级性能表达绝大部分算法,同时又保证所有操作在类型、指针、资源、权限上安全可控,不会导致整个世界卡死或崩溃,即使是自举的新语言也一定保持相同的安全限制。
- 上限:虽然语言已经维护了极其良好的性质(成功兼顾自由、效率、性能与安全),但仍可能无法进化出有语言学习能力的生命体
他人样例:我找不到,恐怕没有。如果有,欢迎提供
- 0.3 自由、效率、性能与安全的理念可能受到前人设计的影响:自举的META II、将十行代码压缩至一行的APL族语言(如Uiua)、GPU加速的ALIEN、一切可构造的程序皆合法的Coq
0.4未知,可能是:生命体进化出高级的集群智能,涌现出语言学习能力
兼容性测试
论广泛使用的神经网络