7.1 什么是细胞自动机

7.2 初等细胞自动机

*背景:Wolfram提出初等CA模型,CA有三大要素

*思想:
时间 -> 代 : 下一代的细胞状态 = f(上一代的细胞状态)

*扩展:谢尔宾斯基三角形(分形)

白0,黑1,上层产生下层

↑规则90,01011010(B)-> 90(D)

*扩展2:
8个0和1就是一个8位数,而8位数字共能产生256种组合,RGB颜色分别用8位表示R/G/B颜色(0~255,即256种可能)

7.3 编写初等细胞自动机

class CA
{int[] cells; //我们需要两个数组,一个用来存放细胞,另一个用来存放规则int[] ruleset;CA() {cells = new int[width];ruleset = {0,1,0,1,1,0,1,0}; //随意选取规则90for (int i = 0; i < cells.length; i++) {cells[i] = 0;}cells[cells.length/2] = 1; //除了中间的细胞以状态1开始,其余所有细胞都从状态0开始}void generate() {int[] nextgen = new int[cells.length]; //计算下一代状态for (int i = 1; i < cells.length-1; i++) {int left = cells[i-1];int me = cells[i];int right = cells[i+1];nextgen[i] = rules(left, me, right);}cells = nextgen;}int rules (int a, int b, int c) { //在规则集中查询新状态String s = "" + a + b + c;int index = Integer.parseInt(s,2);return ruleset[index];}
}

7.5 Wolfram分类

类别1:统一 经历若干次迭代之后,类别1的细胞状态变成了常量。这样的结果不会 让人眼前一亮。上图的规则222就属于该类。执行多次迭代之后,每一个细胞最终都 将保持黑色。

类别2:重复 和类别1相似,类别2最后也会保持稳定,但每个细胞的状态并不是常 量。相反,它们的状态在0和1之间来回变化。在上图的规则190中,每个细胞的状态 序列都是11101110111011101110。

类别3:随机 这类CA的状态变化是随机的,我们无法摸清其规律。

类别4:复杂 类别4可以当做类别2和类别3的混合,其中有重复和交替的图案,但这 些图案的出现是不可预测的,并且表面上看起来是随机的。

7.5 生命游戏

二维细胞矩阵,邻居由3个扩展为9个,此0代表"死亡",1代表"活着"。
3位 -> 8位2进制 ->定义8位规则
9位 -> 512位2进制 -> 难以定义规则

*规则:
1.死亡 如果某个细胞处于“活着”状态(状态为1),在以下情况下,将会变成“死 亡”状态(状态变为0)。 群体过剩: 如果细胞有4个及以上的邻居处于“活着”状态,则该细胞死亡。 孤独: 如果“活着”的邻居数量等于或少于1个,则细胞死亡。
2.新生 处于“死亡”状态(状态为0)的细胞,如果它周围刚好有3个“活着”的邻居, 则它也会变为“活着”状态。
3.静止 在其他情况下,细胞的状态保持不变。让我们列举所有这样的场景。 保持“活着”: 如果细胞是“活着”的,而且周围有2个或3个活着的邻居,它将继 续“活着”。 保持“死亡”: 如果细胞是“死亡”的,而且周围“活着”的邻居数不等于3,它将继 续保持“死亡”状态。

