劉艷玲 姚建盛*
(1.桂林理工大學旅游與風景園林學院,廣西 桂林 541004;2.廣西旅游產(chǎn)業(yè)研究院,廣西 桂林 541004)
在許多實際的大型系統(tǒng)中,如社會系統(tǒng)、經(jīng)濟系統(tǒng)和生物系統(tǒng)等,各個要素之間的相互作用錯綜復(fù)雜,系統(tǒng)演化的方式很難通過數(shù)理模型描述,因此仿真是研究這類復(fù)雜系統(tǒng)的重要手段之一[1]。另外,仿真相對于實物模擬,具有降低風險和節(jié)約成本的優(yōu)點,而且可用于預(yù)測和論證方案可行性[2]。
智能體模型(ABM,Agent-based Modeling)是一種流行的建模和仿真技術(shù),將人、組織、企業(yè)、動物等個體建模為智能體Agent,Agent具有自身狀態(tài)和行為規(guī)則,通過微觀個體(Agent)行為和交互活動,可以再現(xiàn)突發(fā)現(xiàn)象、動態(tài)均衡和非線性結(jié)果等,從而推演系統(tǒng)的宏觀現(xiàn)象和運行結(jié)果,是當前復(fù)雜系統(tǒng)研究的重要方法之一,已經(jīng)廣泛應(yīng)用于社會科學、生物學、化學、地球科學和計算機科學等多個領(lǐng)域[3]。
ABM通過計算機程序模擬系統(tǒng)的動態(tài)運行,迄今為止已有眾多ABM仿真工具軟件,如Swarm、NetLogo、Repast等等,其中在社會生態(tài)領(lǐng)域應(yīng)用最廣泛的是NetLogo[4]。NetLogo是基于ABM模型對自然和社會現(xiàn)象進行仿真的可編程建模環(huán)境,特別適合對隨時間演化的復(fù)雜系統(tǒng)進行建模。但是,NetLogo的建模語言Lisp屬于一個古老而奇異的編程語言家族,看似簡單,實則龐大精深,想精通難度很大。尤其在設(shè)計復(fù)雜系統(tǒng)調(diào)參時,NetLogo無法像腳本語言一樣方便配置參數(shù)和對比分析不同參數(shù)環(huán)境下系統(tǒng)輸出結(jié)果[5]。
鑒于Python語言在數(shù)據(jù)統(tǒng)計分析、挖掘和可視化上的強大功能,有項目基于Python開發(fā)控制NetLogo的平臺,如PyNetLogo[4]和NL4Py[5]等,但是同時使用多種語言對于社會科學研究人員來說還是有難度。另外一個項目Mesa基于Python3開發(fā)一個ABM框架[6],既可以利用Python語言建立ABM模型,又可以充分利用Python語言的強大功能,進行數(shù)據(jù)分析和可視化,方便學術(shù)研究。論文通過示例介紹Mesa,為ABM仿真研究者提供一個新的選擇工具和快速入門途徑。
Mesa是基于Python3開發(fā)的、模塊化的開源ABM仿真框架,可用于構(gòu)建、分析和可視化ABM模型。Mesa從頭開始構(gòu)建,能夠借鑒當前主流ABM仿真工具的優(yōu)勢和彌補不足,借助Python語言的優(yōu)勢,Mesa目標是成為一個可以替代基于其他語言的ABM流行框架,比如NetLogo、Repast或MASON。目前Mesa在Github上擁有2.4k個star和588個fork,并且一直處于活躍更新狀態(tài)。
Mesa的體系架構(gòu)如圖1所示,框架整體由三部分組成,分別是模型(Modeling)、分析(Analysis)和可視化(Visualization)。其中模型(Modeling)包括三部分,即仿真空間(Space)、智能體(Agent)和調(diào)度器(Scheduler),Space是Agent的活動場景,Scheduler決定Agent在Space上的活動順序,Modeling負責配置三個組件。分析(Analysis)模塊主要是數(shù)據(jù)收集器和批處理運行器??梢暬P蛥?shù)設(shè)置可視化、仿真場景可視化和仿真結(jié)果可視化三部分。
圖1 Mesa體行架構(gòu)
Mesa框架系統(tǒng)文件及其相關(guān)功能如下:
agent.py、model.py分別是Agent和Model的基類,由用戶依據(jù)實際仿真任務(wù)進行繼承和擴展;space.py是Space空間類,實現(xiàn)了包括Grid、ContinuousSpace、NetworkGrid等仿真空間;time.py實現(xiàn)了調(diào)度器功能,包括BaseScheduler、RandomActiation、SimultaneousActivation、StagedActivation等調(diào)度策略;datacollection.py和batchrunner.py實現(xiàn)數(shù)據(jù)收集和批處理不同參數(shù)等功能;目錄Visualization中的文件Modular-Visualization.py、TextVisualization.py、UserParam.py實現(xiàn)模型可視化、文本可視化和參數(shù)可視化功能。
通過示例演示Mesa的使用和仿真效果,選擇典型的病毒傳播模型SIR作為仿真案例。在SIR中,種群(Population)內(nèi)個體的狀態(tài)可分三類:
(1)S:易染狀態(tài)(Susceptible),即健康狀態(tài);
(2)I:感染狀態(tài)(Infected),處于感染狀態(tài)的個體,可以感染其他健康狀態(tài)個體;
(3)R:移除狀態(tài)或者恢復(fù)狀態(tài)(Removed or Recovered),也稱為免疫狀態(tài),即個體被感染后恢復(fù),不再被感染,也不感染其他個體。
設(shè)S(t)是t時刻“S”狀態(tài)的個體數(shù),I(t)是t時刻“I”狀態(tài)的個體數(shù),R(t)是t時刻“R”狀態(tài)的個體數(shù),N(t)是t時刻整個種群的個體數(shù)量,個體接觸率為λ,治愈率為μ,則agent狀態(tài)遷移圖如圖2所示。
圖2 SIR模型狀態(tài)遷移圖
設(shè)種群總數(shù)為固定值N,則有式(1)的微分方程組:
在傳統(tǒng)的仿真中,基于公式(1)計算仿真結(jié)果,能看到標準的圖形,但與現(xiàn)實不符?;贏BM的仿真,每個個體隨機移動,接觸率與種群密度和移動模型相關(guān)。設(shè)個體間傳染概率為β,恢復(fù)概率為γ,當易感染agent同時接觸n個感染agent時,感染概率是n*β。
依據(jù)Mesa框架編寫3個代碼文件:
(1)agent.py實現(xiàn)People類,繼承Mesa的智能體基類Agent,設(shè)置agent具有三種狀態(tài)及其狀態(tài)改變規(guī)則,通過代碼:
實現(xiàn)agent的簡單隨機游走功能。
(2)model.py實現(xiàn)SIR類,繼承Mesa的智能體基類Model,主要是配置仿真空間、調(diào)度器、數(shù)據(jù)收集器、生成agent等,關(guān)鍵代碼如下:
(3)server.py實現(xiàn)可視化web服務(wù)器:
定義自定義函數(shù)sir_portrayal(agent),設(shè)計agent在仿真空間的形狀、顏色等信息;
設(shè)置畫布、大小,并將函數(shù)sir_portrayal(agent)傳遞給畫布:
設(shè)計收集數(shù)據(jù)的可視化圖表:
設(shè)置四個仿真模型參數(shù),用滑塊設(shè)置默認值、最小值、最大值和step步長:
配置可視化文本服務(wù)器,包括模型、畫布、圖表、參數(shù)等信息:
仿真運行界面如圖3所示:
圖3 仿真可視化界面
本文介紹了ABM模型仿真在復(fù)雜系統(tǒng)研究中的重要作用,重點闡述基于Python的ABM仿真框架Mesa的優(yōu)勢、結(jié)構(gòu),并通過SIR模型仿真案例描述Mesa的使用方法,為Python用戶實現(xiàn)ABM仿真探索一個新方法。