阅读 39

【元胞自动机】基于matlab元胞自动机甲板火灾下人群疏散【含Matlab源码 1291期】

一、元胞自动机简介

1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何顿 · 康威设计了一个电脑游戏 “生命游戏” 后, 元胞自动机才吸引了科学家们的注意.

1983 年 S.Wolfram 发表了一系列论文. 对初等元胞机 256 种 规则所产生的模型进行了深入研究, 并用熵来描述其演化行 为, 将细胞自动机分为平稳型, 周期型, 混沌型和复杂型.

2 对元胞自动机的初步认识 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。

3 元胞的变化规则&元胞状态 典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。

4 元胞自动机的应用 元胞自动机已被应用于物理模拟,生物模拟等领域。

5 元胞自动机的matlab编程 结合以上,我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。

6 一维元胞自动机——交通规则 定义: 6.1 元胞分布于一维线性网格上. 6.2 元胞仅具有车和空两种状态. 在这里插入图片描述 7 二维元胞自动机——生命游戏 定义: 7.1 元胞分布于二维方型网格上. 7.2 元胞仅具有生和死两种状态. 在这里插入图片描述 元胞状态由周围八邻居决定. 规则: 在这里插入图片描述 骷髅:死亡;笑脸:生存 周围有三个笑脸,则中间变为笑脸 少于两个笑脸或者多于三个,中间则变死亡。

8 什么是元胞自动机 离散的系统: 元胞是定义在有限的时间和空间上的, 并且元 胞的状态是有限. 动力学系统: 元胞自动机的举止行为具有动力学特征. 简单与复杂: 元胞自动机用简单规则控制相互作用的元胞 模拟复杂世界.

在这里插入图片描述 9 构成要素 在这里插入图片描述 (1)元胞 (Cell) 在这里插入图片描述 元胞是元胞自动机基本单元: 状态: 每一个元胞都有记忆贮存状态的功能. 离散: 简单情况下, 元胞只有两种可能状态; 较复杂情况下, 元胞具有多种状态. 更新: 元胞的状态都安照动力规则不断更新. (2)网格 (Lattice) 不同维网格 在这里插入图片描述 常用二维网格 在这里插入图片描述 (3)邻居 (Neighborhood) 在这里插入图片描述 (4)边界 (Boundary) 在这里插入图片描述 反射型:以自己作为边界的状态 吸收型:不管边界(车开到边界就消失)

(5)规则(状态转移函数) 定义:根据元胞当前状态及其邻居状况确定下一时刻该元胞状态的动力学函数, 简单讲, 就是一个状态转移函数. 分类 : 总和型: 某元胞下时刻的状态取决于且仅取决于它所有邻居 的当前状态以及自身的当前状态. 合法型: 总和型规则属于合法型规则. 但如果把元胞自动机 的规则限制为总和型, 会使元胞自动机具有局限性. (6)森林火灾 在这里插入图片描述 绿色:树木;红色:火;黑色:空地。 三种状态循环转化: 树:周围有火或者被闪电击中就变成火。 空地:以概率p变为树木 理性分析:红为火;灰为空地;绿是树 在这里插入图片描述 元胞三种状态的密度和为1 在这里插入图片描述 火转化为空地的密度等于空地转换为树的密度(新长出来的树等于烧没的树) 在这里插入图片描述 f是闪电的概率:远远小于树生成的概率;T s m a x T_{smax}T smax ​是一大群树被火烧的时间尺度 程序实现 周期性边界条件 购进啊 在这里插入图片描述 其中的数字为编号 构建邻居矩阵 在这里插入图片描述 上面矩阵中的数字编号,对应原矩阵相同位置编号的上邻居编号,一 一对应 同样道理: 在这里插入图片描述 (7)交通概念 车距和密度 在这里插入图片描述 流量方程 在这里插入图片描述 守恒方程 在这里插入图片描述 时空轨迹(横轴是空间纵轴为时间) 在这里插入图片描述 红线横线与蓝色交点表示每个时间车的位置。 如果是竖线则表示车子在该位置对应的时间

宏观连续模型: 在这里插入图片描述 最常用的规则: 在这里插入图片描述 红色条表示速度是满的。

1 加速规则:不能超过v m a x ( 2 格 / s ) v_{max}(2格/s)v max(2格/s) 2 防止碰撞:不能超过车距

理论分析: 在这里插入图片描述 结果分析: 密度与流量 在这里插入图片描述 第一个图:横坐标是归一化后的密度,纵坐标是车流量。第二个图:理论值与CA的结果

