AI-For-Beginners 实战任务:用 NetLogo 改造病毒模型,模拟 COVID-19 式传播
AI-For-Beginners 实战任务:用 NetLogo 改造病毒模型,模拟 COVID-19 式传播
导读
本文围绕 AI-For-Beginners 课程《多智能体系统》单元配套的 NetLogo 实战任务展开,目标读者是正在学习多智能体建模(Multi-Agent Modeling)的开发者与学习者。读完本文,你将掌握:如何从 NetLogo 内置模型库中选取现成模型,理解其核心机制(Agent / Patch / Observer),并通过调整参数将其改造为贴近真实世界的仿真——以课程推荐的"用病毒模型模拟 COVID-19 传播"为标杆案例,最终产出一份带视频演示的可复现作品。
一、任务全景:从课程到作业
本任务的作业原文位于 translations/de/lessons/6-Other/23-MultiagentSystems/assignment.md(英文原版见 lessons/6-Other/23-MultiagentSystems/assignment.md),其英文原版全文如下,任务要求非常聚焦:
NetLogo Assignment
Take one of the models in NetLogo's library and use it to simulate a real-life situation as closely as possible. A good example would be to tweak the Virus model in the Alternative Visualizations folder to show how it can be used to model the spread of COVID-19. Can you build a model that mimics a real life viral spread?
Show your work by saving a copy and building a video demo explaining how the model is connected to a real-world situation.
可拆解为三个核心交付物:
- 选模型:从 NetLogo 自带的模型库中任选一个工作模型;
- 改模型:以"尽可能贴近真实情况"为目标对其进行调整——官方给出的标杆示例是在
Alternative Visualizations(替代可视化)文件夹中找到 Virus(病毒)模型,改造它来演示如何建模 COVID-19 的传播; - 展成果:保存模型的副本,并制作一段视频演示,解释模型如何与真实世界场景对应。
这个任务恰好承接了课程正课(lessons/6-Other/23-MultiagentSystems/README.md)里反复强调的一个思想:多智能体系统无需让每个智能体"变聪明",而是通过大量遵循简单规则的个体之间的协同(synergetic / emergent)效应,涌现出整体上的复杂行为。病毒传播模拟正是这一思想的经典载体——每个"人"只是一个移动的个体,但它们的接触网络决定了疫情的整体走向。
二、前置知识:多智能体系统与 NetLogo 基础
在动手改造病毒模型之前,先建立两个层面的认知:为什么多智能体建模适合做疫情模拟,以及 NetLogo 的建模元素有哪些。
2.1 从涌现行为到病毒传播
课程 README 指出,实现智能的一条路径是 emergenter(涌现) 或 synergetischer(协同) 方法:大量相对简单的智能体(Agent)的组合行为,可以导致系统整体表现出更复杂甚至更"智能"的行为。这一思想建立在集体智能、涌现主义与演化控制论之上——也就是所谓的元系统跃迁原则(低层系统正确组合后,高层系统获得额外价值)。
正因如此,多智能体模拟才被实际用于:
- 预测 COVID-19 在全球的传播(课程 README 明确列举的行业应用);
- 模拟城市交通并观察其对交通规则变更的响应;
- 渲染 3D 场景中的人群、控制游戏中的 NPC、让复杂自动化系统中的每个设备成为独立智能体。
作业中选择"病毒模型 + COVID-19"正是这种能力的直接演练:真实世界的传播动力学(接触、传染、恢复/死亡、免疫)被抽象成少数几条智能体规则,复杂的结果从简单规则中涌现。
2.2 NetLogo 的三种世界对象
NetLogo 是一个基于改进版 Logo 语言的多智能体建模环境,课程 README 将它的世界抽象为三类对象,改造病毒模型时你会与这三者全部打交道:
| 对象 | 角色 | 与病毒模型的关系 |
|---|---|---|
| Agent / Turtle | 在场上移动并执行行为的智能体(用 ask turtles [...] 指令批量控制) |
每个 Turtle 就是一个"人"或"宿主" |
| Patch | 场上的方形区域,智能体栖居其上,可被改色、改属性(用 ask patches 控制) |
可表示地理位置/网格,模拟空间接触概率 |
| Observer | 控制整个世界的唯一观察者,所有按钮 handler 都在 observer 模式下执行 | setup、go 按钮背后的逻辑都由它驱动 |
课程 README 还给出了两条最核心的 NetLogo 指令语法,改造模型时会反复遇到:
create-turtles 10
ask turtles [
forward 10
]
create-turtles N:批量创建 N 个智能体;ask turtles [...]:让所有智能体执行括号内代码(turtle 模式);- 若想让智能体按组区分行为,可用
breed [cats cat]定义"品种"——注意单复数两种形式都要给出,因为不同指令会用不同形式保证可读性。
典型的模型代码结构则是以 setup 与 go 两个过程为骨架:
to go [
...
]
界面上的 Setup 按钮负责初始化仿真状态,Go 按钮负责启动循环执行,二者分别对应代码中的处理程序。
2.3 并行执行:小代码、大行为
课程 README 特别强调:多智能体环境的美妙之处在于,运行于 turtle 模式或 patch 模式的代码会被所有智能体同步并行执行。因此,你只需要编程定义单个智能体的局部行为(看多远、动多快、传染概率多高),整个系统就会呈现出远超代码量的宏观行为——这正是"用一点点代码生成复杂涌现行为"的核心心法,也是本次任务改造病毒模型时应当遵循的原则:尽量改参数和局部规则,而不是重写整个模型。
三、实操路线图:把 Virus 模型改造成 COVID-19 模拟
下面给出从零完成本次作业的完整步骤。以课程推荐的"Virus 模型 + COVID-19"为主线,同时保留选其他模型的自由度。
3.1 第一步:打开模型库并定位 Virus 模型
安装并启动 NetLogo 后,通过菜单 File → Models Library(文件 → 模型库)打开内置模型库。模型库按分类树组织(Art、Biology、Social Science、Chemistry & Physics 等),右侧同时提供所选模型的预览与简介。
课程 README 提示的浏览路径是 Biology → Flocking,但本任务的目标模型是病毒模型:在模型库中找到 Virus 及其所在分类(课程作业明确指向 Alternative Visualizations 文件夹中的版本)。打开后,你看到的就是主界面(Interface 区域):
主界面由以下部分组成:
- Interface(界面)区域:
- 主模拟场——所有智能体生活的空间;
- 各种控件——按钮(
setup、go)、滑块(调节各类参数)、开关等; - 图表——用于实时显示仿真的关键参数曲线。
- Code(代码)标签页:NetLogo 程序编辑器,模型逻辑所在地。
3.2 第二步:读懂病毒模型的三类参数
作业要求"尽可能准确地模拟真实情况",因此理解并改造病毒模型的参数是关键。以典型病毒传播模型为例,需要重点关注的参数通常包括:
- 人口/宿主数量:决定场上智能体(Turtle)的总数,对应真实场景中某城市/社区的人口规模;
- 感染概率 / 传播概率:一个健康个体与感染者接触后被传染的可能性,对应 COVID-19 的传染力;
- 接触距离 / 移动范围:决定个体"看多远、走多远",直接影响接触网络,对应现实中的社交距离与出行半径;
- 恢复时间 / 死亡率:个体从感染到恢复或死亡的时间与概率,对应病程周期与病死率;
- 免疫比例(初始免疫/康复免疫):对应疫苗接种率或既往感染产生的免疫力。
改造建议:将接触距离(视野范围)调小来模拟"封控/社交隔离",将移动范围缩小来模拟"居家隔离",将感染概率按 COVID-19 的流行病学参数(如基本再生数 R₀ 的量级)校准——课程 README 在讨论 Flocking 模型时给出了同样的调参思路:把视野降到 0,所有智能体"失明",群体行为立刻瓦解。病毒模型中同理:把接触半径降到 0,传播自然停止。
3.3 第三步:保存副本并调整参数
由于仓库是只读的、且任务本身就是"保存一份你自己的副本",正确做法是:
- 在 NetLogo 中通过 File → Save As 将模型另存为自己的副本(例如
covid19-spread.nlogo),保留原始模型不动; - 在副本上逐一修改上述参数并运行,观察图表中"易感—感染—恢复"(SIR 型)曲线随参数的变化;
- 尝试极端参数组合做对照实验(如"零隔离" vs "严格隔离"),这既是任务要求的"尽可能贴近真实",也是验证你对模型机制理解的最好方式。
3.4 第四步:录制并讲解视频 Demo
任务要求"通过保存副本并制作视频演示来说明模型与真实世界场景的关联"。一个合格的演示视频应包含:
- 模型介绍:说明选了哪个模型、改动了哪些参数;
- 真实世界映射:逐一说明"模型里的 Turtle ↔ 真实的人""接触半径 ↔ 社交距离""感染概率 ↔ 传染力""恢复/死亡 ↔ 病程与病死率"等映射关系;
- 仿真展示:运行改造后的模型,展示不同参数组合下的疫情曲线差异;
- 结论:模型揭示了哪些关于病毒传播的机制(如:为什么降低接触可以压平曲线)。
四、进阶理解:从反应式到慎思式智能体
本次任务改造的病毒模型本质上是反应式智能体(reactive agents)——它们只对环境变化做出简单响应。但课程 README 指出,多智能体系统还有另一类:慎思式智能体(deliberative agents),它们能推理、规划并主动发起行动。
一个典型例子是"旅行订票助手":它需要与其他智能体通信,查询航班与酒店价格、谈判最优价格、最终在主人确认后完成预订。为此,智能体间通信需要具备:
- 知识交换标准语言:如 KIF(Knowledge Interchange Format)、KQML(Knowledge Query and Manipulation Language),基于言语行为理论设计;
- 协商协议:基于不同拍卖类型;
- 共同本体(Ontology):保证各方对同一概念的理解一致;
- 能力发现机制:让智能体发现其他智能体能做什么。
慎思式智能体的经典架构是 BDI(Belief-Desire-Intention):
- Beliefs(信念):对环境的认知,可结构化为知识库或规则集;
- Desires(愿望):智能体想要达成的目标(如助手的目标是订成旅行、酒店智能体的目标是利润最大化);
- Intentions(意图):为实现目标而计划的具体行动,通常改变环境并触发与其他智能体的通信。
如果你在完成本次作业后想继续深入,可以参考 lessons/6-Other/23-MultiagentSystems/README.md 中提到的 JADE 等平台来搭建真正的慎思式多智能体系统。
五、备选模型:用其他库内模型模拟真实场景
如果不想使用病毒模型,课程 README 还推荐了多个可用于"映射真实世界"的现成模型,均可作为本次作业的替代方案:
| 模型(模型库路径) | 真实世界映射 | 可调关键参数 |
|---|---|---|
| Biology → Flocking | 鸟群/鱼群涌现行为、群体决策 | 分离度(separation)、视野范围(viewing range) |
| Art → Fireworks | 烟花可视为单个火流的集体行为 | 粒子数量、速度等 |
| Social Science → Traffic Basic / Traffic Grid | 城市交通(1D/2D 网格、有无红绿灯) | 最大车速、驾驶员视野(刹车距离) |
| Social Science → Party | 社交聚会中人群如何聚集成群 | 使群体"幸福度"最快提升的参数组合 |
以交通模型为例,每辆车只遵循两条规则:前方空间为空则加速(不超过最大速度),看到障碍则刹车(刹车距离可由"驾驶员视野"调节)——这与病毒模型殊途同归:用极简的个体规则产生接近真实的宏观现象。
六、评估要点与结语
回看任务要求,判断作品是否达标可以从三方面自查:
- 模型与现实的对应关系是否讲清楚——视频中必须明确每个模型元素对应的真实世界对象;
- 是否真正"改造"而非"照搬"——参数调整或局部规则改动应体现对真实情况的考量;
- 是否形成闭环——保存副本 + 视频演示 + 结论解读三者齐备。
正如课程 README 的结论所述:多智能体系统可以呈现截然不同的形态、应用于大量场景,但共同点是聚焦个体智能体的简单行为,借助协同效应实现整个系统的复杂行为。本次 NetLogo 病毒模型作业,就是你亲手验证这一原理的起点——一段短代码、一群简单个体,就能涌现出疫情的起伏曲线。
延伸学习提示:本单元完整的模型讲解、Flocking 三规则(Alignment 对齐 / Cohesion 内聚 / Separation 分离)的实现细节,以及课后自测题,均可回到 lessons/6-Other/23-MultiagentSystems/README.md 继续研读;德语版本见 translations/de/lessons/6-Other/23-MultiagentSystems/README.md。

