每个生命体实际上都是一个小型的“图灵机”,并且这一群图灵机可以通过遗传变异而进化。
内部结构:一群参数包括拥有的能量值、寿命、当前坐标、当前面对方向等等。一个可变化长度的规则表rules,这个规则表既可以当作指导生命体运动的程序规则,又可以当作遗传的数据(染色体)被遗传变异。
如何行动:每个仿真周期,生命体仅仅读入它所面对的前方三个方格情况,如果0是空格,1是有食物的方格,那么,每次生命体读入的就是一个010,001这样的三位长的二进制字符串。生命体还有一些被编码成0,1,2,3,4……的内部状态,这样根据读入的二进制串和内部状态,生命体会查找它的规则表rules,找到匹配的一条规则,得到输出动作(0,1,2,3,4)和下一时刻的状态。其中动作(0,1,2,3,4)都是动作的编码,它们分别表示前行、左转、右转、繁殖、播种,也就是说每个生命体在每个周期所采用的动作完全是由它们的规则决定的。其中繁殖就是在当前位置诞生一个新的生命体,并且父亲的所有状态都会遗传给后代。
环境规则:如果生命体所在的世界位置有食物,那么就会把这个食物吃掉,吃到食物就可以增加生命体的一定量的能量值。另外,生命体的每一种行动都会对应不同的能量消耗值,而新出生的生命体都会从它的父亲那里得到一部分能量值,如果一个生命体的能量消耗殆尽,或者这个生命体的寿命超过了最大寿命就会死亡。为了限制生命体的繁殖,每个生命都有一个最大繁殖数量。
遗传规则:当每次遗传的时候,父亲会把规则表完全遗传给后代,但同时在遗传的过程中会以概率muteP发生变异,并且,规则表的长度也会以lenP的概率发生变化(既可能增长也可能缩短)。因而,生命体可以通过遗传变异来给自己编程,并且由于这个模型是与图灵机等价的,所以原则上讲,任意复杂的程序都能够被编出来。 |