简单二维元胞自动机 MATLAB实现
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实现的更多相关文章
- 美国康奈尔大学BioNB441元胞自动机MATLAB应用
美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...
- 游戏中的过程生成——元胞自动机 Celluar Automata 生成洞穴地形
最近在学习过程生成技术,在这里写一些心得. 对于元胞自动机,我们这里只讨论输入是一副二维bool数组的情况,即大多数游戏中的情况. 一个元胞自动机,对于一个输入,给出一个同样格式的输出.输出中的每个点 ...
- 用C++实现的元胞自动机
我是一个C++初学者,控制台实现了一个元胞自动机. 代码如下: //"生命游戏"V1.0 //李国良于2017年1月1日编写完成 #include <iostream> ...
- 基于元胞自动机NaSch模型的多车道手动-自动混合驾驶仿真模型的Matlab实现
模型的建立基本来自于:http://www.doc88.com/p-2078634086043.html 花了一天半的时间用新学会的matlab实现了一下. ───────────────────── ...
- python应用:生成简单二维码
概述 \(\quad\)第一篇python的应用就打算写一写用python生成简单的二维码啦.因为二维码在日常生活中越来越常用了,部分博客也用二维码来用作打赏的工具.但是要提醒大家的是,千万不要乱扫街 ...
- jquery插件生成简单二维码
除了利用第三方网站生成二维码外,这是一个比较简单的办法吧. <script src="/Scripts/jquery.qrcode.min.js" type="te ...
- js生成简单二维码
js文件下载地址:https://download.csdn.net/download/weixin_38296752/10554485 一.引入qrcode.js文件 <script type ...
- UVA 11019 二维匹配 AC自动机
这个题目要求在一个大矩阵里面匹配一个小矩阵,是AC自动机的灵活应用 思路是逐行按普通AC自动机匹配,用过counts[i][j]记录一下T字符矩阵以i行j列为开头的与P等大的矩阵区域 有多少行已经匹配 ...
- Codeforces#514D(三分,简单二维几何)
#include<bits/stdc++.h>using namespace std;const double eps=1e-8;int n; struct node{ double ...
随机推荐
- 洛谷 1016 / codevs 1046 旅行家的预算
https://www.luogu.org/problem/show?pid=1016 http://codevs.cn/problem/1046/ 题目描述 Description 一个旅行家想驾驶 ...
- 开源Asp.Net Core小型社区系统
源码地址:Github 前言 盼星星盼月亮,Asp.Net Core终于发布啦!! Asp.Net发布时我还在上初中,没有赶上.但是Asp.Net Core我从beta版本便一直关注.最初项目名叫As ...
- MVVM小记
这篇小记源自于codeproject上的一篇文章 http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explai ...
- ASP.NET Word/Excel 权限问题
在部署Word/Excel到服务器的时候,经常会碰到权限问题.例如; Retrieving the COM class factory for component with CLSID {0002 ...
- 教你写一个web远程控制小工具
惯例先上图 晚上躺床上了,发现忘关电脑了,又不想起来关,来用手机控制电脑多好,百度了下,果然一大把.哈,我自己为什么不自己也实现个呢,任意的自己diy.Just do it. 如果不想看如何实现,那么 ...
- [CF#286 Div2 D]Mr. Kitayuta's Technology(结论题)
题目:http://codeforces.com/contest/505/problem/D 题目大意:就是给你一个n个点的图,然后你要在图中加入尽量少的有向边,满足所有要求(x,y),即从x可以走到 ...
- linux 防火墙开放特定端口与指定ip谨防
vi etc/iptable/sysconfig/iptables linux 开放固定端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 1 ...
- EPEL源
EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL.CentOS和Scientif ...
- Beta项目冲刺--第三天
又找回熟悉的感觉.... 队伍:F4 成员:031302301 毕容甲 031302302 蔡逸轩 031302430 肖阳 031302418 黄彦宁 会议内容: 1.站立式会议照片: 2.项目燃尽 ...
- ubuntu完全卸载nginx
删除nginx连带配置文件 sudo apt-get purge nginx # Removes everything. 卸载不再需要的nginx依赖程序 sudo apt-get autoremov ...