# EcologicalModeling **Repository Path**: NarratorCMH/ecologicalmodeling ## Basic Information - **Project Name**: EcologicalModeling - **Description**: 数学建模-种群生态系统模拟研究课程论文论文-从三种群到复杂多种群生态系统建模 - **Primary Language**: JavaScript - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-11-16 - **Last Updated**: 2024-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 任意复杂多种群捕食网模拟算法 `2021330301110` `2021330301111` `2021330301114` ------ 此算法可以模拟任意多种群在复杂捕食网生态下的种群数量随时间的关系 关于该算法的具体原理详见同目录下的“**种群生态系统模拟研究课程论文.docx**” 我们用分别三种不同的计算机语言`(Python,C,JavaScript)`写了一遍该算法,可以按需拿取 同目录下的`Chart.js`,`Chart.py`,`Chart.c`即为核心算法文件 ## 核心算法使用教程 对于想模拟的任意捕食网,第一步将其简化为如下右图所示 - 将种群名称用0123...数字序号表示 - r~1~为种群最大增长率,r~0~为种群在没有资源情况下的自疏率 - m~ab~为由A指向B的边权 ![456](https://cui-storage-1313346470.cos.ap-shanghai.myqcloud.com/Main/456.png) ### JavaScript版: ```js //以下为Chart.js中需要用户修改的部分 //种群节点信息集 let originalAtlas = { 0: [[1, 2], [], [0.8, 0.9], -0.3, 0.9, 700], 1: [[3, 4], [0], [0.8, 0.8], -0.1, 0.7], 2: [[3, 4, 5], [0], [0.8, 0.8, 0.8], -0.1, 0.6], 3: [[], [1, 2], [], -0.1, 0.1], 4: [[], [1, 2, 5], [], -0.4, 0.1], 5: [[4], [2], [0.8], -0.1, 0.5], }; //种群初始数量 let Node = [500, 200, 100, 40, 10, 10]; //生态周期循环次数 let bigLoop = 200; ``` - `originalAtlas`存储的是种群节点信息,以第一行为例, - `0`表示草的序号(==注意,种群起始序号必须从0开始,不能从1开始==) - `[1,2]`表示草被序号为1,2的种群捕食 - `[]`表示草所捕食的种群为空 - `[0.8,0.9]`表示由0指向1的边权为0.8,由0指向2的边权为0.9 - `-0.3`为r~0~ - `0.9`为r~1~ - `700`为该生产者所能到达的最大数量(==只有生产者才有这个值==) ### Python版: ```py #以下为Chart.py中需要用户修改的部分 # originalAtlas位节点信息集 originalAtlas = { 0: [[1], [], [0.8], -0.3, 0.9, 800], 1: [[2], [0], [0.8], -0.2, 0.4], 2: [[], [1], [], -0.1, 0.1], }; # Node为种群初始数量数列 Node = [200, 50, 10]; # bigLoop为生态周期循环的次数 bigLoop = 5; ``` 所有做法同JavaScript版本 ### C语言版: ```c //以下为Chart.c中需要用户修改的部分 //单节点单向最大连接数 #define maxline 2 //种群种类 #define numbers 3 //生态周期循环次数 #define bigLoop 50 //种群初始数量 double Node[numbers] = {200, 50, 0}; //种群节点信息集 static Ora originalAtlas[numbers] = {{1, {2}, {}, {0.8}, -0.4, 0.8, 700}, {2, {3}, {1}, {0.8}, -0.2, 0.4}, {3, {}, {2}, {}, -0.1, 0.1}}; ``` 由于C语言没有不定长数组,所以它的设置要比其它两种语言要多一些 - 单节点单向最大连接数:所谓单节点单向连接数是指:它指向其它种群的箭头数量或者反过来被指的箭头数量。如上图的5种群捕食网所示,该捕食网的单节点单项最大连接数为3 - 种群种类:是指该捕食网共多少种群 - originalAtlas同JavaScript,唯一不同的是该版本的起始种群序号必须从1开始,不可从0开始 ## Demo的使用教程 按需修改demo文件夹下的Chart.js文件(修改方法同上),修改完保存后,双击index进入浏览器,即可看到可视化图表结果