APP下载

基于Mesa的ABM仿真

2021-10-15刘艳玲姚建盛

电脑与电信 2021年7期
关键词:示例可视化框架

刘艳玲 姚建盛*

(1.桂林理工大学旅游与风景园林学院,广西 桂林 541004;2.广西旅游产业研究院,广西 桂林 541004)

1 引言

在许多实际的大型系统中,如社会系统、经济系统和生物系统等,各个要素之间的相互作用错综复杂,系统演化的方式很难通过数理模型描述,因此仿真是研究这类复杂系统的重要手段之一[1]。另外,仿真相对于实物模拟,具有降低风险和节约成本的优点,而且可用于预测和论证方案可行性[2]。

智能体模型(ABM,Agent-based Modeling)是一种流行的建模和仿真技术,将人、组织、企业、动物等个体建模为智能体Agent,Agent具有自身状态和行为规则,通过微观个体(Agent)行为和交互活动,可以再现突发现象、动态均衡和非线性结果等,从而推演系统的宏观现象和运行结果,是当前复杂系统研究的重要方法之一,已经广泛应用于社会科学、生物学、化学、地球科学和计算机科学等多个领域[3]。

ABM通过计算机程序模拟系统的动态运行,迄今为止已有众多ABM仿真工具软件,如Swarm、NetLogo、Repast等等,其中在社会生态领域应用最广泛的是NetLogo[4]。NetLogo是基于ABM模型对自然和社会现象进行仿真的可编程建模环境,特别适合对随时间演化的复杂系统进行建模。但是,NetLogo的建模语言Lisp属于一个古老而奇异的编程语言家族,看似简单,实则庞大精深,想精通难度很大。尤其在设计复杂系统调参时,NetLogo无法像脚本语言一样方便配置参数和对比分析不同参数环境下系统输出结果[5]。

鉴于Python语言在数据统计分析、挖掘和可视化上的强大功能,有项目基于Python开发控制NetLogo的平台,如PyNetLogo[4]和NL4Py[5]等,但是同时使用多种语言对于社会科学研究人员来说还是有难度。另外一个项目Mesa基于Python3开发一个ABM框架[6],既可以利用Python语言建立ABM模型,又可以充分利用Python语言的强大功能,进行数据分析和可视化,方便学术研究。论文通过示例介绍Mesa,为ABM仿真研究者提供一个新的选择工具和快速入门途径。

2 Mesa——ABM仿真框架

Mesa是基于Python3开发的、模块化的开源ABM仿真框架,可用于构建、分析和可视化ABM模型。Mesa从头开始构建,能够借鉴当前主流ABM仿真工具的优势和弥补不足,借助Python语言的优势,Mesa目标是成为一个可以替代基于其他语言的ABM流行框架,比如NetLogo、Repast或MASON。目前Mesa在Github上拥有2.4k个star和588个fork,并且一直处于活跃更新状态。

Mesa的体系架构如图1所示,框架整体由三部分组成,分别是模型(Modeling)、分析(Analysis)和可视化(Visualization)。其中模型(Modeling)包括三部分,即仿真空间(Space)、智能体(Agent)和调度器(Scheduler),Space是Agent的活动场景,Scheduler决定Agent在Space上的活动顺序,Modeling负责配置三个组件。分析(Analysis)模块主要是数据收集器和批处理运行器。可视化包括模型参数设置可视化、仿真场景可视化和仿真结果可视化三部分。

图1 Mesa体行架构

Mesa框架系统文件及其相关功能如下:

agent.py、model.py分别是Agent和Model的基类,由用户依据实际仿真任务进行继承和扩展;space.py是Space空间类,实现了包括Grid、ContinuousSpace、NetworkGrid等仿真空间;time.py实现了调度器功能,包括BaseScheduler、RandomActiation、SimultaneousActivation、StagedActivation等调度策略;datacollection.py和batchrunner.py实现数据收集和批处理不同参数等功能;目录Visualization中的文件Modular-Visualization.py、TextVisualization.py、UserParam.py实现模型可视化、文本可视化和参数可视化功能。

3 仿真示例

通过示例演示Mesa的使用和仿真效果,选择典型的病毒传播模型SIR作为仿真案例。在SIR中,种群(Population)内个体的状态可分三类:

(1)S:易染状态(Susceptible),即健康状态;

(2)I:感染状态(Infected),处于感染状态的个体,可以感染其他健康状态个体;

(3)R:移除状态或者恢复状态(Removed or Recovered),也称为免疫状态,即个体被感染后恢复,不再被感染,也不感染其他个体。

设S(t)是t时刻“S”状态的个体数,I(t)是t时刻“I”状态的个体数,R(t)是t时刻“R”状态的个体数,N(t)是t时刻整个种群的个体数量,个体接触率为λ,治愈率为μ,则agent状态迁移图如图2所示。

图2 SIR模型状态迁移图

设种群总数为固定值N,则有式(1)的微分方程组:

在传统的仿真中,基于公式(1)计算仿真结果,能看到标准的图形,但与现实不符。基于ABM的仿真,每个个体随机移动,接触率与种群密度和移动模型相关。设个体间传染概率为β,恢复概率为γ,当易感染agent同时接触n个感染agent时,感染概率是n*β。

依据Mesa框架编写3个代码文件:

(1)agent.py实现People类,继承Mesa的智能体基类Agent,设置agent具有三种状态及其状态改变规则,通过代码:

实现agent的简单随机游走功能。

(2)model.py实现SIR类,继承Mesa的智能体基类Model,主要是配置仿真空间、调度器、数据收集器、生成agent等,关键代码如下:

(3)server.py实现可视化web服务器:

定义自定义函数sir_portrayal(agent),设计agent在仿真空间的形状、颜色等信息;

设置画布、大小,并将函数sir_portrayal(agent)传递给画布:

设计收集数据的可视化图表:

设置四个仿真模型参数,用滑块设置默认值、最小值、最大值和step步长:

配置可视化文本服务器,包括模型、画布、图表、参数等信息:

仿真运行界面如图3所示:

图3 仿真可视化界面

4 结语

本文介绍了ABM模型仿真在复杂系统研究中的重要作用,重点阐述基于Python的ABM仿真框架Mesa的优势、结构,并通过SIR模型仿真案例描述Mesa的使用方法,为Python用户实现ABM仿真探索一个新方法。

猜你喜欢

示例可视化框架
自然资源可视化决策系统
有机框架材料的后合成交换
思维可视化
框架
Rn上的测度双K-框架
自然资源可视化决策系统
白描画禽鸟(九)
基于知识图谱的我国短道速滑研究可视化分析
10秒记忆
飞吧,云宝