来源“集智”俱乐部
导语
“Agent建模讲义”系列文章介绍复杂系统、基于主体的建模(Agent Based Model, ABM)、NetLogo仿真模拟等主题。ABM主要聚焦于构成系统的组分个体(即Agent,一般译为主体或者智能体),尝试将它们的微观互动活动和系统整体的宏观结果有机联系起来,其基本思想是:通过对若干主体、环境、主体和主体之间以及主体和环境之间互动活动的建模表达,来刻画和描述现实世界中的复杂现象。**************
关键词:复杂系统,计算仿真,Agent建模,NetLogo********** 高德华 山东工商学院副教授 | 作者复杂系统与计算社会学** **| ****来源
0. 引子
最近在准备这学期要开设的《ABM入门》课程。因为学时极其有限,所以将重点内容聚焦于回答“ABM是什么”和“ABM怎么用”两大基础问题。
在正式开课之前,作为一个引子,先聊一聊ABM在现代科学研究中究竟“能干什么”吧。
要弄清楚ABM在现代科学研究中的地位和作用,最好从科学研究范式发展过程说起。那么,什么是科学研究的范式呢?
范式(paradigm)一词较早由美国著名科学哲学家Thomas S. Kuhn在1962年出版的《科学革命的结构》一书中提出,指的是常规科学所赖以运作的理论基础和实践规范,是从事某一科学的科学家群体所共同遵从的世界观和行为方式。随着科学的发展,范式的基本理论和方法也在不断地发生变化。一般来说,一种新范式的产生,一方面是由于科学研究范式本身的发展,另一方面也源自于外部环境的推动。
迄今,科学研究范式经历了4个不同的发展阶段。
科学研究范式(来源:Gray 2009)
最近,也有人在此基础上提出了“第五范式”的概念。但无论如何,我们看到,不同范式都有着自己诞生和发展的特殊时代背景,他们所依赖的核心观点和方法论的不同,造就了各自的独特优势;当然,也有相当的局限性,这决定了他们具有各不相同的研究目的和适用范围。
ABM是建立在计算机仿真模拟第三范式之上的。其作为一种科学方法论的提出,较早可追溯到上个世纪中后期人们对经济学、社会科学及工程领域中广泛存在的复杂系统和复杂现象的探索。如阿瑟领导开发的人工股票市场模型、谢林的居住隔离模型、朗顿的人工生命模型等等,几乎都是在这一时期提出和发展起来的。通过借助于计算机平台,ABM允许在一个人工搭建的虚拟环境中创建若干具有自治性的、“活”的主体(Active agents),这些主体之间以及主体同它们赖以生存的环境之间彼此交互作用,进而在系统的宏观层次上涌现出较为复杂的现象及规律。据此,ABM能够帮助研究者们在微观个体行动和宏观结果之间建立起连接的“纽带”,并且其基于仿真(Simulation)的本质特征也使得人们开展一系列低成本、可控性的计算实验分析和研究成为可能。
自底向上的涌现(来源:Monostori 2008)
上述文献基本勾勒了ABM及其发展应用的现状和前沿动态。我们将在下一讲介绍ABM入门参考书目,并正式开启探索ABM的神秘之旅。 **
1. 部分阅读材料
历时一个多月,终于赶在十一假期之前做出了授课所需的全部课件ppt。虽然混迹于以ABM为首的非主流科研最边缘十几年,但是当翻出多年来的所有珍藏作一次系统的梳理,面对一篇篇经典佳作,回忆起自己一路走来的辛酸历程,感慨之余也是收获颇丰。也许这就叫温故而知新吧。
ABM由于其自身原因而拥有着十分庞杂的知识体系。作为一门面向初学者的入门级导论课程,笔者也无意于包罗万象,而是更注重和聚焦于对ABM基本概念和基础知识的讲授。我们会在每一具体章节中结合授课内容给出相关文献阅读清单,这里则仅列出复杂系统理论和ABM的部分经典书目,并围绕其前沿进展廖举数篇文献,以期能够有助于加深学员对ABM的认识和理解。
复杂系统理论基础
梅拉妮·米歇尔著. 唐璐译. 复杂(第2版). 湖南科学技术出版社, 2018 * 约翰·霍兰著. 周晓译. 隐秩序: 适应性造就复杂性. 上海科技教育出版社, 2000 * 约翰·霍兰著. 陈禹等译. 涌现: 从混沌到有序. 上海世纪出版集团, 2006 * 欧阳莹之著. 田宝国等译. 复杂系统理论基础. 上海科技教育出版社, 2002 * 何大韧等编著. 复杂系统与复杂网络. 高等教育出版社, 2009 * John H. Miller. Complex Adaptive Systems : An Introduction to Computational Models of Social Life. Princeton University Press, 2011
******ABM方法论
Averill M.Law 著,范文慧 译. 仿真建模与分析(第5版). 清华大学出版社, 2017 * 方美琪和张树人编著. 复杂系统建模与仿真(第2版). 人民大学出版社, 2011 * Nigel Gilbert. Agent-Based Models (2nd edition). Sage Publications, 2020 * Uri Wilensky and William Rand. An Introduction to Agent-Based Modeling: Modeling Natural, Social, and Engineered Complex Systems with NetLogo. The MIT Press, 2015
期刊文献
Davis, J. P., Eisenhardt, K. M., & Bingham, C. B. (2007). Developing Theory Through Simulation Methods. Academy of Management Review, 32(2), 480–499. * Macal, C. M. (2016). Everything you need to know about agent-based modelling and simulation. Journal of Simulation, 10(2), 144–156. * Heath, B., Hill, R., & Ciarallo, F. (2009). A Survey of Agent-Based Modeling Practices (January 1998 to July 2008). Journal of Artificial Societies and Social Simulation, 12(4). * Gagliolo, M. (2017). Simulate this! An Introduction to agent-based models and their power to iImprove your research practice. International Review of Social Psychology, 30(1) * Squazzoni, F., Polhill, J. G., Edmonds, B., Ahrweiler, P., Antosz, P., Scholz, G., Chappin, É., Borit, M., Verhagen, H., Giardini, F., & Gilbert, N. (2020). Computational Models That Matter During a Global Pandemic Outbreak: A Call to Action. Journal of Artificial Societies and Social Simulation, 23(2), 10. * An, L., Grimm, V., Sullivan, A., Turner II, B. L., Malleson, N., Heppenstall, A., Vincenot, C., Robinson, D., Ye, X., Liu, J., Lindkvist, E., & Tang, W. (2021). Challenges, tasks, and opportunities in modeling agent-based complex systems. Ecological Modelling, 457, 109685.
**
**
**
**
2. 复杂系统和Agent模型
**
**包括ABM在内的所有仿真模拟几乎都可看作是一种基于模型的活动;而模型则是根据特定研究目的而针对某一现实系统(研究问题)所作出的抽象概括和描述。 系统、模型和仿真的关系 现实世界中存在许许多多的复杂现象,如股票市场震荡、宏观经济周期、国际贸易往来、城市交通拥堵、社交网络舆情传播、新技术扩散、企业间竞争与合作等等。虽然在各个不同的学科领域里,人们围绕复杂系统给出的定义描述不尽相同,但是对其本质特征的认识则是非常一致的,即:同简单系统相比而言,复杂系统更加注重和强调构成系统的各组成部分(组分)之间的非线性交互作用。由于这种组分之间非线性交互作用的存在,系统在整体层次上所体现出的复杂现象完全迥异于各系统组分自身属性的简单累加。这就是所谓的“涌现”(Emergence),亦即:1 + 1 != 2。 可以说,系统组分之间存在非线性交互作用是所有复杂系统的核心属性,而涌现则是复杂系统现象最具魅力和神奇的地方。系统在整体层次上所涌现出的这种复杂现象,既不能简单等同于任何单一组分的自身行为表现,也不是它们的线性加和,而是有着自身的独特模式及规律。这种独特模式及规律,有时可能是反直觉的,并且通常无法仅仅根据组分个体的行动来作出预测。 对涌现基本内涵的理解 比如城市道路上的车辆。尽管拥堵是每一辆车(Agent)都不愿意看到的,它们可能都以尽快到达目的地作为最根本的行动目标,但是由于前后各车辆之间彼此相互作用和影响,交通拥堵现象在许多情况下仍然真真实实地发生了。 traffic 2 lanes.nlogo模型 再比如鸟群的形成。我们仅假设每一只鸟(即Agent个体)的飞行行动遵循以下三条简单规则,就可以通过仿真模拟观察到飞鸟随时间而逐渐聚集起来的动态过程。
flocking.nlogo模型 认识了复杂系统之后,我们再来看Agent建模(Agent-based modeling, ABM)。作为众多建模方法中的一种,ABM主要聚焦于构成系统的组分个体(即Agent,一般译为主体或者智能体),尝试将它们的微观互动活动和系统整体的宏观结果有机联系起来。其基本思想就是:通过对若干主体、环境、主体和主体之间以及主体和环境之间互动活动的建模表达,来刻画和描述现实世界中的复杂现象。这其中:
Agent模型的基本结构(来源:Li et al. 2016)
概括来讲,ABM的核心优势或者适用条件包括: * 系统拥有中等数量规模的主体,并且它们之间存在非线性作用关系; * 主体具有自治性、异质性等特征; * 主体之间的互动活动是相当复杂的; * 主体和环境之间的互动活动也相当复杂;
但这里需要指出的是:我们总是围绕特定的研究目的来开展建模工作。包括ABMs在内的几乎所有模型,在对现实系统进行刻画和描述的过程中,总是强调某些方面,同时忽略另外一些方面。而究竟应当强调强调哪些方面、忽略哪些方面,则完全取决于研究工作的根本目的,如描述、诠释理论、解释甚至预测等。
**
**
3. NetLogo软件
**
**ABM相关开发软件有很多,大体上可概括为以下四类:
四是采用上述三者相混合的方式,如AnyLogic或者Repast Simphony等等。
国际学术期刊《Computer Science Review》在2017年发表了一篇文章,题为“Agent Based Modelling and Simulation tools: A review of the state-of-art software” (Abar等, 2017),对ABM相关80多种软件/工具包作了较为系统的梳理和综述。
在本课程讲义中,我们主要使用NotLogo软件。该软件由美国西北大学Uri Wilensky教授团队负责开发和维护,软件主页链接: https://ccl.northwestern.edu/netlogo/。
为什么选用这款开发软件呢?我们在之前的一篇推文【ABM | NetLogo:打开复杂系统奇幻世界的一把钥匙】中曾简要介绍过该软件的主要特征,具体包括: 第一,相比于AnyLogic和Matlab等商业化软件,NetLogo开源免费,而且拥有强大的社区支持(如Github、Stackoverflow)。这无疑是广大初学者的福音。 第二,上手简单。NetLogo界面异常地简单而清晰,编程语法几乎完全接近自然语言。即便没有任何编程基础,也很容易轻松上手。 第三,就是NetLogo拥有丰富的案例库,内容涵盖生物、化学、复杂网络、社会科学等众多领域。既有完整示例,也有专门针对基本编程语法的code examples。可以说,不管你来自哪一研究领域,无论你是初学菜鸟还是编程高手,案例库中总有一款适合你,助你仿真编程一臂之力。
第四,NetLogo虽然界面和编程语法都极其简单,但这似乎并不影响其强大的功能,如Behavior space模块用于实验设计和仿真实验、HubNet模块用于分布式 (参与式) 仿真、System Dynamics模块用于系统动力学建模等等。
下一讲,我们将结合一个简单例子来介绍NetLogo软件的基本操作。 **
**
**
**
4. NetLogo模型库
****NetLogo软件的强大优势之一就是自带丰富的模型库。用鼠标左键点击用户界面的上方菜单File,找到模型库Models Library,再点击进入模型库界面,如图所示。界面的右边部分是对模型库的一个简单说明,左边部分就是具体的案例目录。
NetLogo模型库中的例子,大概可分为以下几类:
5. 简单随机游走的
NetLogo仿真建模示例
随机游走是概率论与随机过程领域中用于描述动态随机现象的一种基本随机过程。也是数学史上的一个著名问题。大量研究工作表明:液体中悬浮微粒的布朗运动、空气中的烟雾扩散、股票市场的价格波动等动态随机现象均可用随机游走模型进行描述。随机游走的理论和模型在物理、化学、生物学、生态学和心理学等众多领域得到了非常广泛的应用。
1905年,英国统计学家卡尔·皮尔逊(Karl Pearson)在《自然》杂志上公开求解随机游走(Random walk)问题:(1)如果一个喝醉的酒鬼在走路时每一步的方向和大小都完全随机(如图所示),那么经过一段时间之后,在什么地方找到他的可能性最大?(2)进而随着时间的增长,酒鬼是否还能够回到出发的地点?
接下来,我们讨论如何在NetLogo中对这一问题进行建模与仿真实现。
模型世界的初始化
第一步:在用户界面中,保持模型世界world的默认设置不变,并依次添加setup和go按钮控件;添加输入框控件创建全局变量end-time,并在编辑窗口中将其类型设置为数值型(Number)。退出输入框控件的编辑窗口后,在输入框中键入所需的仿真运行时间步数500。
第二步:切换到程序代码窗口,键入如下setup过程的程序代码。在使用原语clear-all重置系统设置后,我们可使用原语with筛选出Patch(0, 0),并通过原语ask和set对其颜色属性作出更改,以清晰标识Turtle(酒鬼)主体的初始位置。然后,创建1个Turtle(酒鬼)主体并且对其形状和颜色属性参数进行设置。
此外,这里还使用了原语pen-down来可视化显示Turtle主体的运动轨迹。需要说明的是:在模型世界world默认设置下,NetLogo会自动将通过原语create-turtles所创建的Turtle主体置于world的中心位置即Patch(0, 0)处。因此,这里不必再对其坐标参数xcor和ycor另作设置。
最后,使用原语reset-ticks对NetLogo时间计数器ticks进行重置,并以此作为setup过程的结束。
to setup ` clear-all `` ask patches with [ pxcor= 0 and pycor = 0 ] `` [ set pcolor red ] ;; 设置Patch(0,0)的颜色属性为红色, `` ;; 以标识Turtle(酒鬼)主体的初始位置 `` create-turtles1 ;; 创建Turtle(酒鬼)主体 `` [ set shape "person" ;; 设置形状属性 `` set color yellow ;; 设置颜色属性 `` pen-down] ;; 设置变量pen-mode取值为down,`` ;; 显示Turtle主体运动轨迹 `` `` reset-ticks ;; 重置时间计数器ticks``end`
切换回用户界面,点击setup按钮,将看到模型世界的初始化状态如图所示。
刻画随机行走的酒鬼
**
**
go过程的核心任务就是在每一仿真时刻,通过使用原语ask令Turtle(酒鬼)主体随机地选择某一朝向(程序代码中,表达为使用原语right随机地旋转某一角度),然后向前方行进1步(使用原语forward)。
除此之外,我们在go过程的开始位置使用原语if定义了一个条件执行语句,借助于输入框控件创建的全局变量end-time,当仿真时钟ticks >= end-time时,调用原语stop强制中断程序代码执行,从而实现了对仿真运行时间的控制。
在go过程的结束位置,使用原语tick向前推进仿真时钟,进入下一循环周期。
go过程的完整程序代码如下。某一次仿真运行至第500仿真时刻的输出结果如图。
to go ` if ticks >= end-time [ stop] `` ask turtles [ right random 360 ;; 将Turtle主体的朝向随机地旋转某一角度 `` forward 1 ] ;; 向前行进一步 `` `` tick``end`
重复多次运行仿真程序(比如通过使用Netlogo软件的行为空间Behave space),我们便可统计计算给出经历一段仿真时间后,酒鬼(Turtle)出现在某个地方的频度(概率)。至此,我们也就回答了皮尔逊的第一个问题,即经过一段时间之后,酒鬼(Turtle)主体将出现在什么地方。 那么,接下来的第二个问题——酒鬼(Turtle)能否或者何时才能回到出发的地点?——又将如何在NetLogo中予以仿真实现呢?我们权且作为一个思考练习,留待读者自行尝试作答。