Python中基于代理的模型模拟入门2025 年 1 月 5 日 | 阅读 9 分钟 基于代理的建模(ABM)是一种强大的仿真技术,通过对环境中个体代理之间的相互作用进行建模,帮助科学家和研究人员理解复杂系统。这种方法在研究由众多独立实体互动产生的整体行为的系统时尤为有用。Mesa 是一个在 Python 中专门用于构建和运行基于代理模型的开源框架。本综合指南将提供 Mesa 的深入概述,涵盖其核心概念、安装、组件、高级功能、可视化以及基于代理建模的实际应用。 关键概念Agent (代理)代理是根据其内部状态和规则做出决策并执行动作的独立实体。每个代理独立工作,但可以与其他代理和环境进行交互。在 Mesa 中,代理通常作为从 Agent 类派生的 Python 对象来实现。这些代理可以代表各种实体,例如人群中的个体、生态系统中的动物或物理系统中的组件。 环境环境是代理存在和互动 Thus 的空间。它可以采用各种形式,例如网格、网络或连续空间。环境为代理互动提供了背景,并且可以拥有自己的属性和规则。例如,在网格环境中,代理占用单元格,它们的互动通常仅限于相邻单元格。在网络环境中,代理是连接的节点,代表关系或交互。 调查表调度器是决定仿真步骤中代理执行动作顺序的组件。可以使用各种调度策略,例如随机激活、顺序激活或基于优先级激活。调度策略的选择会显着影响模型的行为和结果。Mesa 提供了各种调度器,包括 RandomActivation、SequentialActivation 和 StagedActivation。 模型模型是包含环境、代理和调度器的整体框架。它负责初始化仿真、管理代理以及控制仿真流程。模型类通常继承自 Mesa 的 Model 类。除了管理代理和环境之外,模型还可以包含数据收集、监控和分析的组件。 安装 Mesa要开始使用 Mesa,您需要使用 pip 安装它。Mesa 与 Python 3.6 及更高版本兼容。要安装 Mesa,请在终端中运行以下命令: 此命令将安装 Mesa 及其依赖项,让您可以开始构建基于代理的模型。 Mesa 模型的基本组件要在 Mesa 中创建基本的基于代理的模型,您需要定义以下组件:
示例:简单的金钱模型让我们创建一个简单的基于代理的模型,其中代理最初拥有一些金钱,并随机将金钱分配给他们的邻居。此模型将演示 Mesa 的基本组件和功能。 定义 Agent 类首先,我们定义 Agent 类。每个代理将具有一个表示其金钱数量的财富属性。代理的行为在 step 方法中定义,其中代理随机选择另一个代理并向其发送一单位金钱。 定义 Model 类接下来,我们定义 Model 类。该模型初始化环境、创建代理并管理调度器。在此模型中,我们使用网格环境 (MultiGrid) 和代理的随机激活。 运行模型要运行模型,我们创建一个 MoneyModel 类的实例并在循环中调用 step 方法。我们还使用 DataCollector 收集和分析数据。 此模型演示了 Mesa 模型的基本结构和功能。通过定义 Agent 和 Model 类、初始化环境以及管理调度器,您可以创建和运行基于代理的仿真。 Mesa 的高级功能Mesa 提供了多项高级功能,可增强基于代理建模的能力和灵活性。这些功能包括批量运行、可视化和特定类型环境的扩展。 批量运行批量运行允许您使用不同的参数运行多个仿真并收集结果以供分析。这对于探索参数空间和了解不同参数如何影响模型行为非常有用。Mesa 提供 BatchRunner 类来实现此目的。 在此模型中,BatchRunner 使用不同的代理数量 (N) 值运行 MoneyModel 并收集结果。compute_gini 函数计算每个仿真中基尼系数(不平等度量)。 可视化Mesa 包含一个内置的可视化模块,允许您在仿真过程中可视化模型和代理。这对于理解模型动态和呈现结果很有帮助。 要使用可视化模块,您需要创建可视化组件,例如用于基于网络的模型和定义服务器和可视化类的 CanvasGrid。 在此模型中,我们使用 agent_representation 函数定义了代理的表示,并创建了一个用于可视化的 CanvasGrid。ModularServer 类管理可视化服务器,并允许您通过 Web 浏览器与模型进行交互。 扩展和自定义环境Mesa 的模块化设计允许您通过附加组件和自定义环境进行扩展。例如,您可以使用 NetworkGrid 类创建基于网络的模型,或使用 ContinuousSpace 类创建连续空间模型。 在此模型中,我们使用 NetworkGrid 和 NetworkX 生成的随机图创建了一个基于网络的模型。代理放置在网络的节点上,它们的交互基于网络结构。 Mesa 基于代理建模的应用基于代理建模在社会学、经济学、生态学和流行病学等各个领域都有广泛的应用。以下是一些示例: 社会科学
经济学
生态
流行病学
城市规划
Mesa 基于代理建模的高级主题校准和验证
敏感性分析
参数扫描
与经验数据进行比较
案例研究和示例为了说明 Mesa 在不同领域的应用,以下是一些使用 Mesa 开发的基于代理模型的案例研究和示例: 案例研究 1:模拟传染病的传播研究人员使用 Mesa 开发了一个城市地区新冠病毒传播的基于代理的模型。该模型包括代表个人、家庭、工作场所和学校的代理。代理根据他们的日常活动在不同地点之间移动,并相互互动,从而通过接触传播病毒。该模型整合了有关人口密度、出行模式和感染率的真实数据。通过模拟各种场景,研究人员能够评估各种干预措施的影响,例如封锁、社会疏远和疫苗接种运动。 案例研究 2:模拟城市交通流量城市规划者使用 Mesa 开发了一个城市交通流量的基于代理的模型。该模型包括代表车辆、行人和交通信号灯的代理。代理根据真实交通数据遵循驾驶、互动和决策的规则。该模型允许规划者测试各种交通管理策略,例如改变交通信号灯时序、道路封闭以及引入新的公共交通路线。模拟识别了潜在的瓶颈,并评估了各种干预措施在减少拥堵和改善交通流量方面的有效性。 |
介绍 datetime 中有一个 weekday() 函数。Python 的 date 类会生成一个表示星期几的整数,其中星期一为 0,星期日为 6。这是一种在给定日期查找星期几的实用方法,适用于多种用途,包括数据...
阅读 3 分钟
? Python 中的元组与列表类似,都是有序的元素集合,但元组是不可变的。这种不可变性意味着一旦创建了元组,就不能修改、添加或删除其元素。元组通过用括号括起来的逗号分隔的值来定义。例如,`my_tuple = (1,...
7 分钟阅读
图,那些看起来纠缠不清、带有节点和线条的东西,在数学中非常有用。它们有助于解决计算机网络或研究化学品形状等棘手问题。它们也是解决城市交通、寻找最佳路线甚至破译...
阅读 16 分钟
Python 在处理时间和复杂性方面效率更高,它可以预测时间序列统计数据、获取实时数据或处理任何其他与时间相关的麻烦。ctime 模块是 Python 中处理时间相关问题的关键模块。本文将……
阅读 3 分钟
Python 对象检查中的 '_eq_'、'is' 和 '==' 之间的区别是 Python 编程中的一个基本组成部分,它使开发人员能够评估对象的相等性和身份。在 Python 中,对象是核心——变量、数据结构、函数等都是对象……
7 分钟阅读
Python 中的“as”关键字 Python 以其灵活性和可读性而闻名,它具有许多使编码更容易并增加功能的功能。其中一个功能是“as”关键字,它是一个用于处理异常、别名和导入的有用工具。本文深入探讨了该关键字的细微差别...
阅读 8 分钟
PySpark 是 Apache Spark 的 Python API,为大规模数据处理提供了强大的框架。PySpark 的关键功能之一是 withColumn 函数,它允许您在 DataFrame 中添加、更新或删除列。在本文中,我们将探讨如何……
阅读 3 分钟
灰度化是图像处理中的一项基本技术,它将彩色图像转换为灰度图像。灰度图像在计算上更易于处理,并且经常用于计算机视觉和图像分析应用程序。OpenCV(开源计算机视觉)是一个流行的 Python 包...
阅读 3 分钟
什么是仿射变换?仿射变换是几何变换的一种过程,其中原始图像被变换,使得输出图像保持平行。这保留了直线的共线性和平行性,以及两点之间的距离比。仿射...
5 分钟阅读
引言:在本教程中,我们将学习在 Python 中终止线程的一些不同方法。一般来说,过快地终止线程被认为是糟糕的编程习惯。过早终止可能会使本应正确关闭的宝贵资源保持打开状态。然而,偶尔,您...
阅读 12 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India