动态再结晶CA法模拟基础之生命游戏入门

动态再结晶CA法模拟基础之生命游戏入门


引言:元胞自动机法在非线性问题和复杂动态系统的模拟上日趋成熟,已经成功应用于许多科学领域,在材料科学领域,元胞自动机法(CA法,下文同)在显微组织形态及演变规律的模拟上体现出了特有的优势,但是在使用CA法编写动态再结晶程序时往往会出现入门很难、周期很长的问题,由于基于CA法的动态再结晶程序的编程思想与简单的生命游戏相通,本文以生命游戏为基础手把手讲解CA法的入门基础。(对应视频讲解可在B站同名查询)

游戏规则定义

给定单元的邻居是与它在垂直,水平或对角上的8个单元。

  • 如果1个单元为活的,但没有邻居单元是活的,或者仅有一个邻居单元是活的,则在下一代,此单元
    会因为孤独而死亡。

  • 如果1个单元周围有2个或者3个邻居单元为生,则该单元在下一代也是活的。

  • 如果1个单元是死的,则在下一代,如果它刚好有3个邻居单元是活的,则此单元变成活的。
    所有其它死的单元在下一代仍然是死的。

  • 如果1个单元为活的,且有4个或者4个以上邻居单元是活的,则在下一代,此单元会因为拥塞而死亡。

  • 所有出生和死亡都刚好在同一时间发生,则此单元的死亡有助于另一个单元的出生,但它不能通过减少拥塞而阻止其他单元的死亡;正在出生的单元也不能保护或者杀死上一代中活的单元。
    规则简述为:

  • 当该元胞为存活状态时,周围有2-3个存活元胞,其状态为活;否则为死。

  • 当该元胞为死亡状态时,周围有3个存活元胞,该元胞则复活。

123
456
789

5表示中心元胞,1—9为其邻居。在编程时为使用矩阵表示其状态,以i表示行,j表示列,可写成如下形式。

i-1,j-1i-1,ji-1,j+1
i,j-1i,ji,j+1
i+1,j-1i+1,ji+1,j+1

i,j 表示中心元胞,其余为其邻居。
依此规则进行迭代变化,使单元生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,是因为其简单的游戏规则,反映了自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。

MATLAB代码如下:

s=50;      % 棋盘宽,棋盘是方的,即每行每列可以有100个元包自动机
w=8;        % 每一个元包的像素宽度
board=zeros(w*s,s*w);   %棋盘图片
state=zeros(s,s);       %元包自动机的状态
newState=zeros(s,s);

%%  初始化
for i=1:s
    for j=1:s
        if rand<0.4         %   随机在棋盘上以0.4的生存概率设置自动机状态
            state(i,j)=1;   %   其实分的随机设置状态会导致非常离散的点,最后收敛时棋盘上剩下些孤立的点
        end
    end
end
figure;
%%  更新状态
for k=1:1000

    for i=1:s
        for j=1:s
            %   计算邻居着活着的个数
            cnt=0;
            %边界上的元胞无法取其8邻居
            if i-1>0&&j-1>0%左上邻居
                cnt=cnt+state(i-1,j-1);
            end
            if i-1>0&&j+1<=s%右上邻居
                cnt=cnt+state(i-1,j+1);
            end
            if i+1<=s&&j+1<=s%右下邻居
                cnt=cnt+state(i+1,j+1);
            end
            if i+1<=s&&j-1>0%左下邻居
                cnt=cnt+state(i+1,j-1);
            end
            if j-1>0%左邻居
                cnt=cnt+state(i,j-1);
            end
            if j+1<=s%右邻居
                cnt=cnt+state(i,j+1);
            end
            if i-1>0%上邻居
                cnt=cnt+state(i-1,j);
            end
            if i+1<=s%下邻居
                cnt=cnt+state(i+1,j);
            end

            %   更新状态、着色
            newState(i,j)=state(i,j);
            if state(i,j)==0
                if cnt==3
                    newState(i,j)=1;
                end
            elseif state(i,j)==1
                if cnt<2||cnt>3%0,1,4,5,6,7,8
                    newState(i,j)=0;
                end
            end

            if newState(i,j)==0
                board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=0;
            else
                board(((i-1)*w+1):i*w,((j-1)*w+1):j*w)=255;
            end
        end
    end

    state=newState;
    imshow(board);
    pause(0.3);

end

规则参考

https://www.cnblogs.com/cfantaisie/archive/2011/04/11/2012937.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
matlab模拟动态再结晶是通过使用matlab软件中的建模和仿真功能来模拟金属再结晶过程的动态演变。在金属加工过程中,由于应变和温度等外部因素的作用,金属晶粒会发生再结晶,从而改变金属材料的力学性能和微观结构。 动态再结晶模拟的主要步骤包括:定义材料的力学性能参数和初态(初始晶粒尺寸和形状),选择合适的再结晶模型,并设置模拟的时间步长和仿真时间。在模拟过程中,可以通过输入外部变量,如应变率和温度变化来模拟实际情况。 使用matlab进行动态再结晶模拟的好处是,matlab具有强大的数值计算和数据处理能力,可以方便地进行各种模型的数值求解和结果可视化。此外,matlab还提供了丰富的工具箱和函数库,可以方便地实现再结晶模型的建立和求解。 通过matlab模拟动态再结晶可以获得以下信息:再结晶过程中晶粒尺寸和形状的演变规律、再结晶晶粒分布的均匀性和尺寸分布的统计特征等。这些信息对于研究材料再结晶行为以及优化金属加工工艺具有重要意义。 在实际应用中,matlab模拟动态再结晶可以帮助优化金属加工工艺参数,提高金属材料的力学性能和工艺效率。此外,通过与实际实验结果的对比,还可以验证再结晶模型的准确性和可靠性,为进一步的研究提供指导。总之,matlab模拟动态再结晶是一种重要的工具,可以有效地帮助研究者深入理解和掌握金属再结晶过程的特性和机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H222222222255

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值