元胞自动机模拟柑橘发霉过程


做合成生物学大作业时突发奇想就整了这个烂活,说实话就是完全照搬了澳洲大火的那个模型,话说我本来就不是搞数学建模的料,这里投机取巧一下应该问题也不大,吧。思路就是:首先联想到了之前家里人寄来的橘子忘记吃了最后整个被青霉菌侵染然后变成抹茶味的事情,想着这个似乎也可以用元胞自动模拟一下,就做了,发现澳洲大火那个比传染病模型更适合一些;元胞的状态可以分为正常、白色菌丝生长和产生孢子3种,然就随机来个雷击(侵染)就成了。但是要是不展示一下颜色变化的话,那这个项目就是完全照抄了,关于颜色也是花了点时间,主要是因为最开始看到那个元胞自动机教程关于颜色这部分太扯了,用红色和白色的RGB值硬凑,反正我觉得要是不好好考虑考虑颜色的话做这个模拟就没有意义了。虽然没怎么用过MATLAB但是还挺好上手的,反正结果如下:

为了显得不太简单还是加了三个0技术力的曲线(额)

因为时间问题就没再详细考虑各种概率,随意设置了一下,但是最后结果竟然以外地还行,另外在做出这个之前还考虑过圆形的那种展示方式,但是仔细考虑之后发现根本就不符合逻辑事实,就放弃了。

失败作之柑橘变哈密瓜

总结一下,柑橘发霉肯定没有这么简单就模拟得出来,因为他并不是只发生在表变的感染,但是为了让元胞自动机的条件实现,只能这么考虑了。这么看来好像有点硬凑啊,算了,以后用空再想想吧。顺带一提N2终于考完了,累死,感觉也只有5成可能性能过,不过不管怎么说,大三算是彻底告一段落了,时间过得真快啊。。。

这个的代码放下面了

%被感染的伤口的下一状态:长上菌丝
%正常组织的下一状态:长上菌丝 维持不变
%长上菌丝的组织的下一状态:生长出分支孢子 维持不变
%生长出分支孢子的下一状态:维持不变 
clear;
clc; 

n = 300;
P0= 1e-6;
P1= 0.8;%感染
P2= 0.7;%产生孢子
UL=[n,1:n-1];
DR=[2:n,1];

%0:正常组织
%1:长上菌丝的组织
%2:生长出分支孢子的组织
%3:被感染的伤口
o_R=zeros(n);
o_G=zeros(n);
o_B=zeros(n);
 o_R(o_R==0)=1;
 o_G(o_G==0)=0.38;
num_norm=zeros(1,240);
num_inf1=zeros(1,240);
num_inf2=zeros(1,240);
% imagesc(cat(3,o_R,o_G,o_B));
FT=zeros(n+2);
FT(FT==0)=0.38;
for i=1:240
    FT(2:n+1,2:n+1) = o_G;
    inFected=(FT(1:n,2:n+1)==0.98|FT(1:n,2:n+1)==0.73725)+(FT(2:n+1,1:n)==0.98|FT(2:n+1,1:n)==0.73725)+(FT(2:n+1,3:n+2)==0.98|FT(2:n+1,3:n+2)==0.73725)+(FT(3:n+2,2:n+1)==0.98|FT(3:n+2,2:n+1)==0.73725);
    for j=1:n
        for k=1:n
            if(o_G(j,k)==0.38 &((inFected(j,k)>0 & rand()<P1)|rand()<P0))
             o_R(j,k)=1.00;
             o_G(j,k)=0.98;
             o_B(j,k)=0.98;
            elseif(o_G(j,k)==0.98&rand()<P2)
               o_R(j,k)=0.56078;
             o_G(j,k)=0.73725;
             o_B(j,k)=0.56078; 
            elseif(o_G(j,k)==0.38 &inFected(j,k)==0&rand()<P0)
                o_R(j,k)=1.00;
             o_G(j,k)=0.98;
             o_B(j,k)=0.98;
            end
        end
    end
    num_norm(1,i)=sum(o_G(:)==0.38);
    num_inf1(1,i)=sum(o_G(:)==0.98);
    num_inf2(1,i)=sum(o_G(:)==0.73725);
    figure(1);
subplot(2,2,1),imagesc(cat(3,o_R,o_G,o_B))
     axis tight
     axis off
     drawnow
%      pause(0.1)
%      figure(2);
 subplot(2,2,2),plot(1:i,num_norm(1,1:i),'-r'),title('正常组织'),xlabel('时间/h'),ylabel('组织数目/个');
subplot(2,2,3),plot(1:i,num_inf1(1,1:i),'-g'),title('长上菌丝的组织'),xlabel('时间/h'),ylabel('组织数目/个');
subplot(2,2,4),plot(1:i,num_inf2(1,1:i),'-b'),title('产生孢子的组织'),xlabel('时间/h'),ylabel('组织数目/个');
pause(0.1)
     
end  

まとめ

这个暑假应该会很忙吧(苦笑)
munetani _mashiro 2023 7.3 WuHan City

2人评论了“元胞自动机模拟柑橘发霉过程”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注