【元胞自動(dòng)機(jī)】基于元胞自動(dòng)機(jī)模擬生態(tài)養(yǎng)殖matlab源碼
一、簡(jiǎn)介
1 模型介紹
元胞自動(dòng)機(jī)(???????????????? ??????????????????,????)是由?????? ??????????????提出的一種在時(shí)間、空間、狀態(tài)上都離散的動(dòng)力系統(tǒng),利用相鄰元胞之間的互相作用關(guān)系,能夠以極簡(jiǎn)單的規(guī)則模擬復(fù)雜的行為,很適合用于生態(tài)養(yǎng)殖池的水質(zhì)分析。
一個(gè)完整的元胞自動(dòng)機(jī)系統(tǒng)通常包括元胞維數(shù)(??)、鄰居(??)、狀態(tài)(??)及演化規(guī)則(??),記為?? = (??, ??, ??, ??)。其中,元胞是構(gòu)成元胞自動(dòng)機(jī)的最小單位,在本文中設(shè)置為

2 模型的參數(shù)
考慮到三維的元胞自動(dòng)機(jī)太復(fù)雜,為了簡(jiǎn)單起見(jiàn),本文采用維度為D=2。考慮到水體之間極強(qiáng)的流動(dòng)性和分子擴(kuò)散性,采用??????????型鄰居會(huì)更合理。
2.1 Moore型鄰居

2.2 具體參數(shù)設(shè)定

二、源代碼
clear;
clc;
rho=50;length=50;
fish=[500 300 500];%300kg魚(yú)、500kg蝦、500kg蟹
lambda=0.8;
T=10;%10周
alpha=[0.00001,0.00015,0.00035,0.00025,0.0002];%不同狀態(tài)下的魚(yú)兒們消耗系數(shù)
range=[15,50,150,500];
%==========畫(huà)方塊圖
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
? ?%周?chē)?個(gè)方塊共同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))魚(yú)蝦蟹等影響系數(shù)
? ? ? ?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));
%成長(zhǎng)系數(shù)設(shè)置的很迷惑
%蟹類(lèi)主要以魚(yú)蝦等動(dòng)物尸體為食物,所以其數(shù)目會(huì)受到魚(yú)蝦的影響
function DrawArea(area,range)
temp=area;
n=length(temp);
Area(:,:,1)=temp;
Area(:,:,2)=temp;
Area(:,:,3)=temp;
%給每個(gè)方格塊上色,水藻密度越大,顏色越綠
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
三、運(yùn)行結(jié)果
無(wú)水華的情況模擬:



根據(jù)以上結(jié)果可以知道,經(jīng)過(guò)10周的模擬,水質(zhì)有了很大的改善,魚(yú)蝦蟹的數(shù)量有不同程度的下降,說(shuō)明此時(shí)藻類(lèi)的含量已經(jīng)不足以支持魚(yú)蝦蟹的生長(zhǎng),需要人工投喂。

?