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