上一篇使用幾個簡單的例子說明『模擬』的基本概念與SimPy基本用法,這一次我們仿效『大巨蛋緊急疏散模擬動畫』,實作戲院售票流程的模擬動畫。
圖一. 戲院入場流程
首先改寫上一篇的01_03_theater.py程式,將模擬結果寫入 log,內容含4個欄位:
程式邏輯與01_03_theater.py大致相同,不另作解釋,可參閱上一篇說明,執行方式如下:
python 01_04_theater_with_log.py
接著根據record.log產生動畫,我採用PyGame套件,程式開發並沒有想像中的簡單,花了一天一夜才搞定,執行結果如下:
點選這裡可以看到完整動畫,也可以直接執行程式,指令如下:
python 01_05_gui.py
python make_gif.py
由於程式邏輯複雜,而且有點凌亂,先不作說明,等未來整理出較完整的架構後,再作詳細說明,有興趣的讀者可以在文末找到原始程式碼。這裡僅針對偵錯及調校特別說明:
play_speed = 60 # 60 frames per second
# 初始人數:1人
for moviegoer in range(1):
env.process(go_to_movies(env, moviegoer, theater))
# 模擬
# while True:
# yield env.timeout(arrival_interval) # 每隔0.2分鐘有一觀眾到場
# moviegoer += 1
# env.process(go_to_movies(env, moviegoer, theater))
重新執行01_04_theater_with_log.py,產生record.log。
之後將繼續探討Simpy更多的功能及應用,也希望有機會能實作專案,以印證所學,本篇的程式碼放在GitHub,讀者可自行下載。