基于MATLAB的室内人员疏散模拟代码

简介: 基于MATLAB的室内人员疏散模拟代码

基于MATLAB的室内人员疏散模拟代码,使用元胞自动机(Cellular Automata, CA)实现:

1. 初始化参数

% 定义网格尺寸
gridSizeX = 50;
gridSizeY = 50;

% 定义人员数量和初始位置
numPeople = 100;
peoplePositions = randi([1, gridSizeX], numPeople, 2);

% 定义出口位置
exitPosition = [25, gridSizeY]; % 假设出口在底部中央

% 初始化网格,0表示空,1表示人员,-1表示出口
grid = zeros(gridSizeX, gridSizeY);
grid(exitPosition(1), exitPosition(2)) = -1;

% 初始化人员状态
for i = 1:numPeople
    grid(peoplePositions(i, 1), peoplePositions(i, 2)) = 1;
end

2. 更新规则

function newGrid = updateGrid(grid, exitPosition)
    % 获取网格尺寸
    [gridSizeX, gridSizeY] = size(grid);

    % 初始化新网格
    newGrid = grid;

    % 遍历每个元胞
    for i = 1:gridSizeX
        for j = 1:gridSizeY
            % 如果当前元胞是人员
            if grid(i, j) == 1
                % 获取邻居元胞
                neighbors = getNeighbors(grid, i, j);

                % 计算每个邻居元胞的吸引力
                attractiveness = calculateAttractiveness(grid, neighbors, exitPosition);

                % 选择吸引力最大的邻居元胞
                [~, idx] = max(attractiveness);
                chosenNeighbor = neighbors(idx);

                % 如果选择的邻居元胞是出口,则人员疏散成功
                if chosenNeighbor == exitPosition
                    newGrid(i, j) = 0;
                else
                    % 否则,人员移动到选择的邻居元胞
                    newGrid(i, j) = 0;
                    newGrid(chosenNeighbor(1), chosenNeighbor(2)) = 1;
                end
            end
        end
    end
end

function neighbors = getNeighbors(grid, i, j)
    % 获取当前元胞的邻居元胞
    neighbors = [];
    [gridSizeX, gridSizeY] = size(grid);

    % 上下左右四个邻居
    if i > 1
        neighbors = [neighbors; [i-1, j]];
    end
    if i < gridSizeX
        neighbors = [neighbors; [i+1, j]];
    end
    if j > 1
        neighbors = [neighbors; [i, j-1]];
    end
    if j < gridSizeY
        neighbors = [neighbors; [i, j+1]];
    end
end

function attractiveness = calculateAttractiveness(grid, neighbors, exitPosition)
    % 计算每个邻居元胞的吸引力
    attractiveness = zeros(size(neighbors, 1), 1);
    for k = 1:size(neighbors, 1)
        % 距离出口越近,吸引力越大
        attractiveness(k) = -norm(neighbors(k, :) - exitPosition);
    end
end

3. 主函数

function indoor_evacuation_simulation()
    % 定义网格尺寸
    gridSizeX = 50;
    gridSizeY = 50;

    % 定义人员数量和初始位置
    numPeople = 100;
    peoplePositions = randi([1, gridSizeX], numPeople, 2);

    % 定义出口位置
    exitPosition = [25, gridSizeY]; % 假设出口在底部中央

    % 初始化网格,0表示空,1表示人员,-1表示出口
    grid = zeros(gridSizeX, gridSizeY);
    grid(exitPosition(1), exitPosition(2)) = -1;

    % 初始化人员状态
    for i = 1:numPeople
        grid(peoplePositions(i, 1), peoplePositions(i, 2)) = 1;
    end

    % 模拟疏散过程
    for t = 1:100
        % 更新网格状态
        grid = updateGrid(grid, exitPosition);

        % 绘制当前状态
        imagesc(grid);
        colormap([1 1 1; 0 0 1; 1 0 0]); % 空元胞为白色,人员为蓝色,出口为红色
        drawnow;
    end
end
相关文章
|
19天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
19天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
134 14
|
14天前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
|
14天前
|
机器学习/深度学习 算法 安全
【图像处理】使用四树分割和直方图移动的可逆图像数据隐藏(Matlab代码实现)
【图像处理】使用四树分割和直方图移动的可逆图像数据隐藏(Matlab代码实现)
|
14天前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
|
19天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
19天前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
118 5
|
19天前
|
存储 算法 安全
【多目标工程应用】基于MOGWO的地铁隧道上方基坑工程优化设计研究(Matlab代码实现)
【多目标工程应用】基于MOGWO的地铁隧道上方基坑工程优化设计研究(Matlab代码实现)
|
19天前
|
传感器 机器学习/深度学习 编解码
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
|
19天前
|
算法 调度 决策智能
【复现】同时考虑考虑孤岛与重构的配电网故障恢复运行策略(Matlab代码实现)
【复现】同时考虑考虑孤岛与重构的配电网故障恢复运行策略(Matlab代码实现)

热门文章

最新文章