摘要:文章主要介紹了Swarm的主要特點以及利用Swarm進行建模仿真的一般思路,然后給出了庫存系統決策分析模型,并對該模型的構建過程進行了分析,試圖為研究和使用Swarm提供了一條捷徑。
關鍵詞:Swarm;庫存系統;建模仿真
一、CAS
CAS理論是遺傳算法之父和復雜性科學的先驅者之——Holland在1994年提出的。其將系統成員看作是具有自身目的和主動性、積極的“活”主體。主體能夠與環境以及其他主體進行相互作用,在持續不斷的相互作用中,不斷地“學習”或“積累經驗”,并且根據學到的經驗改變自身的結構和行為方式。整個系統的演變和進化,包括新層次的產生、分化和多樣性的出現,新的、聚合而成的、更大的主體等等,都是在這個基礎上出現的。更重要的CAS理論認為正是主體的這種主動性以及它與環境間反復的、相互的作用,才是系統發展和演化的基本動因。大量的研究事實表明,由使用性產生的復雜性,即所謂的復雜適應系統確實是一大類十分重要、非常常見的復雜系統。
二、Swarm
Swarm實際是一個用Object-C(一種面向對象的C語言)語言編寫的類庫集。它是一個自由軟件,其源代碼是開放的,并且Swarm的使用者之間能方便進行自由交流,實現研究成果共享。Swarm最初是為支持X Window系統的Unix操作系統開發的。1995年發布了第一個Beta版。1997年1月發布了Swarm 1.0版本,該版本能在Solaris和Linux操作系統上運行。隨后經過較小的修改,該版本能DEC Alpha平臺和Unix操作系統上運行。1998年4月Swarm 1.1版本發布,由于其引入了Cygnus Win32包,使其能在Miscrosoft Windows95/98/NT上運行。1999年年底,發布了支持Java語言的Swarm 2.0和2.0.1版本。這樣,Swarm可以同時支持Object-C和Java變成,使其越來越利于眾多非計算機專業研究人員的使用,因此應用日益廣泛。目前,Swarm Development Group(SDG)的首要任務是將Swarm進一步通用化,使之支持更多操作系統,并能采用更多的計算機語言進行編程。
(一)Swarm的主要特點
1、面向對象的設計思想。Swarm是一個多主體建模仿真框架,多主體建模與面向對象的分析和設計思想有一定的相似之處。在面向對象的分析與設計(OOA、OOD)中,定義了各種類,這些類在程序運行時創建若干個類的實例,稱為對象。每個對象包括描述對象自身狀態的實例變量,稱為屬性(Attribute),以及由類定義的描述對象行為的方法(Method)。對象之間通過發送和接收消息來通信。Swarm本身就是使用面向對象方法和技術的一個設計良好的類庫。
2、離散時間仿真。Swarm仿真模型實質上是離散時間的仿真模型:仿真時鐘以離散的方式推進,模型中得主體通過在離散的時刻發生的事件來改變自身的狀態并與模型中的其他主體進行交互。由于模型中的每個主體都又若干個事件,主體之間通過離散事件進行交互,所以這些事件之間有一定的引發(一個事件的發生引起另一個事件的發生)和時序關系(事件之間在時間上的關系)。
3、探測器技術與圖形化用戶界面。在系統仿真中,觀察模型的運行狀態對運行結果的分析非常重要。Swarm使用“探測器”(Probe)技術從運行的模型中提取數據,并提供了圖形化的用戶界面來顯示運行結果。探測器實際上是Swarm類庫中事先定義好的一系列類。Swarm為用戶提供了一個非常直觀的圖形輸出界面。
(二)Swarm仿真程序的層次結構及類庫
Swarm仿真程序包括:ModelSwarm(模型Swarm)、ObserverSwarm(觀察者Swarm)和Agent(仿真主體)。其中的ModelSwarm和ObserverSwarm都是Swarm類的子類,它們二者建立了Swarm仿真程序的框架結構。仿真主體對象則對應所要模擬的真實系統中有代表性的微觀主體和這些個體活動的環境,主體對象是SwarmObject類的子類,繼承SwarmObject的一些既有方法以提供對探測器和內存管理的支持。
Swarm以下核心類庫:Defobj、Collection、Random、Tkobjc、Swarmobject、Activity和Smitools。
三、Swarm建模實例
(一)庫存系統概述
一般的庫存系統,主要包括庫存狀態、補充和需求。庫存狀態是指存貨隨著時間的推移而發生的盤點數量的變化,存貨數量隨著需求過程而減少,又隨補充過程而增加。需求是系統的輸出,它可以有不同的形式,包括連續需求、間斷需求、已知的確定性需求和隨即需求等,一般來說不受控制。給定了需求形式,系統輸出特性也就確定了。補充是系統的輸入,補充策略根據系統的目標和需求方式來確定,是庫存系統管理決策的關注重點。
不同的需求與補充就決定系統的庫存狀態,它是一個隨時間變化的動態過程。庫存系統的研究就是為了求解系統的動態庫存狀態,并根據庫存狀態變化所引起的成本進行科學的管理和決策。
本文模擬的是多周期提前訂貨有折扣的庫存系統,比較接近現實的庫存系統,訂貨有延遲,需要提前訂貨,當訂貨數量超過某定值時可享受折扣。本模型采取的訂貨策略是每次訂貨發出,尚未到貨時不繼續發出訂貨單。
(二)模型設計
在本庫存仿真系統中,僅一類個體——庫存。仿真模型的參數設計(以下列出主要參數):
1、需求量D為離散隨即變量。
2、訂貨提前期order_before_day為離散隨即變量,在系統中隨即產生(0,1]之間的隨數r,若r∈(0,0.125]時,則order_before_day=1;若r∈(0.125,0.5]時,則order_before_day=2;若r∈(0.5,1]時,則order_before_day=3。
3、折扣率。每次訂貨量超過一個固定值時,可以享受25%的折扣。
4、最大庫存(max_stock)。
5、最小庫存(orderPoint),即定貨點,當庫存數量小于最小庫存時,開始訂貨。
6、缺貨損失(scarcityLosses)。
7、訂貨費用(orderCost)。
8、保管費用(reserveCost)。
9、折扣率(discount_rate)。
10、缺貨數量(scarcity_num)。
11、到貨的天數(goods_arrive_day)。
12、當期的總費用(periodActualCost)。
主體的行為主要有:
訂貨行為,當庫存不夠時,發出訂貨單。
需求行為,根據產生的隨機變量,決定需要的貨物的個數。計算當前庫存量,計算缺貨量。
到貨行為,此到貨行為中,主要完成參數狀態的修改,計算庫存量。
最后結算本期費用。計算相關費用,如保存費用、存儲費用、缺失損失等。
(三)仿真實現
依據Swarm仿真程序的層次結構,一個Swarm一般由兩部分組成:一系列相關聯的對象的集合以及這些對象的動作序列表,Swarm仿真程序就是圍繞Swarm進行組織的。
1、在ModelSwarm對象中,首先,定義主體——庫存,以及主體的數量,通過buildObjects方法來創建對象。其次,通過buildActions方法為ActionGroup的實例對象賦值來規定主體行為的執行順序和觸發條件,然后在Schedule對象中定義ActionGroup第一次執行的時間和各次執行的時間間隔。此外,ModelSwamr還包括一系列輸入和輸出參數。如主體個數的初始值、庫存的最大值等。輸出包括當前狀態及運行結果等,各初始值如圖1所示。

2、ObserverSwarm在仿真過程中,檢測模型的運行過程并記錄模型的輸出結果。ObserverSwarm通過探測器(Probe)接口觀察ModelSwarm對象中各個個體狀態的變化,并以圖形的方式輸出。
本模型中初始產生主體個數為5,運行100期,每期代表真實的時間為1天,初始庫存90,最大庫存140,最小庫存60,觀察100期內總費用,運行結果如圖2所示。
改變策略,最大庫存設置為250,其他初始參數不變,運行程序。結果如圖3所示。
四、結論
從以上模型的結果可以總結出,改變策略后,在同樣的運行周期內,可以節省費用,因為第1種策略最大庫存是140,在這種情況下,訂貨的數量最大不超過140,享受不了打折的優惠,改變策略后,某些時候可以享受到優惠。可以根據具體的情況,調整訂貨的策略,也可以改變模型的初始值。從對Swarm本身以及庫存系統的仿真模型的研究表明,Swarm很適合基于個體Agent的復雜適應系統仿真建模。另外,由于swarm源代碼開放以及提供了標準接口,使其具有良好的可擴展性,更易于實現特定的目標模型。
參考文獻:
1、