结果分析: 时空轨迹 在这里插入图片描述 中间的深色区域是交通堵塞的区域。

二、部分源代码

clc
clear all
close all
%% 第一列是序号 第二、三列是横纵坐标、第四列是节点容量、第五列是初始人数
data=[102    0      0  inf 0 ;%%第一层
    65  1150      0  inf 0 ;
    16  1150  -2780   63 4 ;
    66  6850      0  inf 0 ;
    17  6850  -2780   63 4 ;
    67  9220      0  inf 0 ;
    18  9220  -2770   63 4 ;
    68  13020     0  inf 0 ;
    11  13020  2960   60 0 ;
    69  15020     0  inf 0 ;
    19  15020 -2710   72 4 ;
    70  18480     0  inf 0 ;
    20  18480 -2710   72 4 ;
    71  21100     0  inf 0 ;
    72  24180     0  inf 0 ;
    21  24180 -2710   72 4 ;
    73  27640     0  inf 0 ;
    22  27640 -2710   72 4 ;
    74  33040     0  inf 0 ;
    23  33040 -2710   72 4 ;
    104  34770    0  inf 0 ;
    52  6850   6960  inf 0 ; %%第二层
    2   6850   9340   68 4 ;
    51  5150   6960  inf 0 ;
    9   5150   4160   33 0 ;
    50  3100   6960  inf 0 ;
    8   3100   4000   69 4 ;
    49  1470   6960  inf 0 ;
    101 0      6960  inf 0;
    1   1470   9340   68 4 ;
    53  10110  6960  inf 0 ;
    10  10110  3920   75 4 ;
    54  11060  6960  inf 0 ;
    3   11060  9780   68 4 ;
    55  13030  6960  inf 0 ;
    4   13030  9640   44 0 ;
    56  16160  6960  inf 0 ;
    12  16160  4120   75 4 ;
    57  18540  6960  inf 0 ;
    47  18540 10670   12 0 ;
    58  19260  6960  inf 0  ;
    59  21670  6960  inf 0 ;
    13  21670  4120   75 4 ;
    60  22340  6960  inf 0 ;
    5   22340  9670   72 4 ;
    61  25800  6960  inf 0 ;
    6   25800  9670   72 4 ;
    62  27370  6960  inf 0 ;
    14  27370  4120   75 4 ;
    63  30130  6960  inf 0 ;
    7  30130  9730   72 4 ;
    64  31500  6960  inf 0 ;
    15  31500  4160   69 4 ;
    103  33230  6960  inf 0 ;
    25  6850  13360   68 4 ; %第四层
    78  6850  10980  inf 0 ;
    77  5150  10980  inf 0 ;
    32  5150   8180   33 0 ;
    76  3100  10980  inf 0 ;
    31  3100   8020   69 4 ;
    75  1470  10980  inf 0 ;
    24  1470  13360   68 4 ;
    105    0  10980  inf 0 ;
    79  10110 10980  inf 0 ;
    33  10110  7940   75 4 ;
    80  11060 10980  inf 0 ;
    26  11060 13800   68 4 ;
    81  13030 10980  inf 0 ;
    27  13030 13660   44 0 ;
    82  16160 10980  inf 0 ;
    35  16160  8140   75 4 ;
    48  18540 12870   12 0 ;%%楼梯
    83  18540 10980  inf 0 ;
    84  19260 10980  inf 0  ;
    85  21670 10980  inf 0 ;
    36  21670  8140   75 4 ;
    86  22340 10980  inf 0 ;
    28  22340 13690   72 4 ;
    87  25800 10980  inf 0 ;
    29  25800 13690   72 4 ;
    88  27370 10980  inf 0 ;
    37  27370  8140   75 4 ;
    89  30130 10980  inf 0 ;
    30  30130 13750   72 4 ;
    90  31500 10980  inf 0 ;
    38  31500  8180   69 4 ;
    107  33230 10980  inf 0 ;
    106    0   4020  inf 0 ;%%第三层
    91  1150   4020  inf 0 ;
    39  1150   1240   63 4 ;
    92  6850   4020  inf 0 ;
    40  6850   1240   63 4 ;
    93  9220   4020  inf 0 ;
    41  9220   1240   63 4 ;
    94  13020  4020  inf 0 ;
    34  13020  6980   60 0 ;
    95  15020  4020  inf 0 ;
    42  15020  1310   72 4 ;
    96  18480  4020  inf 0 ;
    43  18480  1310   72 4 ;
    97  21100  4020  inf 0 ;
    98  24180  4020  inf 0 ;
    44  24180  1310   72 4 ;
    99  27640  4020  inf 0 ;
    45  27640  1310   72 4 ;
    100 33040  4020  inf 0 ;
    46  33040  1310   72 4 ;
    108  34770 4020  inf 0 ;
    ];
