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

该博客介绍了使用二维元胞自动机模型来模拟养殖池的水质变化。通过设置不同的状态和演化规则,模拟了10周内鱼、虾、蟹数量的变化,结果显示水质得到改善,但生物数量下降,暗示需人工投喂。文章包含源代码实现,展示了无水华情况下的模拟结果。
摘要由CSDN通过智能技术生成

一、简介

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周的模拟,水质有了很大的改善,鱼虾蟹的数量有不同程度的下降,说明此时藻类的含量已经不足以支持鱼虾蟹的生长,需要人工投喂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab科研辅导帮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值