張運坤 ,劉 磊,張勇強
(1.邯鄲學院 信息工程學院,河北 邯鄲 056005; 2.中鐵十八局集團第五工程有限公司,天津 300450)
基于Agent的建模仿真相對于一般數學建模而言,在解決離散、非線性系統模擬方面有顯著優勢,是研究復雜系統產生的全局、自適應行為的一個基本方法。它主要有封裝在計算機系統中的Agen、Agent間的相互作用、Agent所在的組織結構三個基本要素組成。建模者的任務是定義系統中具有自適應性的Agent,然后賦予它們必要的行為規則和合適的參數,讓它們在一個系統中進行博弈。
Repast是目前使用較多的基本Agent的建模與仿真平臺之一,通過在Repast平臺上進行可控制和可重現的仿真實驗,觀察分析仿真過程中的表格、圖表和圖標顯示的輸出結果,進一步研究Agent的行為[1]113-117。
Agent(主體)是一個計算機硬件或者軟件系統實現的對象,其組成之間以及與所在的環境之間存在著某種特定的關系,能夠連續不斷地感知外界的變換及自身的狀態變化,并能自主的產生響應動作。即具有主動學習和適應性。
基于Agent模型主要特征是,即便Agent的設計只遵循一些簡單的規則,集體的行為也會由于Agent并發引起的非線性變化而呈現非常復雜的模型。在傳統的建模中,目的是面向規劃或者仿真用物體作為實體去實現任務。物體缺乏開發意想不到的選擇去尋找目標或者情況的智能,因為他們僅能遵循用戶或其他物體提供的操作指南。如果其他物體或者用戶不能及時的提供策略,他們就不能同時的更新。自治是基于Agent建模的一個關鍵特征[2]。一個自治的Agent可以用自己的引擎或者智能執行任務來解決問題,不需要額外的從用戶或其他Agent的介入。它可以對應不同的情況和應用選擇性的策略去尋找適當的目標。但是,自治可能會在不同的代理的利益上導致沖突。在這種情況下,一個特殊的Agent分配來協調和解決這些矛盾。
基于Agent的建模方法是一種自底向上的建模方法,把Agent作為系統的基本抽象單元,先建立組成系統的個體Agent模型,然后采用適合的多Agent系統結構MAS(Multi-Agent System)來組裝這些個體Agent,最終建立起系統模型。[3]13-16
Repast (Recursive Porous Agent Simulation Toolkit)是芝加哥大學的社會科學計算研究中心設計的一個基于Agent的類Swarm的模擬軟件架構。它提供了一系列用以生成、運行、顯示和收集數據的類庫,并能對運行中的模型進行“快照”,記錄某一時刻模型的狀態。其主要的設計目標集中在仿真框架的抽象、可擴展性以及高性能仿真上。[4]
Repast現在由非贏利組織機構ROAD(Repast Organization for Architecture and Development)來維護。Repast的核心部分可以看作是對基于Agent建模服務的規范。它包括三個具體的工具,這些工具都有著相同的內核服務,而區別僅在于底層平臺和模型開發語言的不同。
Repast可以在現有的所有計算平臺上應用,包括Windows,Mac OS和linux。這個平臺支持個人計算機者和大型科學計算的群體使用。[5]18-20Repast的支持實現模型的特征有三個特性和四個機制:
(1)Repast在Agent中支持非線性即使他們的行為完全的被用戶設計。Repast的系統動態行,遺傳算法,神經網絡,隨機數生成和社會網絡庫使得他們的程序變得簡單。
(2)Repast支持多樣性,即通過給用戶完全的控制權來定義定義代理和初始化。另外,Repast庫簡明的介紹了多樣性。
(3)Repast允許用戶指定和保持Agent組的集體特征。
(4)Repast支持了特征的流動機制,例如它的系統動態工具和社會網絡庫。
(5)Repast支持標簽機制為Agent顯示任意的標記。
(6)Repast通過agent的靈活定義和更多的行為庫使得內在模型機制可用。
(7)Repast支持基于目標的多態性的建筑塊機制。
Repast實際上是一組類庫,提供了用于Agent仿真建模的各種基類。建模者可以通過直接使用這些類或者從這些繼承子類來構造自己的模型。Repast主要的類庫有:分析(Analysis)庫,用來聚集、記錄數據以及建立數據表;引擎(Engine)庫,負責建立、操縱以及運行一個模擬模型;圖形用戶界面(GUI)庫,負責實現模擬模型的圖形可視化;空間(Space)庫,通過恰當的接口有效地描述了各種類型的空間,與GUI庫中的顯示類聯合工作,可實現它們所包含的空間以及對象的可視化;使用工具包(Util)庫,提供了仿真程序的常用靜態方法。
熱蟲(Heatbug)模型是由 SFI提供的一個標準的應用范例,顯示了由一些簡單的、僅根據局部信息進行動作的Agent構成的系統是如何產生復雜的系統行為的。
整個系統的基本構成單位是 Agent,每個Agent代表一個熱蟲(一種生物)。很顯然,熱蟲有其活動的時空范圍(即環境),在 Repast中將其稱為Space。在該模型中,Space有空間屬性(熱蟲所處的位置)和熱量(它在系統動作的時間內不斷的產生并散失)。Repast提供了2維的顯示平面來顯示Space和在其中運行的所有Agent(點或方框)如圖1、圖2。
系統中的每個Agent(即熱蟲)都會放出少量的熱量,而且每個Agent還有一個理想的溫度(在這個溫度下,Agent將感到最舒服)。系統本身是一個簡單的離散時間模型:在每個時間步,每個Agent(只知道附近點的溫度,即局部信息)尋找并移到一個臨近的點以使自己舒服些,然后放出一點熱量。一個Agent自身不能產生足夠的熱量以使自己舒服,所以在整個運行時間內,它們傾向于聚集在一起以產生足夠的熱量,以使自己感到舒服。

