旧书有云:发鸠之山,其上多柘木。有鸟焉,其状如乌,文首、白喙、赤足,名曰精卫,其鸣自詨。

  一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海。有诗为证:

  万事有不平,尔何空自苦;

  长将一寸身,衔木到终古?

  我愿平码海,身沉心不改;

  码海无平期,我心无绝时。

  呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠!

  (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...)

  “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍

  “...你是谁,从哪里来又要到哪里去?”鸟人顿了顿接着问道

  元不禁陷入了沉思,哲学问题总是难以快速给出答案。

  精卫XIV打量了会儿元,见其仍沉默不语,更是坚定了自己的想法,又道

  “少年,我看你颈椎清奇,必是万中无一的编程奇才,今日与你有缘,这里有一本《码海之巅》,就赠予你了。”

  “唔,这讲的是什么?”元好奇道。

  “精卫变成了个鸟人,但他没有放弃这个世界的爱,他始终微笑着,终于被一名仁慈的老板发觉,老板把他招聘来做了后端开发,十年以后,精卫终于成为了一名伟大的软件测试师。所以,我们不要放弃希望,天使永远住在你微笑的嘴角。”

  ...

注:码海,充斥着代码的海洋

注:Bug,码海中普遍存在的一种生物

第一章 复杂系统

  Hawaii读者评论:

  “我最近读到一本好书《码海之巅 》,文中提到了如何用元胞自动机模型更好的理解码海中Bug的繁衍模式。”--从事编程20余年的LuisIbara

  “很多编程书读起来味同嚼蜡,大多数的编程课程同样枯燥无聊。本书给出了我目前所知各种编程概念最深入浅出的鸡汤解释。”--不愿意透露姓名的Alice

  “我是一名文学爱好者,最喜欢的就是作者在书中的回忆录,在我看来这实际是一本讲述软件测试员与Bug之间爱恨情仇的书。”--自称文学爱好者的Youkili

  ...

--节选自《码海之巅·抵得上20年工资的3句评论》

  复杂系统的性质

  个体之间存在小范围的联系

  个体的动作是并行的

  系统在整体上会呈现出自发现象

  什么是元胞自动机?

  它能构建随时间推移发生状态转移的系统

  细胞存在于一维或多维网格中

  每个细胞都有一个或多个状态

  每个细胞都有邻居(即邻近的细胞)

  元胞自动机分类

    平稳型:自任何初始状态开始,经过一定时间运行后,元胞空间趋于一个空间平稳的构形,这里空间平稳即指每一个元胞处于固定状态。不随时间变化而变化。
  周期型:经过一定时间运行后,元胞空间趋于一系列简单的固定结构(Stable Patterns)或周期结构(Perlodical Patterns)。由于这些结构可看作是一种滤波器(Filter),故可应用到图像处理的研究中。
  混沌型:自任何初始状态开始,经过一定时间运行后,元胞自动机表现出混沌的非周期行为,所生成的结构的统计特征不再变止,通常表现为分形分维特征。
  复杂型:出现复杂的局部结构,或者说是局部的混沌,其中有些会不断地传播。

图1-1 二维元胞自动机

第二章 生命游戏

  初九日,惊蛰。

  我常常眺望码海,以为会等到一个人。很多年以后,我去了码海,我才知道是我错了。

  很多年以前,我有个绰号叫做疯子,任何人都可以变得疯狂,只要你尝试过什么叫做Debug时的无助。我不会介意其他人怎么看我,我只不过不想看到别人比我更无助。

  又是一个下雨天,我带了把雨伞。可是每次我一个人撑伞走在雨中的时候,我都会难过。

  以前我是不打伞的,因为我感觉自己是一只无脚鸟,只能不停的飞,飞的累了就在风里休息。这样也挺好的,不知道疲倦。

  直到有一天,一个大眼睛的女人和我一起在树下躲雨。

  我们最接近的时候,我跟她之间的距离只有0.01公分,2个小时之后,我爱上了这个女人。

  我相信除了寂寞,缘分是男人和女人之间相爱的另一种原由。寂寞是每时每刻,缘分是不知不觉。

--节选自《码海之巅·时间是座彼岸桥,感情必是两生缘》   

  四边网格-死亡

  竞争:细胞周围存在4个及以上的邻居时,细胞死亡

  孤独:细胞周围“活着”的邻居等于或小于1时,细胞死亡

  四边网格-新生

  处于死亡状态的细胞,当它周围刚好有三个活着的邻居,它也会变为活着的状态

  四边网格-静止

  保持活着:如果细胞是“活着”的,而且周围有2个或3个邻居时,它将继续活着

  保持死亡:如果细胞是“死亡”的,而且邻居数目不等于3时,它将保持死亡状态

