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個鄰居元胞)人流密度決定人員的移動速度 (待改進:統計可視角度內的人流密度)

模擬結果

人員疏散過程模擬

gif1
gif2
png3
png4

熱力圖

反映瓶頸位置

pic1
pic2


使用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才發現下標為浮點數!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM