2019美赛D题 人员疏散模型Python编程

Posted 1只猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019美赛D题 人员疏散模型Python编程相关的知识,希望对你有一定的参考价值。

Louvre_Evacuation

题目来源:2019年 美赛 D题
完整代码请见:https://github.com/izcat/Louvre_Evacuation

2019 ICM
Problem D: Time to leave the Louvre

问题背景

法国发生的恐怖袭击越来越多,在许多热门目的地,亟需一个应对紧急情况的疏散计划。
你们的ICM团队正在帮助设计在法国巴黎卢浮宫的疏散计划
总的来说,疏散的目标是让所有的人都撤离,尽快安全离开大楼。
接到疏散通知后,为了尽快清空建筑,每个人尽可能的通过一个最佳出口。

问题要求

建立一个卢浮宫紧急疏散模型,以满足:

  • 当出现突发意外事件时,指导游客人群从卢浮宫疏散 (evacuate visitors from the museum)
  • 探讨安保/急救人员进入策略 (allow emergency personnel to enter the building)
  • 确定人流移动的瓶颈 (identify potential bottlenecks limiting movement towards the exits)
  • 模型考虑各种威胁 (a broad set of considerations and various types of potential threats)

My Work:

不考虑个体行为的情况下,可以将卢浮宫抽象为二维平面图,记录各个关键节点、出口、节点之间的长度、路径信息等,建立图论模型,求解最短路、网络流等,从而得到疏散时间,瓶颈等结果。

从人群疏散的角度看,查阅资料,我们发现目前疏散模型大致有两种处理方式,元胞自动机模型和社会力模型。
本程序主要模拟了人员疏散的撤离情况。

编程目的

  • 研究人群在一般空间的流动情况
  • 出口数量、分布对疏散时间的影响
  • 障碍物对人员流动的影响
  • 定量求解人流密度,确定疏散瓶颈

算法思想

利用元胞自动机实现 (社会力模型人员会在地图上重叠)

  • 初始化地图,地图为矩形区域,基本信息包含长Length、宽Width、若干出口Exit、障碍物Barrier等
  • 基于该论文,出口距离在地图上反映为势能的高低,初始化地图的势能
  • 初始化人群,人群随机分布在地图的合法区域内
  • 疏散模拟:
    • 移动方向:每个人优先选择最短路进行撤离,考虑使用Moore型元胞,有8个移动方向
    • 移动速度:一定区域内(周围8个邻居元胞)人流密度决定人员的移动速度 (待改进:统计可视角度内的人流密度)

模拟结果

人员疏散过程模拟

技术图片
技术图片
技术图片
技术图片

热力图

反映瓶颈位置

技术图片
技术图片


使用Python编程实现人员疏散模拟

包含三个模块 main.py map.py people.py

main.py

界面实现,包含GUI类,显示地图、人员、疏散情况等信息

map.py

地图类,地图以点(px, py)集形式保存出口Exit位置及障碍物Barrier位置
出口对地图的势能初始化:利用BFS算法实现,多个出口取最小势能

people.py

包含两个类,Person类和People类,前者只有移动速度、位置等基本属性,后者包含了整个地图信息,人流密度等,方便指引每个人的移动

有待改进之处

模型人员移动策略可以修改为:

  • 只设置一定比例的人员(作为安保/疏导人员)能够自动走到出口
  • 其他人员随机走动/从众心理跟着人流走动

考虑人员增加更多属性,如年龄、性别、是否结队等

  • 不同年龄人群移动速度不同
  • 家人、朋友等同行人员等使用相同的移动策略
  • 男性群体可能更理性,倾向于走最短路径/避让人群

编程收获

  • 再次熟悉使用了pkinter实现GUI,并再次利用plt作图(热力图)
  • 深刻领会了 Python 的赋值、引用、拷贝问题 :可变对象之间的赋值是传引用,不可变对象的赋值是传值。详见博客
  • 求解最短路要注意连通性!!!初始距离设为无穷大可避免出现更新距离问题(不连通的区块距离为0导致错误)
  • 对矩阵np.array的访问,下标为浮点数只会报Warning,改了好久值类型dtype才发现下标为浮点数!

以上是关于2019美赛D题 人员疏散模型Python编程的主要内容,如果未能解决你的问题,请参考以下文章

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程

23美赛D题:确定联合国可持续发展目标的优先级(ICM)思路&Python代码

23美赛D题:确定联合国可持续发展目标的优先级(ICM)思路&Python代码

23美赛D题:确定联合国可持续发展目标的优先级(ICM)思路&Python代码