图2-1 保持静止的组合

图2-2 交替出现的组合

第三章 扩展属性

  惊蛰,忌骄暴动怒。每年的这个时候,我都会驾着船,去东方的沙洲,见一个人。我知道,她见不到我,会悄悄咬自己的头发。

  “我们在哪里见过吗?”她的船舱里,总有几个奇奇怪怪的伙计。

  “你忘了吗?忘了最好--”那个圆脸蛋的伙计擦了擦桌子,脸色变了变。

  “我们发过誓要杀了你的,不过很不巧,我们现在也不算是敌人。”一个瘦高个,山羊胡子的人答道。我觉得他们都很奇怪,明明是店里的伙计,总说自己是敌人。

  她这里有一种泡了桃花的酒,她说酒叫“醉生梦死”,喝了之后,可以叫你忘掉以前做过的任何事情。

  我很奇怪,为什么会有这样的酒。她说,人最大的烦恼,就是记性太好,如果什么都可以忘了,以后的每一天,都会是新的开始。那你说多开心。

  她陪着我一起喝,喝了之后还会唱曲调很怪的歌曲。

  现在,我只记得两句,丑Bug怪~呀咦呀啊啊~啊啊啊,能否别把灯打开。

--节选自《码海之巅·人生如烟,如云,如风,如梦》

  扩展的属性

  位置:网格中的位置

  颜色:实际显示的ARGB颜色

  大小:单个网格占据的像素大小

  形状:方块、圆形或其他形状

  生命:记录迭代次数

  其他:其他自定义的属性

  扩展属性的特点

  多状态:前述中细胞只有“生”与“死”两种状态,现在它的状态变得极其丰富,比如RGB颜色可表示多达1678万种色彩。

  历史性:在面向对象的生命游戏程序中,如果你用一个数组存放细胞的状态历史,会有怎样的特性?事实上这种特性常用于开发“复杂自适应系统”,它能从历史学习中不断适配和改变规则。

图3-1 保留历史的CA图案

第四章 六边网格

  立春过后,一场清剿码海Bug的战役打响了,我担任测试资源调度员,也就是运粮官。不过没关系,战场上总能听到风声。

  “精卫小贼,我们来取你的命。”我看到山羊胡子和圆脸胖子发出白光,觉得很可笑。自动化测试大军势如破竹,已经攻到了近海,还有这种不怕死的Bug吗?

  他们说他们叫沙洲八怪,但是好奇怪。我杀了一只又一只,为何还是少一只。

  一个小时以后,码海上有一股波浪线直冲云霄。这天是惊蛰,万物复苏,是新的开始。现在,却有一个Bug来找死。

  我的编译器不再提示错误了。甲板前方有一个扶着兵器的女人,一句话也不说,向着我走来。

  我认识时就知道她是Bug,她骗的了编译器,却骗不了我。有时候最了解你的人不是你的朋友,而是你的敌人。

  “回去不好吗?在你的沙洲泡酒,快活一世。我拦不住他们,只能拦下你了。”

  “可我不图一世,只图一时。我是个RuntimeException。”

  “哎--”她抛出的空指针暗器来势汹汹,却没有多少杀意。我看到她的嘴角流血,自己的心也开始莫名的痛了一下。

  我知道所有的悲欢都已化为灰烬,任世间哪一条路,她都不能与我同行。

--节选自《码海之巅·世界上最遥远的距离》

  二维CA空间划分

  三角网格:较少的邻居数目,这在某些时候很有用

  四边网格:适合在计算机环境下进行可视化输出

  六边网格:自然真实,能较好地模拟各向同性的现象

  六边网格的实现

  六边网格依然可以用二维数组存储

  奇数层相对偶数层偏移一定的距离

  奇数层、偶数层对应不同的邻居关系

图4-1 六边网格邻居关系

图4-2 六边网格生命游戏

第五章 CA应用

  当我站在沙洲前,觉得非常的难过,我总觉得,应该是两个人站在这里。

  很多年后,总有些代码,你想写却不知从何写起,总有些人,你想见却又无处找寻,琐碎生活与时间倦怠的逐步侵蚀,感觉日益趋于迟钝,心也由得满不在乎,

  只是记忆不由得你,或闲庭信步的触景伤情,或梦醒时分的黯自惆怅,或只是某个漫不经心的调侃后,那昔日的情景乍然浮现心间,遥远得恍若海市蜃楼。

  其实“醉生梦死”只不过是她跟我开的一个玩笑,你越想知道自己是不是忘记的时候,你反而记得清楚。我曾经听人说过,当你不能够再拥有,你唯一可以做的,就是令自己不要忘记。