%% 第一列是出发点,第二列是终点,第三列是长度,第四列通道容量,第五列是通道每步的通行人数,第六列当前当道人数,%第七列是当前时刻通道人数,第八列编号,第九列通道面积

R=[ 65 102 1150 4  2  0 0 101 1 ;%第一层
    16  65 2780 8  2  0 0  16 2
    66  65 5700 29 3  0 0  65 8
    66  17 2780 8  2  0 0  17 2
    66  67 2370 12 3  0 0  66 3
    18  67 2770  8 2  0 0  18 2
    68  67 3800 19 3  0 0  67 5
    11  68 2960  7 2  0 0  11 2
    69  68 2000 10 3  0 0  68 3
    19  69 2710  8 3  0 0  19 2
    70  69 3460 17 3  0 0  69 5
    20  70 2710 8  3  0 0  20 2
    70  71 2620 22 2  0 0  70 4
    72  71 3080 15 3  0 0  71 4
    21  72 2710 8  3  0 0  21 2
    73  72 3460 17 3  0 0  72 5
    22  73 2710  8 3  0 0  22 2
    74  73 5400 27 3  0 0  73 8
    23  74 2710  8 3  0 0  23 2
    74 104 1730  6 2  0 0 103 2
    49 101 1470  5 2  0 0 100 1%第二层
    1  49  2380  8 2  0 0   1 2
    49 50  1630  8 3  0 0  49 2
    8  50  2960  8 2  0 0   8 2
    51 50  2050 10 3  0 0  50 3
    9  51  2800 8  2  0 0   9 2
    52 51  1700 10 3  0 0  51 2
    2  52  2380 8  2  0 0   2 2
    52  66 6960 35 2  0 0 109 2
    53  52 3260 15 3  0 0  52 5
    10  53 3040  9 2  0 0  10 2
    54  53 950   6 3  0 0  53 1
    3   54 2820  8 2  0 0   3 2
    55  54 2920 16 2  0 0  54 4
    4   55 2680  8 2  0 0   4 2
    56  55 3130 16 3  0 0  55 4
    12  56 2840  8 2  0 0  12 2
    57  56 2380 12 3  0 0  56 3
    47  57 3710 10 2  0 0  47 3
    58  57 720   4 3  0 0  57 1
    71  58 6960 35 3  0 0  59 10
    59  58 2410 12 3  0 0  58 3
    13  59 2840  8 2  0 0  13  2
    60  59 670   3 2  0 0  60  1
    5   60 2710  8 2  0 0   5  2
    61  60 3460 17 3  0 0  61  5
    6   61 2710  8 2  0 0   6  2
    61  62 1570  8 3  0 0  62  2
    62  63 2760 14 3  0 0  63  4
    14  62 2840 8  2  0 0  14  2
    7   63 2760 8  2  0 0  7   2
    64  63 1370  7 3  0 0  64  2
    15  64 2800  8 2  0 0  15  2
    64 103 1730  6 2  0 0  102 2
    91 106 1150 4  2  0 0  105 1;%第三层
    39  91 2780 8  2  0 0  39  2
    92  91 5700 29 3  0 0  91  8
    40  92 2780 8  2  0 0  40  2
    93  92 2370 12 3  0 0  92  3
    41  93 2770  8 2  0 0  41  2
    93  94 3800 19 3  0 0  93  5
    34  94 2960  7 2  0 0  34  2
    94  95 2000 10 3  0 0  94  3
    42  95 2710  8 3  0 0  42  2
    96  95 3460 17 3  0 0  95  5
    43  96 2710 8  3  0 0  43  2
    96  97 2620 22 2  0 0  96  4
    97  98 3080 15 3  0 0  97  4
    44  98 2710 8  3  0 0  44  2
    98  99 3460 17 3  0 0  98  5
    45  99 2710  8 3  0 0  45  2
    99 100 5400 27 3  0 0  99  8
    46 100 2710  8 3  0 0  46  2
    100 108 1730  6 2  0 0  107 2
    75 105 1470  5 2  0 0  104 1%第424 75  2380  8 2  0 0  24  2
    75 76  1630  8 3  0 0  74  2
    31 76  2960  8 2  0 0  31  2
    77 76  2050 10 3  0 0  75  3
    32 77  2800 8  2  0 0  32  2
    78 77  1700 10 3  0 0  76  2
    25 78  2380 8  2  0 0  25  2
    78 92  6960 35 2  0 0  78 10
    78 79  3260 15 3  0 0  77  5
    33 79  3040  9 2  0 0  33  2
    79 80  950   6 3  0 0  79  1
    26 80  2820  8 2  0 0  26  2
    80 81  2920 16 2  0 0  80  4
    27 81  2680  8 2  0 0  27  2
    81 82  3130 16 3  0 0  81  4
    35 82  2840  8 2  0 0  35  2
    82 83  2380 12 3  0 0  82  3
    48 83  3710 10 2  0 0  48  2
    83 84  720   4 3  0 0  83  1
    84 97  6960 35 3  0 0  85  10
    84 85  2410 12 3  0 0  84  3
    36 85  2840  8 2  0 0  36  2
    85 86  670   3 2  0 0  86  1
    28 86  2710  8 2  0 0  28  2
    86 87  3460 17 3  0 0  87  5
    29 87  2710  8 2  0 0  29  2
    88 87  1570  8 3  0 0  88  2
    88 89  2760 14 3  0 0  89  4
    37 88  2840 8  2  0 0  37  2
    30 89  2760 8  2  0 0  30  2
    89 90  1370  7 3  0 0  90  2
    38 90  2800  8 2  0 0  38  2
    90 107 1730  6 2  0 0 106  2
    47 48  2200  14 3 0 0 108  6   ];
