【元胞自动机】基于元胞自动机模拟商场人流matlab源码
发布日期:2021-05-04 12:56:09
浏览次数:22
分类:技术文章
本文共 2799 字,大约阅读时间需要 9 分钟。
元胞自动机的初步理解
- 对元胞自动机的初步认识 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状 态。变化规则适用于每一个元胞并且同时进行。
- 元胞的变化规则&元胞状态 典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。
- 元胞自动机的应用 元胞自动机已被应用于物理模拟,生物模拟等领域。
- 元胞自动机的matlab编程 结合以上,我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。
%% lzuclose all ; clear all ;clca=rand(200,50); %生成元胞自动机的大小(200,50)200行50列m=find(a<0.1); n=find(a>0.9); %向上,向下的各占10%aa=zeros(size(a));aa(m)=1;up=aa;bb=zeros(size(a));bb(n)=3;down=bb; %初始化元胞 up,downclear a* m n bb% 生成 up downN=nnz(up)+nnz(down);%% 循环开始的地方for t=1:10000 x=cutx(w_zx(i));y=w_zy(i); down_z_g(andx(x),y)=3; while down(x,y)==3 down_z_g(x,y)=3; d_b(i)=d_b(i)+1; x=cutx(x); endendclear x y iup_z_g=zeros(size(up));for i=1:length(w_z1) u_b(i)=0; x=andx(andx(w_zx(i)));y=w_zy(i); up_z_g(cutx(x),y)=1; while up(x,y)==1 up_z_g(x,y)=1; u_b(i)=u_b(i)+1; x=andx(x); endendclear x y i% u_b 向下走的后面跟的个数% d_b 向上走的后面跟的个数%[w_z1;w_zx; w_zy ;u_b ;d_b]%% 找出拐的那串粒子%% 找出直走的(不包含相碰的后面跟的)down_d=down;for i=1:length(w_z1) x=w_zx(i);y=w_zy(i); for j=0:d_b(i) down_d(x,y)=0; x=cutx(x); endend % down_d (down_directly)直接向下走的粒子clear x y i jup_d=up;end % up_d (up_directly)直接向上走的粒子clear x y i j%f=nnz(up_d)+length(w_zx)+sum(u_b)-nnz(up)%g=nnz(down_d)+length(w_zy)+sum(d_b)-nnz(down)%enda_down_d=[down_d(end,:);down_d(1:end-1,:)]; % alread_down_directlya_up_d=[up_d(2:end,:);up_d(1,:)]; % alread_down_directly(是假的还要考虑碰头的中间隔一个得情况)%% 两个粒子对头时中间空一个(定义往下走的占了这个空格)judge=a_down_d+a_up_d;[ww_zx,ww_zy]=find(judge==4);for i=1:length(ww_zx) x=ww_zx(i);y=ww_zy(i); judge(x,y)=3; x=andx(x); while judge(x,y)==1 x=andx(x); end judge(x,y)=1;endclear i% judge 里面存放的是 alread 走了的粒子(上下粒子都走了一步)r_down_d=zeros(size(down)); r_down_d(find(judge==3))=3; % r_down_d 里面放的是真的直走|了|的r_up_d=zeros(size(up)); r_up_d(find(judge==1))=1;%pp=nnz(find(judge==3))+nnz(find(judge==1))-nnz(judge);%% 找出拐弯的(也包含它后面跟的)(把拐的写进去)%% 先做向下n=0; %拐的串中直走的down_g=zeros(size(down));for i=1:length(w_z1) x=w_zx(i);y=w_zy(i); up_z_gg=up_z_g; up_z_gg(:,y)=0; down_z_gg=down_z_g; down_z_gg(:,y)=0; for j=0:d_b(i) cc=judge+down_g+up_z_gg+down_z_gg; if j==0 if y>=2&&y<=49&&cc(x,y+1)==0&&cc(x,y-1)==0&&cc(cutx(x),y-down=r_down_d+down_g; up=r_up_d+up_g; % 下一轮回的初始值V(t)=(nnz(r_down_d)+nnz(r_up_d)+n)/N;claht(up,down)clear a* c* d_b down_* i j* r* u_b up1 up_* w* x yendfigure(2)plot(V)
完整代码或者代写添加QQ1575304183
转载地址:https://blog.csdn.net/qq_34763204/article/details/116352843 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月02日 15时01分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php扩展xdebug基本使用
2019-04-27
为 PHP 应用提速、提速、再提速
2019-04-27
Linux下gedit显示行号
2019-04-27
《Advanced PHP Programming》读书笔记
2019-04-27
让我们谈谈RAID
2019-04-27
jQuery日期选择器插件date-input
2019-04-27
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27
PHP session回收机制
2019-04-27
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2019-04-27
用C语言写PHP扩展
2019-04-27
PHP Extension programming
2019-04-27
海量数据处理
2019-04-27
PHP防止注入攻击
2019-04-27