欢迎光临散文网 会员登陆 & 注册

【元胞自动机】基于元胞自动机模拟生态养殖matlab源码

2021-08-30 00:18 作者:Matlab工程师  | 我要投稿

一、简介

1 模型介绍
元胞自动机(𝐶𝑒𝑙𝑙𝑢𝑙𝑎𝑟 𝐴𝑢𝑡𝑜𝑚𝑎𝑡𝑜𝑛,𝐶𝐴)是由𝑉𝑜𝑛 𝑁𝑒𝑢𝑚𝑎𝑛𝑛提出的一种在时间、空间、状态上都离散的动力系统,利用相邻元胞之间的互相作用关系,能够以极简单的规则模拟复杂的行为,很适合用于生态养殖池的水质分析。
一个完整的元胞自动机系统通常包括元胞维数(𝐷)、邻居(𝑁)、状态(𝑆)及演化规则(𝑓),记为𝐴 = (𝐷, 𝑁, 𝑆, 𝑓)。其中,元胞是构成元胞自动机的最小单位,在本文中设置为

在这里插入图片描述


2 模型的参数
考虑到三维的元胞自动机太复杂,为了简单起见,本文采用维度为D=2。考虑到水体之间极强的流动性和分子扩散性,采用𝑀𝑜𝑜𝑟𝑒型邻居会更合理。
2.1 Moore型邻居

在这里插入图片描述


2.2 具体参数设定

在这里插入图片描述

二、源代码

clear; clc; rho=50;length=50; fish=[500 300 500];%300kg鱼、500kg虾、500kg蟹 lambda=0.8; T=10;%10周 alpha=[0.00001,0.00015,0.00035,0.00025,0.0002];%不同状态下的鱼儿们消耗系数 range=[15,50,150,500]; %==========画方块图 area=MyCreate(length,rho,lambda); DrawArea(area,range); n=length;%n=50 plot([(0:n)',(0:n)']+0.5,[0,n]+0.5,'k');%k代表黑色 plot([0,n]+0.5,[(0:n)',(0:n)']+0.5,'k'); axis image; set(gca,'xtick',[]); set(gca,'ytick',[]);%消除x,y轴 figure; %========= data=zeros(T,3);%10行3列的零 for i=1:T    [area,fish]=MyChange(area,fish,range,alpha);    DrawArea(area,range);    drawnow;    data(i,:)=fish; end function [area,fish]=MyChange(area,fish,range,alpha) n=length(area); for i =1:n    for j=1:n    %周围9个方块共同impact        if MyRound(area,i,j)<range(1)%15            area(i,j)=MyRound(area,j,j)*(1-rand*mean(fish)*alpha(1));            %(1-rand*mean(fish)*alpha(1))鱼虾蟹等影响系数        elseif MyRound(area,i,j)<range(2)%50            area(i,j)=MyRound(area,j,j)*(1-rand*mean(fish)*alpha(2));        elseif MyRound(area,i,j)<range(3)%150            area(i,j)=MyRound(area,j,j)*(1-rand*mean(fish)*alpha(3));        elseif MyRound(area,i,j)<range(4)%500            area(i,j)=MyRound(area,j,j)*(1-rand*mean(fish)*alpha(4));        else            area(i,j)=MyRound(area,j,j)*(1-rand*mean(fish)*alpha(5));        end    end end avg=mean(mean(area)); %成长系数设置的很迷惑 %蟹类主要以鱼虾等动物尸体为食物,所以其数目会受到鱼虾的影响 function DrawArea(area,range) temp=area; n=length(temp); Area(:,:,1)=temp; Area(:,:,2)=temp; Area(:,:,3)=temp; %给每个方格块上色,水藻密度越大,颜色越绿 for i=1:n    for j=1:n        if temp(i,j)<range(1)            Area(i,j,:)=[0 230 214];        elseif temp(i,j)<=range(2)            Area(i,j,:)=[139 255 223];        elseif temp(i,j)<=range(3)            Area(i,j,:)=[147 255 170];        elseif temp(i,j)<=range(4)            Area(i,j,:)=[91  240 91];        else            Area(i,j,:)=[4 176 58];        end    end end

三、运行结果

无水华的情况模拟:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


根据以上结果可以知道,经过10周的模拟,水质有了很大的改善,鱼虾蟹的数量有不同程度的下降,说明此时藻类的含量已经不足以支持鱼虾蟹的生长,需要人工投喂。

 


【元胞自动机】基于元胞自动机模拟生态养殖matlab源码的评论 (共 条)

分享到微博请遵守国家法律