zoukankan      html  css  js  c++  java
  • 编程模拟自然(九):元胞自动机

    序·精卫填海篇

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

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

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

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

      元不禁陷入了沉思,哲学问题无法快速给出答案。

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

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

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

      “精卫变成了个鸟人,但他没有放弃这个世界的爱,他始终微笑着,十年以后,精卫终于成为了一名伟大的软件测试工程师。所以,我们不要放弃希望,天使永远住在你微笑的嘴角。”

      ...

    码海,充斥着代码的海洋

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

    第一章 复杂系统

      Hawaii 读者评论:

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

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

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

      ...

     --节选自《码海之巅·读者评论》

      复杂系统的性质

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

      个体的动作是并行的

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

      什么是元胞自动机?

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

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

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

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

      元胞自动机分类

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

    图1-1 二维元胞自动机

    第二章 生命游戏

      初九日,惊蛰。

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

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

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

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

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

      我们最接近的时候,我跟她之间的距离只有 1 像素,2 个 Ticks 之后,我爱上了这个女人。

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

     --节选自《码海之巅》

      四边网格-死亡

      竞争:细胞周围存在 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% 保留)

     

    后记

      “暴风雨就要来了!我得走了。”精卫 XIV 向元告别。

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

      ...

    附录

      在线演示:CA - GameOfLife

      未完待续。了解更多请浏览目录导航

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/experdot/p/5931589.html
Copyright © 2011-2022 走看看