--节选自《码海之巅·总在寒夜里想着一个人》

  CA可用来研究很多一般现象  

  通信(Communication)

  计算(Compulation)

  构造(Construction)

  生长(Grain Growth)

  复制(Reproduction)

  竞争(Competition)

  进化(Evolution)

  计算机科学领域的应用

  并行计算:CA可以被看作是并行计算机,从而用于并行计算的研究

  图像处理:CA规则可以用于模拟墨水在纸上的浸散效果及图像的水纹效果

图5-1 CA模拟水墨浸散(50%保留)

图5-2 CA模拟水墨浸散(100%保留)

后记

  “暴风雨就要来了!我得走了。”

  两日后,精卫IV飞到了元的头顶之上。

  “码海中充满了危险,你也最好离开吧,要不要我载你一程?”  

  元一言不发,点了点头。只是,他从另一个世界来,又能去哪里呢?

  ...

附录

  未完待续。预知前情请浏览目录导航。

GitHub开源:EDGameEngine.Visuals.CA

参考书籍:《The Nature of Code》[American] Daniel Shiffman

编程模拟自然(九):元胞自动机相关推荐

  1. matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...

    利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...

  2. python元胞自动机模拟交通_大师兄带你复现 -gt; 难度超高的二维CA元胞自动机模型...

    最近过上了在家躺着就为祖国做贡献的生活. 然而,热心的知友们找我私信,询问"怎么画二维CA(元胞自动机)模型的仿真界面呀?""菜鸟如何做CA仿真?" 刚交完稿子 ...

  3. python元胞自动机模拟交通_结构专栏 | 解析DEFORM软件中的元胞自动机法

    点击上方蓝色字体,关注我们 导语 金属材料的性能取决于内部的微观组织结构,而好的材料性能和价格是产品最大的优势.随着现代物理冶金.热成形技术.热处理技术和计算机技术的兴起与发展,使预测和控制金属材料热 ...

  4. 【元胞自动机】元胞自动机模拟交通事故道路通行量【含Matlab源码 356期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  5. 【元胞自动机】元胞自动机交通流模拟仿真【含Matlab源码 1252期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  6. 【元胞自动机】元胞自动机模拟交通流【含Matlab源码 355期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 元胞自动机-森林火灾模拟

    引入: 元胞自动机,英文名及缩写:cellular automata,CA.最初是由冯诺依曼在二十世纪五十年代为模拟生物自保的自我复制而提出的,但是当时并未受到重视.后来才逐渐发展起来,著名的&quo ...

  8. 【元胞自动机】基于matlab元胞自动机模拟交通路况(含超车)【含Matlab源码 2389期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  9. 【元胞自动机】元胞自动机模拟SEIR传播模型【含Matlab源码 2156期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.1970 年, 剑桥大学的约翰 · 何顿 ...

最新文章

  1. 通过IDoc来实现公司间STO场景中外向交货单过账后自动触发内向交货单的功能 – Part 2
  2. 继谷歌苹果微软也被曝人工收集用户语音数据,微软公开承认了
  3. php读取数组修改内容,php 数组如何修改值
  4. Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
  5. 【最全最详细】publiccms实现将公共部分提取成单独模块引入
  6. jenkins 部署问题
  7. 2017 JavaScript 调查报告概述
  8. Epx5 MSF基础应用 20154326杨茜
  9. sprintboot 后端将音频流写入到前端播放_freac for mac(音频和CD格式转换器)
  10. elisa标准曲线怎么做_ELISA标准曲线制作方法.pdf
  11. 哈夫曼编码+python实现
  12. Windows代替touch命令
  13. linux缺页异常处理--内核空间
  14. sqlserver 2016 安装
  15. 按键精灵java_Java 按键精灵
  16. FME模板兴趣班第二期任务小结
  17. kettle 使用excel模板导出数据
  18. JustinMind原型制作工具
  19. 疑难杂症、易混淆、易遗忘的知识点记录
  20. android锁定屏幕通知_如何在Android锁定屏幕上隐藏敏感通知

热门文章

  1. 洛谷P4287 [SHOI2011]双倍回文 题解
  2. 在脉脉匿名发消息,半小时被拼多多开除!
  3. 英伟达带给投资者的痛苦才刚刚开始
  4. K3服务器端可用电脑系统,k3服务器 客户端配置
  5. 手机上的悬浮球原来这么好用,我也是今天才知道,看完涨知识了
  6. 第一届“百度杯”信息安全攻防总决赛
  7. 中国高端床上用品市场报告发布,分析整体市场规模、增速
  8. vue图片路径错误,展示默认图片
  9. Python安装教程(Windows10)
  10. markdown 对字体大小进行调整