R(:,7)=0;%第七列是当前时刻通道人数
R(:,10)=1400;%通道初始速度
D=zeros(108,108);
fa=1;%船舶倾斜的速度衰减因数
figure(1)
plot(data(:,2),data(:,3),'bs','MarkerSize',15);
hold on
for i=1:size(data,1)
text(data(i,2),data(i,3),num2str(data(i,1)),'FontSize',10);

end
for i=1:size(R,1)
    D(R(i,1),R(i,2))=R(i,3);%距离矩阵
end
Kt=1.54;
D(47,48)=D(47,48)*Kt;
%火灾点路径当量
wc1=0.05;
D(68,69)=D(68,69)*(1+wc1);
D(69,70)=D(69,70)*(1+wc1);
%火灾点附近路径当量
wc2=0.02;
D(67,68)=D(67,68)*(1+wc2);
D(70,71)=D(70,71)*(1+wc2);
D=D+D';
D(find(D==0))=inf ;%将a=0的数全部替换为无强大
mm=sum(data(:,5));%人数
nn=1;
people=zeros(mm,8);%第一列序号,第二列第三列位置,第四列速度,第五列等待时间,第六列是出发点,第七列是抵达点,第八列暂停时间

dest=[101 102 103 104 105 106 107 108];

for i=1:size(data,1)
    tt=data(i,5);
    for pp=1:tt
        people(nn,1)=nn;%人员序号
        people(nn,2)=data(i,2);%初始横坐标
        people(nn,3)=data(i,3);%%初始纵坐标
        people(nn,4)=1400;%%初始速度
        people(nn,5)=0;%初始等待时间
        people(nn,6)=data(i,1);%出发点
        for j=1:8
            start=people(nn,6);%起点
            [dist(j),path{nn,j}] = dijkstra(D,start,dest(j));%利用diskj算法求两点最短路径
        end
        [ short_dist(nn),indx_path]=min(dist);%判断从哪个出口出去
        people(nn,7)=dest(indx_path);%终点
        short_path{nn}=path{nn,indx_path};%记录这个人的最短路径
%         short_dist(nn)=dist(indx_path);%记录这个人的最短路径
        nn=nn+1;
    end
end
     

复制代码

三、运行结果

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本 2014a

2 参考文献 [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020. [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013. [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013. [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015. [5]孟逸凡,柳益君.基于PCA-SVM的人脸识别方法研究[J].科技视界. 2021,(07) [6]张娜,刘坤,韩美林,陈晨.一种基于PCA和LDA融合的人脸识别算法研究[J].电子测量技术. 2020,43(13) [7]陈艳.基于BP神经网络的人脸识别方法分析[J].信息与电脑(理论版). 2020,32(23) [8]戴骊融,陈万米,郭盛.基于肤色模型和SURF算法的人脸识别研究[J].工业控制计算机. 2014,27(02)

文章分类
人工智能
文章标签