int[][] next = new int[columns][rows]; //下一代状态for (int x = 1; x < columns-1; x++) //遍历所有细胞,但跳过边缘细胞
{ for (int y = 1; y < rows-1; y++) {int neighbors = 0;for (int i = -1; i <= 1; i++) //将所有邻居的状态相加,计算活着的邻居数量{   for (int j = -1; j <= 1; j++) {neighbors += board[x+i][y+j];}}neighbors -= board[x][y]; //减去自身状态生命游戏规则if ((board[x][y] == 1) && (neighbors < 2)) next[x][y] = 0;else if ((board[x][y] == 1) && (neighbors > 3))next[x][y] = 0;else if ((board[x][y] == 0) && (neighbors == 3))next[x][y] = 1;else next[x][y] = board[x][y];}
}
board = next; //next数组变成了当前状态

7.9 传统CA的变化

*规则扩展:
1.非矩形网格
六角形网格创建CA,每个细胞都有6个邻居。

2.变换概率(死亡/复活规则)
3.细胞状态由0/1 -> float(0.0~1.0)
4.移动细胞(根据距离产生状态变化)
5.嵌套CA(模拟多层次复杂系统)

*应用扩展:
1.图像处理
但是大部分图像处理算法和CA规则是类似的。模糊化图像就是根据邻居像素的平均值创建新像素。CA规则可以用于模 拟墨水在纸上的浸散效果及图像的水纹效果。
2.存储运算历史(开发"复杂自适应系统")
能从历史学习中不断适配和改变规则。我们会在第10章看到这样的示例:神经网络。

【编程书籍】《The Nature of Code》笔记 -《代码本色》7.细胞自动机相关推荐

  1. 乐鑫esp8266学习rtos3.0笔记第7篇:我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  2. wordvba编程代码大全_这几本基础编程书籍一定要看

    程序员书库(ID:OpenSourceTop) 编译书单来自:https://simpleprogrammer.com/best-programming-books-2019/ 关于程序员类的技术书籍 ...

  3. 【编程技巧】Code snippets(代码片段)在Visual Studio中的使用(附简单的Snippet管理工具)

    引言 Code snippet (代码片段)在VS中指的是基于IDE支持的利用快捷方式快速输入一小段,或者称之为一整块代码的功能,在日常编程,特别是在工作中写内容相似的业务代码时,利用Snippet功 ...

  4. c语言编程交党费,「二级C语言」Code Style(代码的风格)

    某省情况插管疲软长发皓洁面临惯骗:发令魔术露齿临下纷扰乐道风习不迫?母亲黔江批答苦行龙头多数:奇丽马赛明理除痘妹子拼缀光导切点.曲水娄东算算初始潜江.两系善恶不妨曲波挡寒民居古币. 兰姆信物挂包森工例 ...

  5. 程序员必修内功,收集了上千本各类编程书籍【免费获取】

    程序员必修内功,收集了上千本各类编程书籍,C,C++,Java,Python,机器学习,深度学习,Linux等等,还收集了很多英文原版书籍,看不惯中文的也可以选择英文哦.这些书籍都是我经过平时的积累, ...

  6. 《编程能力基础》刷题笔记(41 题)

    <编程能力基础>刷题笔记 1. 单调数列 题解:递归.模拟.API 2. 实现 strStr() 题解:API.暴力.滑动窗口 3. 平衡二叉树 题解:迭代 4. 重复的子字符串 题解:模 ...

  7. python编程 书籍_Python编程十大最佳书籍

    python编程 书籍 Starting out with Python? Books are going to be your most reliable way to do so. Let's f ...

  8. unix编程书籍推荐

    [Unix下C/C++开发] unix编程书籍推荐 LiSteven 发布于 2年前,共有 0 条评论 Unix/Linux/BSD系统 相对于Windows,在UNIX下编程获得相关文档要方便很多. ...

  9. [Unix下C/C++开发] unix编程书籍推荐

    [Unix下C/C++开发] unix编程书籍推荐 发表于1年前(2012-12-20 10:14)   阅读(256) | 评论(0) 6人收藏此文章, 我要收藏 赞0 Unix/Linux/BSD ...

  10. 国外程序员推荐的免费编程书籍资源

    StackOverflow上有位网友(xenoterracide)提问: 我正试着搜集整理一个可在网上免费阅读的计算机编程书籍列表.这些书可以是某种特定编程语言,也可以计算机方面通用书籍.网上有哪些免 ...

最新文章

  1. sqlrelay mysql_数据库连接池SQL Relay安装使用-Java架构师必看
  2. [转]详解编译预处理
  3. 方向键 上下左右的转译
  4. 微信系小程序 StorageSync
  5. JDK源码解析-Runtime类
  6. explain ref_数据库查询优化:使用explain分析sql语句执行效率
  7. Java内存缓存-通过Google Guava创建缓存
  8. c 语言现代方法13章习题6
  9. PAT_B_1039_Java(20分)
  10. 自定义日期工具类 java 1614698552
  11. ubuntu命令之dpkg
  12. 【嵌入式Linux】嵌入式Linux应用开发基础知识之串口应用编程
  13. 如何使用移动硬盘加密
  14. L3-002. 堆栈-PAT团体程序设计天梯赛GPLT(树状数组)
  15. Linux系统负载查询
  16. Trusted Execution Technology (TXT) --- 基本原理篇
  17. Linux efi分区被删除了,恢复删掉的 MSR 和 EFI 分区
  18. CapstoneCS5211,CS5212,CS5256,CS5811,CS5288,……型号大全
  19. 数据结构算法-学习体系-持续更新
  20. “豫”见超融合,私有云浪潮开启新一线

热门文章

  1. VMware CentOS网络配置设置简单NAT网络
  2. t580 thinkpad_4K分辨率!联想ThinkPad T580发布:27小时续航
  3. 面相大师App隐私政策
  4. html5 canvas 画一个矩形,在矩形里添加文字。
  5. 仿微信文本框,自动换行,动态高度,最大四行后滚动
  6. bestcoders pog love szhIII
  7. Linux安装指定版本的Unity3D
  8. 1寸照片如何修改底色?证件照换背景教程
  9. Spring事务扩展机制,我在美团Java研发岗工作的那5年
  10. Realtek 8822be无线网卡在Ubuntu16/17上驱动问题的完美解决方案