MATLAB基于元胞自动机的生态养殖模型
前言
考虑到多种生物之间具有复杂捕食和共生关系,且不同区域的水环境之间也会有相互作用,常见的方程不容易简单描述,故采用元胞自动机进行模拟,以总藻类密度作为指标,分析虾、鱼、蟹、藻生长情况。
一、模型说明
本文所涉及的建模思路、MATLAB源代码均参照于华中农大特等奖——《淡水养殖池塘水华发生及池水自净化研究》(提取码:7qog )
二、模型准备
1.模型的介绍
元胞自动机(𝐶𝑒𝑙𝑙𝑢𝑙𝑎𝑟 𝐴𝑢𝑡𝑜𝑚𝑎𝑡𝑜𝑛,𝐶𝐴)是由𝑉𝑜𝑛 𝑁𝑒𝑢𝑚𝑎𝑛𝑛提出的一种在时间、空间、状态上都离散的动力系统,利用相邻元胞之间的互相作用关系,能够以极简单的规则模拟复杂的行为,很适合用于生态养殖池的水质分析。
一个完整的元胞自动机系统通常包括元胞维数(𝐷)、邻居(𝑁)、状态(𝑆)及演化规则(𝑓),记为𝐴 = (𝐷, 𝑁, 𝑆, 𝑓)。其中,元胞是构成元胞自动机的最小单位,在本文中设置为 S = ( I , I I , I I I , I V , V ) S=(I,II,III, IV, V) S=(I,II,III,IV,V)五种藻类密度状态,以总藻类密度作为衡量指标,具体划分如下, v v v表示该元胞的总藻类密度值。
2.模型的参数
考虑到三维的元胞自动机太复杂,为了简单起见,本文采用维度为D=2。考虑到水体之间极强的流动性和分子扩散性,采用𝑀𝑜𝑜𝑟𝑒型邻居会更合理。
Moore型邻居
具体参数设定
三、Matlab代码详解
此次共有5个脚本文件,其中fish.m为脚本文件,其他4个都是函数文件,模拟的情况是对于无水华的情况进行模拟,下面分别做详细说明。
fish.m 代码如下(示例):
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'