圖1 系統初始狀態

圖2 運行一段時間的系統狀態圖
依據Repast設計思想,熱蟲模型共分為三個類:Heatbug模型類(HeatBug)、仿真模型類(HeatBugsModel)和熱度空間模型類(HeatSpace)。Heatbug模型類封裝Heatbug的行為和執行規則;仿真模型類繼承自SimModelImp 1,實現SimModel接口,負責仿真的建立和運行;熱度空間模型類繼承自Diffuse2D,用于描述熱蟲居住的環境。[6]1-25
模型實現分為三個步驟:第一步是建立模型,通過仿真模型類中的setup和buildModel兩個方法實現。在仿真模型類中有一個由SimModel提供的Agent列表,用于存儲創建的Agent(熱蟲),仿真時首先執行setup方法進行仿真基本信息的建立,然后執行buildModel方法創建規定數量的熱蟲Agent并加入到Agent列表中;第二步是建立顯示機制,通過仿真模型類中的buildDisplay方法實現,負責將熱蟲模型的運行結果顯示在屏幕上;第三步是建立時間序列機制,由仿真模型類的step和buildSchedule兩個方法實現。首先實現step方法以確定在每一次仿真運行中模型的行為,然后將step方法作為參數加入到時間序列表中。
熱蟲模型采用Java語言并在Java開發平臺(Eclipse)上進行開發和實現。模型完成后,即可將模型加入到Repast仿真平臺中。通過該仿真平臺,建模人員可以運行模型,收集運行結果,從而對系統的復雜適應性進行分析。[7]13-15
模型參數選擇如圖3所示,系統的初始狀態見圖1。
經過模型的運行,可以看出:雖然每個Agent的行為很簡單(發熱、移動),它所知道信息也很有限(僅知道相鄰點的溫度),但經過運行一段時間后整個系統出現了圖2中那樣聚集的復雜系統現象。

圖3 模型參數圖
Repast為基于Agent建模仿真構建了一個靈活、簡潔、健壯的可擴展平臺,本文只是給出了簡單的模型及仿真實例,在Heatbug模型,仿真,熱度空間等模型下進行了簡化的處理。隨著研究的進一步深入,我們將通過仿真框架中的模型參數及規則的動態擴展,不斷的完善Heatbug模型,并將深入的學習基于Agent的模型的建模仿真。
[1]廖守億,戴金海.復雜適應系統及基于Agent的建模與仿真方法[J].系統仿真學報,2004,16(1).
[2]Swarm Development Group.Documentation set for swarm 2.1.1 .2002.
[3]李宏亮,金士堯,沈銳,等.Cluster環境中多Agent系統分布仿真的容錯技術[J].計算機工程與科學,2001,23(5).
[4]王紅衛.建模與仿真[M].北京:科學出版社,2002.
[5]方美琪,張樹人.社會經濟系統復雜性探索[M].北京:中國人民大學出版社,2005.
[6] Michael J North, Nicholson T Collier and Jerry R Vos.Experiences Creating Three Implementations of the Repast Agent Modeling Tool2kit [J].ACM Transactions on Modeling and Computer Simulation.2006, 16 (1) .
[7]M J North, T R Howe, N T Collier and J R Vos.Repast Simphony Runtime System[C].In Proceedings of the Agent 2005 Conference on Generative Social Processes, Models, and Mechanisms, 2005,10.