生命游戏

来源:互联网 发布:老子去哪了知乎 编辑:程序博客网 时间:2024/06/10 08:28
 
杜琪峰的脸皮够厚,把20分钟的短片拍成两小时的《放逐》。难道杜的前生是注水猪肉贩子?吴彦祖在《门徒》里因为不堪忍受空虚,不惜吸毒。其实如果他看《放逐》,才知道空虚不算什么。当然,本着领导不喊走,自己不开口的原则,我还是蜷在沙发上,和领导有一搭没一搭地看完了这部大闷片。为了解闷,一边看一边用OpenLaszlo写了一个原始版本的生命游戏,用Conway版的23/3规则,权当熟悉下工作中将要用到的OpenLaszlo。游戏本来简单,OpenLaszlo的文档也组织得不错(可惜没有索引,过于诡异),所以游戏很快写玩。OpenLaszlo还挺好用。它的约束系统和事件模型直观。基于View的GUI系统也简单明白。基本上看看指南就可以上手。Runtime也足够稳定。45x45的20像素见方的网格,200毫秒执行一步模拟,没有停滞的感觉。CPU的消耗稳定在50%(单核50%。双核的CPU上消耗再大也是50%,也许说明OpenLaszlo的运行时不能利用双核)。看着屏幕上不停变幻的黑格子绿格子,又有了大学里第一次写出生命游戏的感觉。高中时读关于混沌的书(好像叫《从混沌到有序》,不确定是不是《第一推动丛书》里的一本),书说到一个大器晚成的牛人深夜在空无一人的实验室看到VAX机器上的生命游戏幻化出各色模式,不禁背脊发凉,觉得好像有人在冥冥中注视着他,操纵着VAX上绿荧荧闪烁的光斑。直到若干年后我进了计算计系,在宿舍里写出自己的生命游戏,第一次亲眼看着简单规则下进化出的各式繁复花样,才真切体会到书里传递的情绪。
 
 
 
更让人惊异的是,早有理论界的老大证明生命游戏和图灵机等价。也就是说,我们能用图灵机计算的东西,也能用生命游戏计算出来。有了理论,自然就有动手狂人把理论实现出来。几年前Damian Conway(Perl黑客,不是发明生命游戏的那个John Conway)到公司演讲,主题就和生命游戏有关。Conway的演讲天才真是少见。一小时多的演讲,听众从头到尾笑得歇斯底里。就在我们的狂笑中,Conway介绍了用Perl实现的一个生命游戏。他接着勾勒出在简单生命游戏的基础上加入辅助的规则,实现一个逻辑非门(NOT gate)。要实现非门,得先实现生命游戏里的一种样式,叫碰撞滑翔机(colliding glider)。再通过这个样式模拟出非门。有了逻辑门,就可以模拟出完整的图灵机了。演示完生命游戏模拟的图灵机后,Conway进一步演示了麦克斯伟妖精的模拟。而模拟也通过生命游戏完成!用天涯那篇小夫妻干架冬雷大表哥文章的套话说,就是听众集体石化。J 这坨著名的思想实验出现在无数有名无名的科普书籍和教材里。比如伽莫夫的《物理世界奇遇记》和第一推动丛书里的《时间之箭》。我的热力学当年就学得很烂。就不啰嗦了。
生命游戏的规则三句话就能说清,却能生出千变万化的样式,模拟复杂的计算。生命游戏背后的理论--细胞自动机--也清晰简洁,却能在多个领域派生出让人惊叹的应用(当然,像Stephen Wolfram那样走火入魔,10年与世隔绝后写出洋洋上千页不靠谱的A New Kind of Science, 把世间一切归结为细胞自动机的魔术,就属于堕落为民科的特例,不予推荐哈)。而我们程序员,能够借助趁手的工具,去探索,体验,应用,和发扬光大这些前人智慧。而且有公司出钱让我们这样自娱自乐。Man!我怎么能不热爱编程这门手艺?
 
 
 
原创粉丝点击