AI-For-Beginners 实战任务:用 NetLogo 改造病毒模型,模拟 COVID-19 式传播

原创2026-10-03 15:22:191,287 阅读
文章标签:教程人工智能机器学习深度学习

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.

可拆解为三个核心交付物:

  1. 选模型:从 NetLogo 自带的模型库中任选一个工作模型;
  2. 改模型:以"尽可能贴近真实情况"为目标对其进行调整——官方给出的标杆示例是在 Alternative Visualizations(替代可视化)文件夹中找到 Virus(病毒)模型,改造它来演示如何建模 COVID-19 的传播;
  3. 展成果:保存模型的副本,并制作一段视频演示,解释模型如何与真实世界场景对应。

这个任务恰好承接了课程正课(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 等),右侧同时提供所选模型的预览与简介。

NetLogo 模型库窗口:左侧为分类树,右侧为模型预览与说明

课程 README 提示的浏览路径是 Biology → Flocking,但本任务的目标模型是病毒模型:在模型库中找到 Virus 及其所在分类(课程作业明确指向 Alternative Visualizations 文件夹中的版本)。打开后,你看到的就是主界面(Interface 区域):

NetLogo 主界面:Interface 区域包含模拟场、控制按钮、参数滑块与图表

主界面由以下部分组成:

  • Interface(界面)区域:
    • 主模拟场——所有智能体生活的空间;
    • 各种控件——按钮(setup、go)、滑块(调节各类参数)、开关等;
    • 图表——用于实时显示仿真的关键参数曲线。
  • Code(代码)标签页:NetLogo 程序编辑器,模型逻辑所在地。

3.2 第二步:读懂病毒模型的三类参数

作业要求"尽可能准确地模拟真实情况",因此理解并改造病毒模型的参数是关键。以典型病毒传播模型为例,需要重点关注的参数通常包括:

  • 人口/宿主数量:决定场上智能体(Turtle)的总数,对应真实场景中某城市/社区的人口规模;
  • 感染概率 / 传播概率:一个健康个体与感染者接触后被传染的可能性,对应 COVID-19 的传染力;
  • 接触距离 / 移动范围:决定个体"看多远、走多远",直接影响接触网络,对应现实中的社交距离与出行半径;
  • 恢复时间 / 死亡率:个体从感染到恢复或死亡的时间与概率,对应病程周期与病死率;
  • 免疫比例(初始免疫/康复免疫):对应疫苗接种率或既往感染产生的免疫力。

改造建议:将接触距离(视野范围)调小来模拟"封控/社交隔离",将移动范围缩小来模拟"居家隔离",将感染概率按 COVID-19 的流行病学参数(如基本再生数 R₀ 的量级)校准——课程 README 在讨论 Flocking 模型时给出了同样的调参思路:把视野降到 0,所有智能体"失明",群体行为立刻瓦解。病毒模型中同理:把接触半径降到 0,传播自然停止。

3.3 第三步:保存副本并调整参数

由于仓库是只读的、且任务本身就是"保存一份你自己的副本",正确做法是:

  1. 在 NetLogo 中通过 File → Save As 将模型另存为自己的副本(例如 covid19-spread.nlogo),保留原始模型不动;
  2. 在副本上逐一修改上述参数并运行,观察图表中"易感—感染—恢复"(SIR 型)曲线随参数的变化;
  3. 尝试极端参数组合做对照实验(如"零隔离" 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 社交聚会中人群如何聚集成群 使群体"幸福度"最快提升的参数组合

以交通模型为例,每辆车只遵循两条规则:前方空间为空则加速(不超过最大速度),看到障碍则刹车(刹车距离可由"驾驶员视野"调节)——这与病毒模型殊途同归:用极简的个体规则产生接近真实的宏观现象。

六、评估要点与结语

回看任务要求,判断作品是否达标可以从三方面自查:

  1. 模型与现实的对应关系是否讲清楚——视频中必须明确每个模型元素对应的真实世界对象;
  2. 是否真正"改造"而非"照搬"——参数调整或局部规则改动应体现对真实情况的考量;
  3. 是否形成闭环——保存副本 + 视频演示 + 结论解读三者齐备。

正如课程 README 的结论所述:多智能体系统可以呈现截然不同的形态、应用于大量场景,但共同点是聚焦个体智能体的简单行为,借助协同效应实现整个系统的复杂行为。本次 NetLogo 病毒模型作业,就是你亲手验证这一原理的起点——一段短代码、一群简单个体,就能涌现出疫情的起伏曲线。

延伸学习提示:本单元完整的模型讲解、Flocking 三规则(Alignment 对齐 / Cohesion 内聚 / Separation 分离)的实现细节,以及课后自测题,均可回到 lessons/6-Other/23-MultiagentSystems/README.md 继续研读;德语版本见 translations/de/lessons/6-Other/23-MultiagentSystems/README.md。

登录后查看全文
AI-For-Beginners