Skip to content

Repository files navigation

地铁站人流仿真系统

项目简介

地铁站人流仿真系统是一个基于Python和PyQt5开发的仿真系统,用于模拟地铁站内人群流动情况。系统采用有向图模型构建地铁站拓扑结构,通过智能体模拟乘客行为,实现实时流动仿真、数据分析和可视化展示。

功能特点

核心功能

  1. F1 地铁站拓扑建模

    • 基于有向图构建地铁站拓扑结构
    • 支持多楼层、多出口、多线路
    • 节点包含位置、容量、面积、基础速度等属性
    • 边包含距离、宽度、容量、基础通行时间等属性
  2. F2 人群生成与行为模拟

    • 节点密度计算 :在 simulation_engine.py 的 _update_densities 方法中实现,计算公式为 density = count / area
    • 速度衰减 :在 passenger.py 的 _get_speed_factor 方法中实现,使用了分段函数
    • 完整的状态机:进站→购票→安检→闸机→候车→乘车→出站
    • 基于密度的速度调整
    • 路径重新规划功能
  3. F3 实时流动仿真

    • 离散时间步推进
    • 队列管理和服务模型
    • 冲突检测和解决
    • 动态密度和拥堵系数计算
  4. F4 数据分析与统计

    • 实时数据收集和分析
    • 瓶颈识别和拥堵点分析
    • 热力图生成
    • 详细的分析报告
  5. F5 路径规划与优化

    • 多种路径规划模式:最短时间、最短距离、多目标优化、最少区域切换
    • 路径缓存机制提高性能
    • 多目标优化算法
main.py的运行机制

main.py是一个 批处理模式 的脚本,它的运行流程是:

  1. 快速执行仿真 :

    • 运行100个时间步的仿真( run_simulation 方法)
    • 每10步打印一次进度,但没有任何可视化
    • 所有计算在后台快速完成
  2. 生成静态结果 :

    • 仿真结束后,一次性生成各种静态图像( generate_visualizations 方法)
    • 包括地铁站拓扑图、乘客分布图和密度热力图
  3. 打印分析报告 :

    • 生成并打印分析报告( generate_analytics 方法)
    • 包括乘客统计、密度统计和瓶颈节点
  4. 没有实时仪表板 :

    • run_dashboard 方法被注释掉了
    • 即使未被注释,它也只是在仿真结束后运行

可视化功能

  1. 实时可视化 :

    • 仿真过程中实时显示拓扑图和热力图
    • 实时更新乘客数量和密度数据
  2. 交互式控制 :

    • 提供开始、暂停、停止、重置按钮
    • 允许用户调整仿真参数
  3. 动态数据更新 :

    • 每10步更新一次界面
    • 提供实时数据图表
  • 拓扑图:显示地铁站拓扑结构和乘客分布
  • 热力图:显示密度分布
  • 实时数据:显示乘客数量随时间的变化
  • 分析报告:显示仿真结果的详细分析

技术栈

  • 核心语言:Python 3.13
  • GUI框架:PyQt5
  • 数据可视化:Matplotlib
  • 图论库:NetworkX
  • 数据处理:Pandas, NumPy

安装步骤

1. 克隆项目

2. 安装依赖

pip install -r requirements.txt

或者手动安装需要的包:

pip install PyQt5 matplotlib networkx pandas numpy

使用方法

运行GUI版本

python subway_simulation/gui_qt.py

运行命令行版本

python subway_simulation/main.py

项目结构

地铁站人流仿真系统/
├── subway_simulation/
│   ├── core/             # 核心模块
│   │   ├── station_graph.py      # 地铁站拓扑图模型
│   │   ├── passenger.py          # 乘客对象和行为模拟
│   │   ├── simulation_engine.py  # 仿真引擎
│   │   ├── path_planner.py       # 路径规划器
│   │   └── analytics.py          # 数据分析模块
│   ├── utils/            # 工具模块
│   │   ├── priority_queue.py     # 优先队列
│   │   ├── spatial_hash.py        # 空间哈希
│   │   └── stats_collector.py     # 统计数据收集
│   ├── visualization/    # 可视化模块
│   │   ├── graph_visualizer.py    # 图可视化
│   │   ├── heatmap.py            # 热力图
│   │   └── dashboard.py           # 仪表盘
│   ├── gui.py            # Tkinter GUI(旧版本)
│   ├── gui_qt.py         # PyQt5 GUI(推荐)
│   ├── main.py           # 命令行入口
│   └── requirements.txt  # 依赖配置
├── .trae/                # 项目文档
└── README.md             # 项目说明

核心模块说明

1. 地铁站拓扑图 (station_graph.py)

实现了地铁站的拓扑结构,使用NetworkX构建有向图。每个节点代表地铁站内的一个位置(如入口、售票区、安检区、闸机、站台等),每条边代表位置之间的连接通道。

2. 乘客模拟 (passenger.py)

实现了乘客对象和行为模拟,包括状态机、移动逻辑和路径规划。乘客根据不同状态执行不同的行为,如购票、安检、候车等。

3. 仿真引擎 (simulation_engine.py)

实现了仿真的核心逻辑,包括乘客生成、时间步进、队列管理、冲突检测和密度更新等。

4. 路径规划 (path_planner.py)

实现了多种路径规划算法,包括最短时间、最短距离、多目标优化和最少区域切换等模式。

5. 数据分析 (analytics.py)

实现了数据收集、分析和可视化功能,包括实时数据统计、瓶颈识别和热力图生成。

GUI使用指南

  1. 启动系统:运行 python subway_simulation/gui_qt.py
  2. 设置参数:在左侧控制面板设置仿真步数、乘客生成速率和路径规划模式
  3. 开始仿真:点击"开始仿真"按钮启动仿真过程
  4. 观察结果:在不同选项卡中查看拓扑图、热力图、实时数据和分析报告
  5. 控制仿真:使用"暂停"、"停止"和"重置"按钮控制仿真过程

仿真参数说明

  • 仿真步数:仿真运行的时间步数
  • 高峰期乘客生成速率:高峰期(7-9点,17-19点)的乘客生成速率
  • 平峰期乘客生成速率:平峰期的乘客生成速率
  • 路径规划模式:选择不同的路径规划算法

输出文件

  • heatmap.png:热力图
  • station_graph.png:地铁站拓扑图
  • station_with_passengers.png:带乘客的地铁站拓扑图
  • passenger_flow.png:乘客流量图
  • density_trend.png:密度趋势图
  • state_distribution.png:状态分布图

性能优化

  • 路径缓存:缓存已计算的路径,减少重复计算
  • 空间哈希:使用空间哈希加速碰撞检测
  • 环形缓冲区:使用环形缓冲区存储时间序列数据,避免内存无限增长

About

SubwaySimulationSystem

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages