python元胞自动机模拟交通_文献分享 | 基于WCA2D与SWMM模型的城市暴雨洪涝快速模拟...

基于WCA2D与SWMM模型的城市暴雨洪涝

快速模拟

文献分享

第一作者:曾照洋 通讯作者:王兆礼 其他作者:赖成光、吴旭树、黄国如、胡庆芳 通讯单位:华南理工大学 土木与交通学院 亚热带建筑科学国家重点实验室 ff6d800cf49ecbeecbe2b8473b9c5b47.png

22ca84af40a128e120fd68c4220a11d1.png

[文章摘要] 为探讨计算高效的元胞自动机模型(WCA2D)与传统一维管网模型耦合的机制以及计算效果,尝试将WCA2D与SWMM模型耦合(SWMM/WCA2D),以广州市长湴片区为例探究一种暴雨洪涝快速二维模拟技术,对比实测积水数据以及SWMM/LISFLOOD-FP模拟结果,得出如下结论:SWMM/WCA2D模拟结果与“20180607”实测积水数据相近,表明模型具有良好精度;通过与SWMM耦合,WCA2D和LISFLOOD-FP的模拟结果差异小(最大水深差值基本低于0.1m)、相关性强(相关系数基本超过0.7),但前者计算效率是后者的3-5倍,表明WCA2D能够耦合SWMM且计算效率更高,为复杂城市化地区暴雨洪涝快速模拟提供了一种新方法。 [正文简述] 本研究区位于广州市天河区西北部的长湴片区(图1),总面积约为1.57km²。该片区下垫面较为复杂,北部为山区,南部则为建筑比较密集的高度城市化地区。当暴雨发生时,大量山区的水流汇入长湴主干沟渠,容易造成该片区排水能力不足,从而导致地铁站附近出现积水。如在2018年6月8日,受长历时暴雨影响,天源路段最大水深将近1m,积水几乎没过地铁入口,严重威胁地下铁道系统的安全。本文以复杂城市化的广州市天河区长湴片区为例,构建SWMM/WCA2D模型,对2018年6月7日的场次暴雨(20180607)进行模拟,并采用实测积水数据进行验证,同时与SWMM/LISFLOOD-FP模型进行对比,旨在验证WCA2D的二维模拟效果以及模型耦合的可行性,以期为城市洪涝模拟、预警预报以及防涝减灾等工作提供一种新方法。

8b6b5091c5692609837f375385e1d3a4.png

图1 研究区位置与DEM8图

0843c291507b136ad738ac1f4293da39.png

图2 考虑建筑物的DEM5局部放大图 耦合WCA2D与SWMM模型实现城市暴雨洪涝的快速二维模拟,主要步骤如下:  (1)构建SWMM模型模拟降雨、地表产流、地面径流、管网汇流以及管网溢流过程;  (2)基于C# Winform平台,调用SWMM模型计算引擎的接口函数,提取节点溢流过程并保存为WCA2D模型所需的输入文件格式;  (3)生成模型配置文件,并链接地形数据与溢流文件;  (4)在C# Winform窗口驱动WCA2D模型计算引擎,模型通过读取配置文件并将模型参数、溢流过程、地形数据作为模拟条件,完成地表积水演进过程模拟;  (5)输出二维模拟结果文件,与SWMM/LISFLOOD-FP模型结果以及实测结果进行对比验证,并用ArcGIS与Python进行后处理。 根据是否考虑主干沟渠淤积深度以及二维模拟是否考虑建筑物对水流阻挡,再结合WCA2D与LISFLOOD-FP两种模型,共设置8种模拟情景(表1)。通过将主干沟渠的设计尺寸与现状断面对比,确定淤积深度约20cm;为模拟建筑物对地面积水的阻挡,将建筑物所在位置的高程进行加高处理(图2)。 表1 模拟情景汇总 0add0f3e757ccc4fe845b4ec003d8838.png 二维模拟的最大淹没水深和淹没范围如图3所示。结果表明,所有情景的积水范围主要分布于天源路以及长湴工业区,与实际调研结果相符,表明模拟结果能够很好的反映实际内涝情况。鉴于CA_B和LIS_B情景与下垫面的实际情况最接近,而积水深度普遍介于0.2-0.5m,与实际积水深度最为接近。因此,SWMM/WCA2D模拟结果与实测数据相近,且与SWMM/LISFLOOD-FP模拟结果相似,表明耦合模型具有较好精度。   640?wx_fmt=png 图3 所有情景最大积水深度空间分布图 分根据SWMM/WCA2D以及SWMM/LISFLOOD-FP模拟的积水深度相关系数(图4a)、积水面积(深度>0.05m,图4b)变化、计算效率(表2)等结果,可看出:随着降雨历时的增加,积水深度的相关系数先快速增大(至0.9以上),在雨峰附近开始减小,最终趋于相对稳定(LIS_B与CA_B的相关系数接近0.9);在2300min前,积水面积接近0,随着后雨峰影响,积水面积快速增大,而两种二维模型模拟的积水面积差异均比较小;从模拟时长角度分析, WCA2D模拟用时介于38-50s,而LISFLOOD-FP模拟用时达到170-200s,前者模拟效率是后者3-5倍。

23985083bfeee8fd5cdbe93f5b4ccd9f.png

(a)相关系数

426d3e77b8e4d6197aecf24734be0e1a.png

(b)积水面积 图4 二维模拟的积水深度相关系数变化以及积水面积变化图 表2 所有情景的模拟用时统计表(单位:秒) 36d4ad25eb2f4001a801737833c47e98.png 本研究获得国家重点研发计划资助项目(2018YFC1508205) ; 国家自然科学基金资助项目(51709117)的共同支持。 论文链接: http://journal16.magtechjournal.com/Jweb_skxjz/CN/10.14042/j.cnki.32.1309.2020.01.004 引用格式: 曾照洋, 赖成光, 王兆礼, 吴旭树, 黄国如, 胡庆芳. 基于WCA2D与SWMM模型的城市暴雨洪涝快速模拟[J]. 水科学进展, 2020, 31(1): 29-38.  ZENG Zhaoyang, LAI Chengguang, WANG Zhaoli, WU Xushu, HUANG Guoru, HU Qingfang. Rapid simulation of urban rainstorm flood based on WCA2D and SWMM model. Advances in Water Science, 2020, 31(1): 29-38. 编辑:邓梓锋 审核:王兆礼

点击 阅读原文 可进入文献网站!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于元胞自动机与疏散模型的Matlab算法,可以参考以下步骤: 1. 定义元胞自动机的基本单位:每个元胞包含人员位置、速度、方向等属性。 2. 定义元胞自动机的演化规则:每个元胞根据周围元胞的状态,计算出自己的下一时刻状态,包括位置、速度、方向等。 3. 定义疏散模型的初始状态:包括人员位置、密度、出口位置等。 4. 基于元胞自动机的演化规则,模拟人员在疏散过程中的运动。 5. 根据疏散模型的结束条件,判断模拟是否结束。 6. 对模拟结果进行分析和可视化展示。 以下是一个简单的元胞自动机模拟多出口疏散模型的Matlab实现: ```matlab % 定义元胞自动机的参数 N = 200; % 元胞总数 L = 20; % 区域长度 W = 10; % 区域宽度 dt = 0.1; % 时间步长 T = 100; % 总模拟时间 v0 = 1.5; % 最大速度 tau = 0.5; % 安全时间 r = 0.3; % 感知半径 a = 2; % 舒适加速度 b = 1.5; % 减速加速度 % 定义疏散模型的参数 M = 4; % 出口数量 exit = [0, W/2; L/2, W; L, W/2; L/2, 0]; % 出口位置 density = 0.5; % 初始密度 N0 = round(N*density); % 初始人数 % 初始化元胞状态 pos = rand(N, 2)*[L, W]; % 位置 vel = zeros(N, 2); % 速度 dir = rand(N, 1)*2*pi; % 方向 exit_dist = zeros(N, M); % 距离出口的距离 exit_time = zeros(N, M); % 到达出口的时间 exit_chosen = zeros(N, 1); % 已选择出口的编号 for i = 1:N for j = 1:M exit_dist(i, j) = norm(pos(i, :)-exit(j, :)); exit_time(i, j) = exit_dist(i, j)/v0; end end % 模拟疏散过程 for t = 0:dt:T % 计算每个元胞的加速度 acc = zeros(N, 2); for i = 1:N % 感知周围元胞 nei = []; for j = 1:N if i ~= j && norm(pos(i, :)-pos(j, :)) < r nei = [nei, j]; end end % 计算期望速度和期望位置 v_des = exit_dist(i, exit_chosen(i))/exit_time(i, exit_chosen(i)); pos_des = pos(i, :) + v_des*exit(exit_chosen(i), :)/norm(exit(exit_chosen(i), :)); % 计算加速度 acc(i, :) = a*(v_des*exit(exit_chosen(i), :)/norm(exit(exit_chosen(i), :))-vel(i, :))/tau; for j = nei if norm(pos(i, :)-pos(j, :)) < r acc(i, :) = acc(i, :) + b*(vel(j, :)-vel(i, :))/(norm(pos(i, :)-pos(j, :))-r)^2; end end end % 更新每个元胞的状态 for i = 1:N vel(i, :) = vel(i, :) + acc(i, :)*dt; if norm(vel(i, :)) > v0 vel(i, :) = vel(i, :)*v0/norm(vel(i, :)); end pos(i, :) = pos(i, :) + vel(i, :)*dt; % 到达出口的处理 if exit_chosen(i) > 0 && norm(pos(i, :)-exit(exit_chosen(i), :)) < 0.1 vel(i, :) = [0, 0]; pos(i, :) = pos(i, :) + [L, W]; exit_chosen(i) = 0; end % 选择出口 if exit_chosen(i) == 0 min_time = Inf; for j = 1:M if exit_time(i, j) < min_time min_time = exit_time(i, j); exit_chosen(i) = j; end end end end % 可视化展示 clf; hold on; for i = 1:M plot(exit(i, 1), exit(i, 2), 'rx', 'MarkerSize', 10, 'LineWidth', 2); end for i = 1:N plot(pos(i, 1), pos(i, 2), 'bo', 'MarkerSize', 5, 'LineWidth', 1); end axis equal; axis([0, L, 0, W]); drawnow; end ``` 该代码实现了一个包含4个出口的疏散模型模拟了人员在疏散过程中的运动,并可视化展示了模拟结果。其中,元胞自动机的演化规则基于人员的感知、期望速度和加速度,疏散模型的初始状态包括人员位置、密度和出口位置。模拟过程中,根据人员到达出口的时间选择最近的出口,当人员到达出口时,将其移动到对应区域的另一侧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值