20世纪50年代,乌尔姆和冯·诺依曼(对此人真是崇拜的五体投地)为了研究机器人自我复制的可能性,提出了一种叫做元胞自动机(Cellular Automaton,CA)的算法。该算法采用局相互作用规则,最终产生整体的自复制构型(和蒙特卡罗法简直就是完全两种不同的哲学思想,竟然和同一个人有关)。元胞自动机已经成为研究复杂系统行为的一个理论框架(蒙特卡洛法也是!!),也是人工智能的雏形(alpha GO 也用到了一种蒙特卡洛树搜索的技术!!!)。

  原本打算每天晚上抽出点时间研究一个分形图形的,可惜时间管理太差,没能坚持,但学习分形学确实让人收获颇丰!而且一维元胞自动机大一时C语言简单实现过。所以,实现二维的也没有太大难度。但就实现速度和代码质量而言,已经深刻认识到了自己内力(算法)太浅薄,写的就是白菜代码。

  规则

    设有axa的网格(a为奇数),中间点设为1,其他点设为0;则此网格共有q/2层,设k为层数k=1~a/2;进行如下循环:

  1.设k层中任一点(Xi, Yi),则判断其八个邻居的现有状态;其和为奇数则(Xi,Yi)为1,否则为0;

  2.对第k层中(Xi, Yi)= 1的点着色;

  3.k = k + 1;返回步骤1.

  代码

 % 二维元胞自动机
% --
% zhaoyu
% 规则,先把中间点置为1,每一时间步对每一点,如果周围
% 八个点和为偶数,则变为0,为奇数则变为 % 颜色控制
Map = [ ; ];
colormap(Map);
% 设置网格大小
S = ;
L = zeros(S);
% 把中间一个数设置为 作为元胞种子
M = (S+)/;
L(M, M) = ;
Temp = L;
imagesc(L); % 计算层数
Layer = (S-)/ + ; for t=:Layer
for x=M-t+:M+t-
if x==M-t+ || x==M+t- for y=M-t+:M+t-
SUM = ;
for m=-:
for n=-:
if x+m> && x+m<=S && y+n> && y+n<=S
SUM = SUM + L(x+m, y+n);
end
end
end
SUM = SUM - L(x, y);
Temp(x, y) = mod(SUM, );
end else
y = M-t+;
SUM = ;
for m=-:
for n=-:
if x+m> && x+m<=S && y+n> && y+n<=S
SUM = SUM + L(x+m, y+n);
end
end
end
SUM = SUM - L(x, y);
Temp(x, y) = mod(SUM, ); y = M+t-;
SUM = ;
for m=-:
for n=-:
if x+m> && x+m<=S && y+n> && y+n<=S
SUM = SUM + L(x+m, y+n);
end
end
end
SUM = SUM - L(x, y);
Temp(x, y) = mod(SUM, );
end
end
L = Temp;
imagesc(L);
% 速度控制
pause(0.2);
end

  生成图形

  

简单二维元胞自动机 MATLAB实现的更多相关文章

  1. 美国康奈尔大学BioNB441元胞自动机MATLAB应用

    美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...

  2. 游戏中的过程生成——元胞自动机 Celluar Automata 生成洞穴地形

    最近在学习过程生成技术,在这里写一些心得. 对于元胞自动机,我们这里只讨论输入是一副二维bool数组的情况,即大多数游戏中的情况. 一个元胞自动机,对于一个输入,给出一个同样格式的输出.输出中的每个点 ...

  3. 用C++实现的元胞自动机

    我是一个C++初学者,控制台实现了一个元胞自动机. 代码如下: //"生命游戏"V1.0 //李国良于2017年1月1日编写完成 #include <iostream> ...

  4. 基于元胞自动机NaSch模型的多车道手动-自动混合驾驶仿真模型的Matlab实现

    模型的建立基本来自于:http://www.doc88.com/p-2078634086043.html 花了一天半的时间用新学会的matlab实现了一下. ───────────────────── ...

  5. python应用:生成简单二维码

    概述 \(\quad\)第一篇python的应用就打算写一写用python生成简单的二维码啦.因为二维码在日常生活中越来越常用了,部分博客也用二维码来用作打赏的工具.但是要提醒大家的是,千万不要乱扫街 ...

  6. jquery插件生成简单二维码

    除了利用第三方网站生成二维码外,这是一个比较简单的办法吧. <script src="/Scripts/jquery.qrcode.min.js" type="te ...

  7. js生成简单二维码

    js文件下载地址:https://download.csdn.net/download/weixin_38296752/10554485 一.引入qrcode.js文件 <script type ...

  8. UVA 11019 二维匹配 AC自动机

    这个题目要求在一个大矩阵里面匹配一个小矩阵,是AC自动机的灵活应用 思路是逐行按普通AC自动机匹配,用过counts[i][j]记录一下T字符矩阵以i行j列为开头的与P等大的矩阵区域 有多少行已经匹配 ...

  9. Codeforces#514D(三分,简单二维几何)

    #include<bits/stdc++.h>using namespace std;const double eps=1e-8;int n; struct node{    double ...

随机推荐

  1. 纯手工搭建JSF开发环境(JSF2.2+maven+weblogic 12c/jboss EAP 6.1+)

    前言: JSF 2.X因为种种原因(我个人觉得主要是因为推出太晚),再加上EJB2之前的设计过于复杂,引起很多开发人员对官方解决方案的反感,即使EJB3后来做了大量改进,国内也很少有人对EJB3感兴趣 ...

  2. C#:DataTable映射成Model

    这是数据库开发中经常遇到的问题,当然,这可以用现成的ORM框架来解决,但有些时候,如果DataSet/DataTable是第三方接口返回的,ORM就不方便了,还得自己处理. 反射自然必不可少的,另外考 ...

  3. 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?

    用foxit reader 打印pdf 直接设置为双面打印并且一张2页打印,发现正反面刚好倒着来的,其实说的正反面倒着是从左右翻的角度来讲的,如果上下翻会发现刚好是这个顺序的,这个是要在双面打印设置里 ...

  4. Unity 5.3.1 No Android/IOS module loaded

    unity我一直在用5.0以下的版本 昨天升级到了最新版本5.3.1 发现无法打android包,ios也不行 提示“No Android/IOS module loaded” 下面有个Module ...

  5. 探究JVM——运行时数据区

    最近在读<深入理解Java虚拟机>,收获颇丰,记录一下,部分内容摘自原书. Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...

  6. koala不支持中文的解决办法(问题出现在使用中文字体时报错)

    C:\Program Files\Koala\rubygems\gems\sass-3.4.9\lib\sass 这是我的koala的安装路径,在sass文件夹下打开engine.rb(文本文档打开即 ...

  7. Android开发之补间动画、XML方式定义补间动画

    四种补间动画: 1.透明: 2.缩放: 3.位移: 4.旋转: //点击按钮 实现iv 透明的效果 动画 public void click1(View v) { //1.0意味着着完全不透明 0.0 ...

  8. spring配置属性的两种方式

    spring配置属性有两种方式,第一种方式通过context命名空间中的property-placeholder标签 <context:property-placeholder location ...

  9. 页面切换语言包使用session不用cookie

    cookie的问题,ifame中的cookie不一致 在父页面设置的语言包cookie,在iframe中获取不到.为什么呢? 为什么语言包这个事跟cookie过不去,有什么特殊的? iframe的sr ...

  10. jquery里的on方法使用

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...