生态系统建模

本文介绍如何用 Agent-based model 的方法,对一个包含狼、麋鹿、草三种生物的生态系统建模。

GitHub项目链接:nature-system

Agent指个体,Agent-base model即基于个体的模型。在Agent-based model中,虚拟实体(virtual entity)和现实个体一一对应。一般来说,虚拟实体的属性是对现实个体的抽象,虚拟实体的行为则是依照已经写好的规则迭代。这种建模方式往往涉及个体详细的行为模式,因此适合以研究个体行为规则为目的的建模。

需要注意的是,利用Agent-based model方法建模,并不是变量越多越好,过多的变量会造成调试上的困难。选取的变量足够支撑起我们研究的问题就可以了。

Note: 除了Agent-base model之外,Equation-based model也是一种比较常见的建模方式。Agent-based model适合表达每个个体身上发生了什么,比如个体的速度、位置的变化等。Equation-based model则而更适合表达系统平均发生了什么,比如人口模型中人口数量变化就更适合用Equation-based model建模。

模型假设

(一)生物的属性

模型内有三种生物:狼(wolf)、麋鹿(moose)、草(grass)。此外,狼还分为头狼和普通狼。下面这张表展示了头狼、普通狼、麋鹿的属性:

# age food pos speed last_breed population packNo range eaten
头狼
普通狼
麋鹿

从上表可以看出,年龄、食物、位置、速度是头狼、普通狼和麋鹿的共有属性。last_breed指和上一次生育的时间间隔,在模型内用一次迭代表示一次时间间隔,因为迭代必须是整数,因此last_breed也是整型变量。头狼特有population属性,用来表示该头狼所在狼群中狼的数量;头狼特有range属性,表示该狼群活动的范围;头狼特有eaten属性,表示狼群在一次迭代中,全体成员吃到的麋鹿的总数。普通狼特有packNo属性,用来标记其所属狼群的头狼在列表中的索引号。普通狼没有last_breed属性,是因为其生育是以整个狼群为单位的。由于狼群是由头狼定义的,狼群相关的属性和行为也绑定在头狼身上,因此在代码实现上,狼群的生育是通过头狼实现的。

草没有上述生物那么复杂的模型,本模型中的草均匀平铺在环境中,且不会生长,吃完就没了。因此麋鹿为了获取新的食物来源,需要经常迁徙。

(二)生物的行为

头狼、普通狼和麋鹿都具有四种行为:死亡、迁徙、生育、捕猎。这四种行为在不同的生物种类上有不同的定义。比如麋鹿的迁徙规则是等到自己的位置没草吃了,才开始迁徙。而头狼迁徙规则则比较复杂,头狼会根据狼群内的种群数量,判断狼群的散布范围,以及调整迁徙的积极性。

1.死亡(die)

狼有两种死法:饿死或老死。麋鹿则有三种死法:饿死、老死或者被吃。

每一种生物都有固定的年龄上限值,超过该值将在本次迭代中死亡。本模型中,狼的最大年龄为25。如果一只狼如果没有饿死

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值