基于元胞自动机的室内人员疏散基础模型
一、模型核心架构
-
网格划分与状态定义 空间离散化:将疏散区域划分为 N×N的均匀网格,每个元胞代表 0.4m×0.4m的物理空间。 状态分类: 0:空闲单元格(可行走区域) 1:人员(初始随机分布) 2:障碍物(墙壁、家具) 3:出口(目标位置)
-
参数初始化
N = 50; % 网格尺寸 density = 0.3; % 人员密度(30%) exit_pos = [N, round(N/2)]; % 出口位置(单出口) exit_size = 3; % 出口宽度(元胞数) grid = init_grid(N, density, exit_pos, exit_size); % 初始化网格
二、核心算法流程
-
静态场计算(Dijkstra算法)
-
以出口为中心生成距离场,引导人员向最短路径移动:
function S = computeStaticField(grid, exit_pos) [rows, cols] = size(grid); S = inf(rows, cols); S(exit_pos(1), exit_pos(2)-exit_size:exit_pos(2)+exit_size) = 0; queue = exit_pos; while ~isempty(queue) [r, c] = queue(1,:); neighbors = [r-1,c; r+1,c; r,c-1; r,c+1]; % 4邻域 for k = 1:size(neighbors,1) nr = neighbors(k,1); nc = neighbors(k,2); if nr>=1 && nr<=rows && nc>=1 && nc<=cols && grid(nr,nc)~=2 new_dist = S(r,c) + 1; if new_dist < S(nr,nc) S(nr,nc) = new_dist; queue = [queue; nr,nc]; end end end queue(1,:) = []; end end
-
-
移动规则设计 方向选择:基于静态场梯度下降,选择距离出口最近的邻域方向。 冲突处理: 优先级策略:未移动步数多的行人优先移动。 随机扰动:若多人竞争同一目标格,随机选择移动方向。
-
仿真主循环
function evacuation_simulation() max_steps = 500; % 最大迭代次数 evacuated_count = 0; for t = 1:max_steps new_grid = grid; moved = false(size(grid)); for i = 2:N-1 for j = 2:N-1 if grid(i,j) == 1 && ~moved(i,j) neighbors = get_neighbors(grid, i, j); [~, idx] = min(S(neighbors(:,1), neighbors(:,2))); target_r = neighbors(idx,1); target_c = neighbors(idx,2); if new_grid(target_r, target_c) == 0 new_grid(i,j) = 0; % 原位置清空 new_grid(target_r, target_c) = 1; % 移动到目标格 moved(target_r, target_c) = true; end end end end grid = new_grid; evacuated_count = evacuated_count + sum(grid(exit_pos(1), exit_pos(2)-exit_size:exit_pos(2)+exit_size) == 1); visualize(grid, t, evacuated_count); if evacuated_count >= round(density*N*N) break; end end end
三、关键优化与可视化
-
实时可视化
-
使用热力图显示疏散进度,红色表示人员,绿色表示出口:
colormap([1 1 1; 1 0 0; 0.5 0.5 0.5; 0 1 0]); % 白:空, 红:人, 灰:障碍, 绿:出口 imagesc(grid); title(sprintf('Step: %d, Evacuated: %d', t, evacuated_count));
-
-
性能指标 疏散时间:最后一人到达出口的时间。 冲突率:单位时间内的位置竞争事件数。
四、基础模型扩展
-
多出口支持
-
设置多个出口并动态选择最优路径:
exits = [10,50; 40,50]; % 双出口坐标 exit_pos = select_nearest_exit(grid, exits); % 动态选择最近出口
-
-
动态障碍物模拟
-
引入随机移动的障碍物(如家具移位):
if rand < 0.1 grid(randi(N), randi(N)) = 2; % 随机生成障碍物 end
-
五、实验结果示例
| 参数 | 值 | 影响分析 |
|---|---|---|
| 人员密度 | 0.3人/元胞 | 密度↑→疏散时间↑(指数关系) |
| 出口宽度 | 3元胞(1.2m) | 宽度↑→疏散时间↓(线性关系) |
| 障碍物比例 | 20% | 障碍物↑→路径绕行时间↑ |
参考代码 基于元胞自动机模拟室内人员疏散的最基本模型 www.youwenfan.com/contentcnp/98174.html
六、总结
该基础模型通过静态场引导和冲突优先级策略实现了人员疏散的模拟,核心优势在于:
- 简单高效:4邻域规则降低计算复杂度。
- 可扩展性:支持多出口、动态障碍物等复杂场景。
- 可视化直观:热力图实时反馈疏散进度。
浙公网安备 33010602011771号