《Netlogo多主体建模入门》笔记 11

11 --- 重访羊-草模型与系统动力学建模

该系列笔记基于集智乐园的《Netlogo多主体建模入门》课程,感谢张江老师与各位志愿者的辛勤付出。

  • 集智乐园 《Netlogo多主体建模入门》 https://campus.swarma.org/play/play?id=429

 

 

 

 

这是最后一节课程的笔记了,在这里,我们主要学习是:

基于系统动力学的建模方式

 

我们之前一直学习的都是 多主体建模方式 ,这种方式适合模拟具有中等尺度,具有一定异质性的系统。使用这种建模方式,是出于以下几点的考虑:

  • 关心每个 agent 的属性和变化
  • 注重观察不同规则下的“涌现”现象

 

这种建模方式并不适合:

  • 大规模系统(上千以上的个体数)
  • 个体行为不起作用
  • 空间因素不显著

这几种情况。

而 基于系统动力学的建模方式 则能很好地弥补这种短板。

 

我们先创建一个最简单的动力学模型:

羊的繁殖模型(不考虑缺草,不考虑天敌)

 

先从数学模型入手,我们分析 羊的数量X 随时间步 t 的变化率:

a 是一个时间步 t 后,羊的数量X 的繁衍率;

b 是一个时间步 t 后,羊的数量X 的死亡率。

(a-b )X 就代表了一个时间步 t 后,羊的数量X 的增量。

 

《Netlogo多主体建模入门》笔记 11_第1张图片

 

由此我们可以计算 羊的数量X 随 时间步t 的变化函数(是微分方程)。

其中exp(a-b) 的意思是 自然对数 e 的 (a-b)次方。

 

然而,不是所有的微分动力系统都能用解析的方式求解,所以需要:

把微分方程转换成 差分方程(数值模拟的求解方法)。

《Netlogo多主体建模入门》笔记 11_第2张图片

 

 

 

接着我们就可以开始写代码了。

1. 依次添加按钮和 绘制羊群数量X的图。

《Netlogo多主体建模入门》笔记 11_第3张图片

绘图笔更新命令记得要删干净

《Netlogo多主体建模入门》笔记 11_第4张图片

2. 在“工具” 一栏 ,打开系统动力学建模工具

《Netlogo多主体建模入门》笔记 11_第5张图片

 

先来介绍这些

  • 检查 ------ 对代码的语法检测

  • 存量 ------ 好比是一个水桶,代表着 对象的数量。(在这里,羊是一个对象,存量代表羊的数量)
  • 变量 ------ 通常拿来代表数学模型的 系数、参数,方便调试
  • 流量 ------ 好比水龙头+水管。可以给水桶储水,也可以给水桶放水。流量上有一个“水龙头”,水龙头拧的角度小,水流就小,反之。而拧水龙头的角度是由变量和存量来决定的,所以就需要下面的连接。
  • 连接 ----- 把变量和存量指向“水龙头”,“水龙头”就能调用这些数值进行计算,从而控制水流大小。

 

照着教程,完成建模。

《Netlogo多主体建模入门》笔记 11_第6张图片

一些要注意的细节:

  • 先点击四个图标之一,再点击画布进行创建
  • 存量和变量都是点击一次画布就行。流量和连接 需要先点击 存量或变量 后鼠标不松开,拖到合适的位置再松开鼠标。

 

之后就很简单了,去调用 系统动力学建模工具中的代码 里的三个函数就行了。

system-dynamics-setup

system-dynamics-go

system-dynamics-do-plot (绘图函数)

《Netlogo多主体建模入门》笔记 11_第7张图片

to setup
  clear-all
  system-dynamics-setup
end
 
to go
  system-dynamics-go
  system-dynamics-do-plot
 
end

 

模型运行:

《Netlogo多主体建模入门》笔记 11_第8张图片

如果画的太快的话,就修改视图更新方式。

 

 

 

有了之前建模的基础,我们可以开始写 羊-草 模型

 

老样子,先从数学模型开始分析:

X 代表了 羊, Y 代表了草。

 

 

《Netlogo多主体建模入门》笔记 11_第9张图片

  • 羊群的变化:

aY(t) * X(t) 这一项代表着草越多,增长率越高。

-b * X(t) 这一项代表着羊群的恒定 死亡率。

 

  • 草 的变化:

R ----- 草 以一个常数生长出来

-cX(t)* Y(t) ----- 草 的减少与羊的数量成反比

《Netlogo多主体建模入门》笔记 11_第10张图片

 

看懂数学模型后,我们使用系统动力学建模工具进行建模:

《Netlogo多主体建模入门》笔记 11_第11张图片

此时不出意料的话会报错: 数值过大异常。

这是由于模型精度不够,或者系统趋于发散导致的。(系统有三种趋势:发散、周期解、混沌)

《Netlogo多主体建模入门》笔记 11_第12张图片

 

解决方法一:

降低 Δt ,提高模型精度

《Netlogo多主体建模入门》笔记 11_第13张图片

 

解决方法二:

从方程稳态的角度,计算羊群和草变化率为0、且锚定某些初始值,求解方程,得到稳态的参数。

《Netlogo多主体建模入门》笔记 11_第14张图片

运行界面:

注意蓝线的变化,其实到后面是维持在了12只左右,并不是灭绝了。

《Netlogo多主体建模入门》笔记 11_第15张图片

 

仿真数据还可以通过直接右键图,点 Export 导出。

《Netlogo多主体建模入门》笔记 11_第16张图片

 

 

你可能感兴趣的:(Netlogo多主体建模入门,数据仿真,Netlogo)