当前位置:首页>python>【Python 代码分享】ABM 教学:Schelling 隔离模型竟如此简单

【Python 代码分享】ABM 教学:Schelling 隔离模型竟如此简单

  • 2026-10-11 08:07:31
【Python 代码分享】ABM 教学:Schelling 隔离模型竟如此简单

原文简介

本文深入浅出地解析了基于 Mesa 框架实现的经典 Schelling 隔离模型。其研究目的在于通过该模型帮助初学者理解 基于主体建模(ABM) 的核心逻辑:即微观个体的局部行为如何涌现出宏观的整体结构。

研究方法:文章通过对 Mesa 官方示例的三个核心文件(model.py、agents.py、app.py)进行代码级拆解,详细分析了主体(Agent)的属性定义、满意度判断逻辑以及搬家规则。

研究结论:实验表明,即便个体只有轻微的“同类偏好”(如希望 40% 的邻居与自己相似),在不断的局部调整后,系统整体也会演化出极度明显的社区隔离现象。这一案例证明了 ABM 在解释社会科学复杂现象中的巨大价值,并为开发者迁移到职业决策、技术采纳等更复杂的 Agent 项目提供了标准范式。

代码链接:https://www.ppmandata.cn/codeBase/2052327426230423553

代码思路

该代码实现了 Schelling 隔离模型的可视化仿真,核心技术流程如下:

环境构建 (model.py):利用 OrthogonalMooreGrid 构建二维网格空间,并根据设定的初始密度(Density)随机分布两类 Agent(少数派与多数派)。

主体决策 (agents.py):

感知:Agent 扫描其周围 radius 范围内的邻居。

判断:计算同类邻居占比。若占比低于预设的 Homophily(同类偏好阈值),则标记为“不满意”。

行动:不满意的 Agent 会随机寻找网格中的空格子搬迁。

动态展示 (app.py):集成 SolaraViz 渲染器,通过滑块(Slider)实时调节偏好阈值、主体密度等参数,并以折线图形式监测系统整体“满意度”的变化。

核心代码展示

class SchellingAgent(CellAgent):    def step(self) -> None:        # 1. 获取邻居并计算同类比例        neighbors = list(self.cell.get_neighborhood(radius=self.radius).agents)        valid_neighbors = len(neighbors)        # 计算同类邻居数量        similar_neighbors = len([n for n in neighbors if n.type == self.type])        # 计算比例(无邻居时视为满意)        if valid_neighbors > 0:            similarity_fraction = similar_neighbors / valid_neighbors        else:            similarity_fraction = 1.0        # 2. 状态判断:低于同类偏好阈值则不满意        if similarity_fraction < self.homophily:            self.happy = False            # 3. 执行搬家:随机移动到模型中的空格子            self.cell = self.model.grid.select_random_empty_cell()        else:            self.happy = True            self.model.happy += 1

结果展示

代码链接:https://www.ppmandata.cn/codeBase/2052327426230423553

C0139

转发本推文到朋友圈

添加客服

发送保留2小时并集齐10个点赞的截图

即可免费领取代码

点击阅读原文,直达代码链接

最新文章

随机文章