原文简介
本文深入浅出地解析了基于 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