【走廊夜话】大鱼吃小鱼,小鱼吃虾米,虾米啃地皮
Part I:游戏规则
1: 模拟游戏
很久以前我学计算机编程,接触到的第一个大项目,是一个有趣的模拟实验。具体记不清了,大概意思是这样的:
- 一个二维方形矩阵,比如 32x32 吧。1024 个格点,像一个大的国际象棋棋盘;
- 每个格点上有三种可能:1)空的,2)大鲨鱼,3)小鱼;
- 每个时钟回合:这些鱼不管大小,完全随机的,或者原地不动,或者往附近某随机方向挪一格;
- 大鲨鱼吃小鱼,几个回合不吃(没有随机碰上小鱼)会饿死。小鱼不需要吃,只能被吃而死;
- 大鲨鱼和小鱼都会老死,都会生育。小鱼繁殖的比大鲨鱼要快要多。
这大概是最最简单的“生命”模拟游戏了。麻雀虽小五脏俱全:这是一个可以观察生老病死,弱肉强食的生态圈。
2: 随机数 (random number generator)
在计算机理论里,其实是没有“真正的”随机数生成器的。你看上去眼花缭乱的很随机的数,在某种意义上都是事先已经被各种因素决定了的。
为了达到“几乎真正”的随机数,科学家或者程序员们需要用一些外在的因素,比如机房的温度湿度,开始运行时的毫秒数,来"seed"这个随机数生成器。
3: 审计日志 (audit log),状态+交易 (state+transaction), 克隆 (clone)
一个好的程序是有审计日志的。在每一个时间节点,比如大鲨鱼(伪随机的)的挪动,都会被记到审计日志本上。这样如果需要,我们整个的生态圈从最开始到现在的每一步,都可以完美的复现。而每一个决定有不同分支,如果需要的话,通过克隆目前生态圈的状态,可以产生分叉,把不同的分支各自走下去。
4: 人为干涉 (intervention)
模拟开始运行后,程序员基本只是观察者,而不是亲身加入的玩家。要看最后是大鲨鱼把小鱼全吃掉,还是大鲨鱼先全部饿死。但是他可以偶尔干涉一下,比如在哪个空格里凭空多放一只大鲨鱼,从而改变历史进程。
-----------------
Part II: 我们都活在更高维智慧的模拟游戏里
一直有理论认定我们是活在模拟世界里。换句话说,我们是某个更高维智慧的棋盘上的大鲨鱼和小鱼们。
原因很简单:用 Part I 的1,2,3,4,可以比较简单形象的解释我们平常会遇到的很多概念:
- 科学(Science): 就是 1 里面的规则。
- 宿命(Predestination): 1+2。因为随机数永远不是真正随机的,在模拟宇宙被创造的那一刻,所有未来将要发生的,都已经事先被决定了。
- 神迹(Miracle/Divine Intervention): 4 里面的干涉。
- GOD: 程序员。
- 平行宇宙(Parallel Universe): 3 里面的克隆状态,分支运行。
- 光速(speed of light): 游戏的tick cycle.
当两个不同的 simulation 要 merge 在一起的时候,人类就发现了外星人。
当一个simulation 开始的状态不是零,而是另一个 simulation 的灭绝态 snapshot 时,人类在考古时就发现了古代神秘文明的遗迹。
程序员最希望看到什么?不是模拟生物的繁荣,也不是模拟生物的灭绝,而是模拟生物有一天能发现自己是程序员模拟的。这就是宗教。
等等等等。
当然这个理论的最大问题是不能被证伪,所以不是科学,只能拿来当走廊夜话。