數十年來,計算機模擬已被許多領域的研究人員、工程師、問題解決者和政策制定者所使用。它是預測在複雜和不確定條件下可能會發生何種情況的核心解決方案。模擬在傳染病研究中發揮著非常重要的作用,並且已經被廣泛應用於針對從鼠疫到HIV/AIDS 等疾病的研究。流行病學專家利用模擬來了解病原體的傳播動力學,並為制定預防和控制策略提供依據。例如,研究人員使用預測性模擬來更好地了解病毒的進化過程,這可以直接為開發季節性流感疫苗或幫助尋找HIV治療方法提供依據(詳情請見文末參考資料[1][2])。
在這一過程中,研究人員首先會從實地收集相關數據,利用數據建立理論和啟發式數學模型,然後將數學模型遷移到模擬工具中,後者根據各種輸入參數(如人口密度暴露因子)計算出需要的結果(如病毒傳播)。最後,專家可以通過模擬進行宏觀觀察和假設研究,最終從理論上對現實情況進行掌控,從而為制定政策決策提供依據。
隨著新型冠狀病毒在全球範圍持續蔓延,各個國家和地區的政府都採取了嚴厲的措施來遏制疫情進一步擴散。
與此同時,領先的研究機構正在開發嚴謹的科學模擬程序,以幫助政府制定政策。《紐約時報》的一篇文章介紹了一家私人機構 The Institute for Disease Modeling (IDM) 為幫助政策制定而正在開發的一些預測模型(詳情請見文末參考資料[3])。
最近設計的幾個模擬均以概念為導向,旨在幫助大眾理解新型冠狀病毒的演變進化,以及我們如何採取行動來遏制其傳播。以下是我們知道的一些有趣的示例(示例連結見文末對應的參考資料序號):
《華盛頓郵報》發表的一份概念模擬,展示了「社交距離」的影響 [4]
Katholieke Universiteit Leuven 和 EindhovenUniversity of Technology 開展的一項合作研究,他們利用詳細的流體模擬展示了在騎行和跑步過程中出現病毒傳播的可能性 [5]
一項來自芬蘭的研究,他們利用詳細的流體模擬展示了咳嗽在雜貨店中的傳播方式 [6]
圖為本文的模擬模型展示
註:本項目(包括與之相關的所有信息和數據)由原作者提供並負全部責任。作者在此明確聲明:我們不是流行病學專家或醫生,本項目中的任何內容都不能,也不應視為醫療或其他任何形式的指導或建議。這是一個基於簡化規則的概念模型,沒有經過科學驗證。有關新型冠狀病毒本身、傳播方式、避免感染的措施或與健康相關的任何其他事項的指導或建議,請諮詢有資質的健康專家。
在Unity中模擬空間環境
研究人員和企業使用 Unity 來有效地模擬空間環境。Unity 可以在交互模式下進行實時模擬,而在離線模式下模擬框架可以達到高於實時的幀率。
通過在 Unity 中開發代表真實環境的項目,將這些項目參數化以進行模擬,並在雲中以比實時更快的速度運行大量模擬場景,他們可以從整體上理解複雜的機制,從而為重大策略或設計決策的制定提供依據。首先,我們來定義一下這幾個術語:
環境:在 Unity 中,環境是一個定義的空間及其包含的所有對象的 3D 空間表示。這些對象可以固定在某個位置,也可以根據編程規則、物理模型或機器學習算法進行移動和變化。環境中的對象可以是簡化的,也可以具有豐富的可視化細節。
參數:參數是 Unity 環境中一個確定的層面,可以在不同的模擬中發生變化。Unity 是一個基於 C# 的高度可擴展框架,因此參數可以非常簡單(如處理單一對象運動速度的變化),也可以十分複雜(如處理群體行為的邏輯)。
場景:在模擬過程中,場景是在環境中運行的參數設置的組合。每個模擬通常對應一個場景,雲中的模擬批處理作業可以包含許多場景。
接下來,我們通過一個相關的用例來探討上述定義:新型冠狀病毒在雜貨店的一組購物者之間的傳播。
在該模擬中,環境是商店、商店所包含的健康購物者和感染者以及病毒傳播規則的空間表示。參數可能包括店家規定,例如允許的購物者人數或開放的收銀臺數量。這些參數值的每一種組合都將構成一個單獨的場景。
在對每種場景進行模擬時,動力學系統的突現行為將顯露出來,從而直觀顯現店家規定會導致病毒接觸人數增加還是減少。此類模擬可以提供有關影響暴露率的變量的有益見解,以便商店管理層有針對性地制定政策和程序,幫助減少疾病在這些環境中的傳播。
我們的團隊構建了一個簡化的演示項目,以便大家對此有一個大致了解(圖1),並啟發 Unity 社區和疾病建模社區思索針對冠狀病毒傳播建模的新思路。在這個項目的開發過程中,IDM 為我們的團隊提供了指導,向我們介紹了幾個現有的關於冠狀病毒傳播的科學模型,幫助我們確定了開發方向。
Unity 能夠很好地進行系統建模,因為與許多其他類型的模擬器相比,它可以在更長的時間跨度上高效模擬系統。以往使用流體動力學模擬器來模擬病毒通過咳嗽傳播,需要計算數小時,而使用Unity,可以使用簡化的傳播動力學模型來模擬一群人(50 人)在某個環境中 10 分鐘的活動過程,極大地提高了模擬效率。通過對更長時段的模擬,可以揭示更大規模的擴散趨勢。利用批處理雲模擬功能,可以加快模擬速度,使其比實時計算更快,並且可以在數小時內批量運行成千上萬個場景。
圖 1 我們的模擬演示 Web 應用的截圖
模擬工作流程步驟
在 Unity 中創建和執行模擬大致包括以下步驟:
01項目創建:創建一個具有代表性的空間環境及其動態元素(元素將隨時間推移在模擬內部發生變化)的項目。此處,我們創建了一個購物者攜帶傳染病的示例雜貨店。
02參數化:對項目進行參數化,確定從一個模擬實例到另一個模擬實例的變化方式。Unity項目中,幾乎任何方面都可以通過 C# 腳本進行參數化。在本示例中,我們確定了數學病毒傳播模型的一系列調整參數和店家規定的參數,例如商店允許的購物者人數和過道允許的走向。
03輸出定義:指定要在模擬中測量的輸出量。我們查找了接觸到病毒的購物者的總人數,以及接觸到病毒的購物者佔購物者總人數的比例。
04作業執行:定義作業,指定要模擬的參數值的範圍和組合。我們在雲環境中運行這些作業,以利用並行性更快地完成任務。
05結果分析:查看模擬作業的匯總輸出數據,執行數據分析並得出結論。我們可以利用從模擬中獲得的見解制定正確的政策決策,例如,開放商店中的多少個結帳櫃檯才能最大限度地遏制病毒傳播。
01 項目創建
我們創建了一個簡單的雜貨店環境(圖2),並在其中填充了根據可能的導航路線移動的購物者,以及一些處理結帳隊列的特殊邏輯(圖 3)。購物者進入商店,在給定時間內在過道間穿行購物,然後排隊結帳並離開商店。
圖 2 虛擬商店
圖 3 允許的購物者行動路線
購物者有三種可能的狀態:健康購物者(以藍色表示)、傳染性購物者(以紅色表示)或病毒接觸者(以黃色表示)。有一定比例的購物者以傳染性狀態進入商店,傳染性購物者有可能傳染健康個體,傳染與否取決於基於距離的概率函數,其原理如下:當傳染性購物者與健康購物者靠近到一定距離時,他們會進入所謂的暴露區。當兩個個體之間的距離超過該閾值時,就存在傳染的可能。隨著彼此間距離的縮短,傳染概率將線性增加,直到購物者發生身體接觸時,概率達到最大。一個「健康」購物者可能會變成「病毒接觸者」,這取決於與模型調整參數相關的計算。隨著項目的運行,可以看到健康購物者逐漸成為病毒接觸者。
02 參數化
購物者變成病毒接觸者的速率受模擬中的許多可調參數控制,我們將這些參數歸類為:(a)與傳播模型數學相關的可調參數,(b)與店家接待購物者的規定相關的參數,以及(c)進入商店的傳染性購物者的人數。接下來,我們仔細研究一下每個類別。
a. 模型調整參數
我們的傳播模型包括三個可調參數:(i)發生暴露的最大可能距離,(ii) 在該最大距離下發生暴露的概率,以及 (iii) 兩個人出現身體接觸時發生暴露的概率。傳播模型對於模擬的準確性至關重要。請注意,研究人員通常會使用真實世界的數據對傳播模型進行長期的開發和驗證。需要強調的是,此處採用的模型是為了進行演示而簡化過的版本。
為了說明模型的重要性,稍後我們會討論輸出對於參數值的選擇有多敏感。開發該模型的下一個邏輯步驟是對其進行調整,使之與展現暴露動力學的科學研究所獲得的真實數據相匹配。(在本文結尾處,我們分享了一些可能對此有用的數據源)
b. 店家規定參數
最近的新聞報導了一些商店試圖通過各種規定來管控病毒傳播風險,我們在模擬中對其中一些進行了建模(連結見文末對應的參考資料序號):
某一時間允許入店的顧客總人數 [7]
開放結帳櫃檯的數量 [8]
過道只允許單向通行 [9]
c. 購物者傳染參數
商店無法控制進入商店的傳染性購物者的比例。在模擬中,我們將該因子建模為一個變量,並將研究其對總暴露率的影響程度。
3 輸出定義
僅當模擬輸出信息數據時,運行模擬才有意義。在該模擬中,我們可以實時看到購物者正在變成病毒接觸者,但更重要的是,我們可以直接測量在模擬過程中變成病毒接觸者的購物者比例。你可以使用我們的嵌入式模擬器試驗輸入參數,並實時查看它們對輸出變量的影響。運行幾分鐘後,接觸到病毒的購物者佔購物者總人數的比率達到穩態值,說明模擬已基本收斂。
04 作業執行
下一步,我們對每個參數進行了多值採樣,並在雲上使用10,000 個模擬實例運行批處理模擬作業,從而對採樣參數值的所有組合進行測試。整個過程只用了三個小時。對參數值的每種組合進行了五次模擬,以確保隨機性並對輸出取平均值。該批處理作業產生了一個結果文件,其中包含每次運行的健康購物者人數和接觸到病毒的購物者人數。通過在電子表格中對數據進行後期處理,我們可以輕鬆計算出暴露率(將接觸到病毒的購物者人數除以購物者總人數)。
05 結果分析
我們使用所有運行的模擬輸出數據進行了敏感性分析,以了解某些輸入參數對輸出的影響。執行敏感性分析的一種有用工具是龍捲風圖,它顯示了每個輸入參數在設置為極值而所有其他輸入參數保持不變時導致的輸出變化(圖4)。條形延伸越長,說明該參數的採樣值的影響越大。如果條形最左側為藍色,說明該變量與輸出直接相關,左側為黃色則說明該變量與輸出呈負相關。
圖 4 輸入參數對暴露率的敏感性分析
從該數據視圖來看,可以得出以下結論:
暴露率對店內傳染性購物者的人數最為敏感。這一點符合我們的直觀預期。隨著傳染性購物者人數的增加,將有更多傳染性購物者與健康購物者發生交互。
唯一與輸出呈負相關的變量是開放收銀臺的數量。增加吞吐量可大幅降低暴露機率。但是,該變量的敏感性是不對稱的,這表明僅開放一個收銀臺與開放多個收銀臺存在很大差異,但這種影響會隨數量的進一步增多而減弱。
這三個模型調整參數(最大傳播距離、出現身體接觸時發生暴露的概率、在最大距離時發生暴露的概率)的影響與商店和購物者參數不相上下。在模擬中對這些參數進行調整至關重要。
現在,我們對敏感性有了一個大致的了解,接下來我們來研究一些龍捲風圖無法揭示的其他趨勢(因為龍捲風圖無法顯示多個參數的相互作用)。我們將重點討論店家規定參數對模擬暴露率的影響,並將調整參數固定為某些默認值。出於標準化目的,這些圖都是在保持傳染性購物者與購物者總人數比率不變的情況下生成的。
圖 5 暴露率與開放收銀臺數量的關係
圖6 當設置單向過道和雙向過道時,暴露率與購物者人數的關係
圖 5 顯示了開放收銀臺數量與不同的購物者人數之間的關係。當只開放一個收銀臺時,暴露率非常高,尤其是當店內聚集了30 到 40 名購物者時(因為結帳區域出現了擁堵)。再開放一個收銀臺對於降低暴露率的影響最大。此後,當店內購物者人數達到 20 人時,結果趨於平緩,但當有30 到 40 名購物者時,開放更多收銀臺(直到 5 個)將很有幫助。
圖 6 顯示了單向通行和雙向通行過道對模擬造成的影響。結果表明,單向通行和雙向通行過道產生的差異可以忽略不計。但需要注意的是,雙向通行僅限於商店的垂直過道,而許多感染發生在水平通道和收銀臺位置。此外,我們沒有在當前的模擬中設置任何規則來阻止兩名購物者靠近彼此,甚至在朝同一方向移動時也是如此。在本文的最後,我們提出了一些我們認為可以添加到模擬中的其他特性,以使模擬效果更加真實,並有可能影響暴露率。
結論和啟示
我們的團隊構建了一個簡化的演示項目,以說明對冠狀病毒傳播進行建模的新方法。該簡化模型的結果表明,虛擬商店的規定確實如我們所建模的那樣對病毒的傳播產生了影響。
通過實時運行模擬並分別調整參數值可以明顯看出這種影響,但我們需要使用許多參數組合運行模擬,以確定哪些參數最為重要,以及它們取何值時對結果的影響最大。該示例表明,為降低暴露率,當店內有20 名購物者時,商店應開放 2 個收銀臺;當店內購物者人數達到 30 名及以上時,應開放最多 5 個收銀臺。最重要的是,我們發現在該數學傳播模型中使用的參數對結果有很大影響,因此需要使用真實的數據進行嚴謹的開發。
自行擴展該項目
該模擬只是一個起點。我們正在將該項目(包括其全部原始碼)遷移到GitHub上,以便任何人都可以進行試驗。
GitHub 連結:
https://github.com/Unity-Technologies/unitysimulation-coronavirus-example
你可以使用Unity Game Simulation測試版運行我們在此處介紹的演示。該版本在底層利用了 Unity Simulation 和Unity Remote Config。建議採取以下多種方式擴展該項目:
病毒傳播模型:我們的模型從概念上講非常簡單,沒有經過科學驗證。首先,你可以使用科學的數據更好地構建或校準該模型。IDM建議通過以下資源獲取潛在數據:
IDM Info Hub,它包含一些有關典型參數配置的表格
https://covid.idmod.org/#/Home
IDM 自己的研究報告,例如對特定區域負荷情況的估計
https://institutefordiseasemodeling.github.io/COVID-public/reports/Working%20paper%20%e2%80%93%20model-based%20estimates%20of%20COVID-19%20burden%20in%20King%20and%20Snohomish%20counties%20through%20April%207.pdf
多個精選文獻中心,例如NIH COVID-19 Portfolio、LitCovid、COVID-19 Preprint Index 等
購物者行為模型:我們模擬的購物者是購物者的簡單符號表示,他們的移動模式完全是直線型的,結帳系統的長度受預定義路線的限制。而在現實生活中,購物者的移動和排隊方式要複雜得多,尤其是當他們害怕被其他購物者傳染時。如何針對這些購物者開發一個更真實的移動和交互模型?我們的設想是創建行為分布,以反映某些購物者會保持更大的社交距離。對此,可以使用Unity 的 NavMesh功能定義更自然的允許移動區域。或者,也許可以將模擬購物者視為代理,並使用避免暴露的目標函數進行訓練。對此,可以使用Unity 的 ML-Agents工具包。
個體到表面的傳播:在現實世界中,傳播並不僅限於個體與個體的接觸。病毒還可能從個體傳播到物體表面,並按照某種衰減函數在表面存活一定時間,因此有機會傳播到接觸到該表面的其他個體。例如,IDM指出《The New England Journal of Medicine》上發表的一篇快報列出了冠狀病毒在不同表面上的存活時長。10 如何在項目中對此進行建模?
其他類型的環境:雜貨店並不是冠狀病毒傳播的唯一場所。如何對病毒在公園、機場、學校等地方的傳播進行建模呢?也許你可以自行創建環境來進行試驗,或研究一下Unity Asset Store上的某些資源。
參考資料:
[1] www.bedford.io/pdfs/papers/morris-predictive-modeling.pdf
[2] www.genetics.org/content/190/3/1087
[3] www.nytimes.com/2020/03/29/us/seattle-washington-state-coronavirus-transmission-rate.html
[4] www.washingtonpost.com/graphics/2020/world/corona-simulator/
[5] www.medium.com/@jurgenthoelen/belgian-dutch-study-why-in-times-of-covid-19-you-can-not-walk-run-bike-close-to-each-other-a5df19c77d08
[6] www.hpcwire.com/2020/04/08/supercomputer-modeling-tests-how-covid-19-spreads-in-grocery-stores/
[7] www.cnn.com/2020/04/04/business/walmart-limits-customers-covid-19/index.html
[8] www.seattletimes.com/business/local-business/seattle-qfc-store-managers-bulletin-to-workers-says-social-distancing-will-not-always-work-amid-coronavirus/
[9] www.abc7news.com/social-distancing-grocery-stores-one-way-aisles-coronavirus-safeway-covid-19-outbreak/6074817/
[10] www.nejm.org/doi/full/10.1056/NEJMc2004973
參考文章:
1. Dynamics Analysis and Simulation of a Modified HIV Infection Model witha Saturated Infection Rate. Computational and Mathematical Methods in Medicine. 2014.
2. Computer Simulations Help Explain Why HIV Cure Remains Elusive. Infection Control Today.2012.