1 引言
制定科學(xué)的庫(kù)存策略是物流中供應(yīng)鏈管理的關(guān)鍵因素之一。目前大多數(shù)文獻(xiàn)認(rèn)為需求是確定的1-5對(duì)庫(kù)存的研究使用的是數(shù)學(xué)分析的方法。但供應(yīng)鏈中往往由于不可預(yù)知事件的存在導(dǎo)致需求的不確定性,此時(shí)需求量和需求到達(dá)時(shí)間往往必須作為隨機(jī)變量來(lái)考慮。這就需要用隨機(jī)性系統(tǒng)的有效分析技術(shù)——系統(tǒng)仿真的方法來(lái)研究。供應(yīng)鏈中銷(xiāo)售商的庫(kù)存來(lái)自于訂貨,庫(kù)存量根據(jù)時(shí)間上離散的訂貨到達(dá)事件和需求到達(dá)事件而改變,因此是離散事件系統(tǒng);而制造商的庫(kù)存更為復(fù)雜:其庫(kù)存來(lái)自于本企業(yè)的生產(chǎn),因此庫(kù)存量不僅因需求到達(dá)事件而變化,而且?guī)齑媪窟因本企業(yè)的生產(chǎn)而隨時(shí)間呈連續(xù)變化,因此生產(chǎn)-庫(kù)存系統(tǒng)屬于復(fù)雜的離散-連續(xù)系統(tǒng)。為了控制生產(chǎn)-庫(kù)存的成本,必須維持合理的庫(kù)存水平,故供應(yīng)商應(yīng)根據(jù)庫(kù)存情況來(lái)調(diào)節(jié)生產(chǎn)速率。本文基于系統(tǒng)仿真原理6,為供應(yīng)鏈中的制造商建立了需求隨機(jī)的、生產(chǎn)速率多級(jí)可調(diào)的生產(chǎn)-庫(kù)存系統(tǒng)模型,并開(kāi)發(fā)出相應(yīng)的仿真軟件。
提前期是反映物流中服務(wù)質(zhì)量的重要指標(biāo)。企業(yè)有必要兼顧顧客的要求,通過(guò)適當(dāng)增加庫(kù)存成本來(lái)縮短提前期5。但目前的許多文獻(xiàn)忽略了提前期的計(jì)算23。此外,顧客的重要性和對(duì)缺貨的等待時(shí)間的要求往往不相同,這就需要制造商區(qū)分顧客的優(yōu)先級(jí)來(lái)供貨,這也是目前多數(shù)文獻(xiàn)沒(méi)有考慮到的一個(gè)實(shí)際問(wèn)題2-5。本文在仿真模型中,為不同優(yōu)先級(jí)的顧客分別建立相應(yīng)的缺貨隊(duì)列,從而可對(duì)生產(chǎn)-庫(kù)存系統(tǒng)進(jìn)行更接近現(xiàn)實(shí)的動(dòng)態(tài)仿真。所開(kāi)發(fā)的仿真軟件以生產(chǎn)速率發(fā)生突變的臨界庫(kù)存量為決策變量,通過(guò)仿真求得各種決策的庫(kù)存費(fèi)用和提前期,從而選出最優(yōu)決策。
2 生產(chǎn)-庫(kù)存策略
本文中需求量D和相鄰兩次需求到達(dá)的時(shí)間間隔均為隨機(jī)變量。制造商根據(jù)目前的庫(kù)存水平來(lái)決定生產(chǎn)速率P 生產(chǎn)速率分為K級(jí),參見(jiàn)圖1:
(1)當(dāng)庫(kù)存<Inv0,則P=V0;
(2)當(dāng)Invi-1<庫(kù)存<Invi,則P=Vi 式中0<i<K-1;
(3)當(dāng)庫(kù)存Inven=InvK-1,則P=0。
其中Invi是決定生產(chǎn)速率的臨界庫(kù)存,Vi是相應(yīng)階段的生產(chǎn)速率,V0>V1>…>VK-1。生產(chǎn)的產(chǎn)品立即入庫(kù)。需求到達(dá)時(shí),如果此時(shí)的庫(kù)存大于需求量,則立即供貨;否則庫(kù)存處于缺貨狀態(tài)即負(fù)庫(kù)存。當(dāng)有多個(gè)顧客的需求未滿足時(shí),首先為優(yōu)先級(jí)高的顧客補(bǔ)貨。同時(shí),每次需求到達(dá)后,檢查庫(kù)存所處的生產(chǎn)階段,從而調(diào)整生產(chǎn)速率。由于改變生產(chǎn)速率需要消耗一定成本,如果原來(lái)處于停產(chǎn)狀態(tài),為了避免稍有需求就立即恢復(fù)生產(chǎn),故規(guī)定當(dāng)庫(kù)存降至恢復(fù)生產(chǎn)點(diǎn)Repro之下時(shí)才恢復(fù)生產(chǎn)。
生產(chǎn)-庫(kù)存費(fèi)用包括有保管費(fèi)Ch、缺貨費(fèi)Cs和生產(chǎn)費(fèi) Cz7:
Ch=hI+(t)dt⑴
Cs=πI-(t)dt⑵
Cz=zP(t)dt+c×Chg⑶
其中h和π分別是每件產(chǎn)品每天的保管費(fèi)和缺貨損失費(fèi), I+t、I-t分別是t時(shí)刻實(shí)際庫(kù)存量和缺貨量,Pt是t時(shí)刻生產(chǎn)速率,P(t)dt是仿真時(shí)間0T內(nèi)總生產(chǎn)量(記為SP),z是每件產(chǎn)品的生產(chǎn)成本Chg是改變生產(chǎn)速率的次數(shù),c是每次改變速率的成本。
“提前期”除了包括運(yùn)輸時(shí)間之外,主要由制造商不能及時(shí)供貨而造成的顧客等待補(bǔ)貨時(shí)間所引起15。本文中“提前期”是指因缺貨引起的顧客等待補(bǔ)貨的時(shí)間。對(duì)應(yīng)于第i次需求到達(dá)事件的提前期Δti是指該次需求到達(dá)時(shí)間與該需求全部得到滿足的時(shí)間間隔。顯然Δt隨缺貨量的增加而增大。本文定義兩類(lèi)顧客的平均提前期pre分別為該類(lèi)顧客需求一件產(chǎn)品的平均等待時(shí)間,即:
pre=(Δti / Di)(4)
其中Di為第i個(gè)該類(lèi)顧客的需求量,Δti / Di即為該顧客的提前期,n為該類(lèi)顧客的總個(gè)數(shù)。
顧客分為高優(yōu)先級(jí)和低優(yōu)先級(jí)兩類(lèi)。當(dāng)庫(kù)存處于缺貨狀態(tài)時(shí),到達(dá)的顧客排到相應(yīng)的缺貨隊(duì)列的隊(duì)尾。
3 仿真策略和仿真模型
3.1 仿真策略
該系統(tǒng)有兩個(gè)狀態(tài)變量—庫(kù)存量Inven和生產(chǎn)速率P。在離散的時(shí)間點(diǎn)上發(fā)生兩類(lèi)事件—需求到達(dá)事件和減速事件。由圖1可知:當(dāng)減速事件發(fā)生時(shí)P發(fā)生瞬間改變。當(dāng)需求到達(dá)事件發(fā)生時(shí),Inven發(fā)生瞬間變化;如果庫(kù)存減少至另一生產(chǎn)階段,則P也發(fā)生瞬間變化。兩次相鄰事件間隨著生產(chǎn)Inven發(fā)生連續(xù)變化。因此該系統(tǒng)是離散-連續(xù)系統(tǒng)。但庫(kù)存的連續(xù)性變化是線性的,故本文采取的仿真策略是:根據(jù)上次事件發(fā)生時(shí)刻(記為tlast)的庫(kù)存Ilast和P來(lái)求出當(dāng)前庫(kù)存Inven的值:
Inven=Ilast+P×time-tlast 5
故該系統(tǒng)可以用離散事件系統(tǒng)仿真的方法進(jìn)行仿真。
仿真時(shí)鐘time(表示仿真時(shí)間內(nèi)的當(dāng)前值的變量)是隨仿真的進(jìn)程而不斷更新的時(shí)間推進(jìn)機(jī)構(gòu)。本文采用下次事件時(shí)間推進(jìn)法作為仿真時(shí)鐘的推進(jìn)方法,即每次把仿真時(shí)鐘推進(jìn)到下一個(gè)事件發(fā)生的時(shí)刻,在該時(shí)刻系統(tǒng)的狀態(tài)發(fā)生改變。再把仿真時(shí)鐘推進(jìn)到再下一個(gè)事件發(fā)生的時(shí)刻……,直至符合設(shè)定的終止條件時(shí)為止。
未來(lái)發(fā)生的事件放入事件表用鏈表實(shí)現(xiàn)中,減速事件有四個(gè)參數(shù):發(fā)生時(shí)間、事件類(lèi)型、事件發(fā)生時(shí)的庫(kù)存量和事件發(fā)生后的生產(chǎn)速率。需求到達(dá)事件亦有四個(gè)參數(shù):發(fā)生時(shí)間、事件類(lèi)型、需求量和優(yōu)先級(jí)。事件按其發(fā)生時(shí)間插入事件表,使事件表保持按事件的時(shí)間升序排列。
除了初始事件(即第一次需求到達(dá)事件和第一次可能發(fā)生的減速事件)是在仿真前確定之外其他事件都是在仿真過(guò)程中策劃故應(yīng)在仿真中策劃未來(lái)事件即確定未來(lái)事件的屬性并按其發(fā)生時(shí)間插入事件表中。本文在需求事件發(fā)生時(shí)策劃下次需求事件:通過(guò)隨機(jī)抽樣得到需求量D和兩次需求的時(shí)間間隔Tint下次需求事件發(fā)生的時(shí)間t即為time+Tint。在需求到達(dá)事件和減速事件發(fā)生時(shí)均要策劃減速事件:設(shè)目前生產(chǎn)速率為P,庫(kù)存量所處階段為k,則下次可能發(fā)生的減速事件發(fā)生的時(shí)間T1為:
T1=Invk-InvenP +time 6
如果T1<下次需求到達(dá)事件發(fā)生的時(shí)間(即減速事件發(fā)生在下次需求到達(dá)事件之前),則將該減速事件插入事件表(減速事件發(fā)生時(shí)的庫(kù)存為Invk);否則表示減速事件發(fā)生在下次需求到達(dá)之后,因需求到達(dá)時(shí)會(huì)導(dǎo)致庫(kù)存量下降,需要重新確定庫(kù)存所處階段,因此減速事件不一定在預(yù)期的T1時(shí)刻發(fā)生,故不將減速事件插入事件表。
兩個(gè)優(yōu)先級(jí)的缺貨隊(duì)列(分別用二維數(shù)組描述)各有三個(gè)參數(shù):需求到達(dá)時(shí)間tarrive、需求量D、缺貨量Sht。
當(dāng)需求到達(dá)時(shí),如果庫(kù)存從正降為負(fù)(即Ilast>0Inven<0),則開(kāi)始缺貨。此后生產(chǎn)出的產(chǎn)品首先為高優(yōu)先級(jí)隊(duì)列中隊(duì)首顧客補(bǔ)貨。當(dāng)此顧客缺貨全部得到補(bǔ)足時(shí),高優(yōu)先級(jí)隊(duì)列中顧客前移一位,再為此時(shí)的隊(duì)首顧客補(bǔ)貨,……。當(dāng)高優(yōu)先級(jí)缺貨隊(duì)列中缺貨全部得到補(bǔ)足時(shí),開(kāi)始為低優(yōu)先級(jí)缺貨顧客補(bǔ)貨。亦從低優(yōu)先級(jí)缺貨隊(duì)列隊(duì)首開(kāi)始補(bǔ)貨。
3.2 仿真模型
離散-連續(xù)事件系統(tǒng)難以采用某種規(guī)范的形式,一般采用流程圖來(lái)描述。
(1)本文仿真程序的主函數(shù)的流程為:
① 輸入總仿真時(shí)間長(zhǎng)度T,初始庫(kù)存Io0<Io<InvK-1,可調(diào)節(jié)的生產(chǎn)速率數(shù)目K,各個(gè)階段庫(kù)存臨界點(diǎn)Invi,各階段生產(chǎn)速率Vi,以及z w,c,s,h,π,高優(yōu)先級(jí)的比率g,需求量和需求到達(dá)時(shí)間間隔的概率分布參數(shù)。
② 調(diào)用初始化函數(shù),執(zhí)行:a仿真時(shí)鐘及各計(jì)數(shù)器置為0。b?zhēng)齑妫桑睿觯澹钪脼椋桑铮⑴袛鄮?kù)存所在的庫(kù)存階段k以及確定生產(chǎn)速率P=Vk。c調(diào)用隨機(jī)數(shù)產(chǎn)生函數(shù),確定第一次需求到達(dá)事件(包括發(fā)生時(shí)間T1、需求量D和優(yōu)先級(jí)Gi),并插入事件表。d計(jì)算下次可能發(fā)生的減速事件發(fā)生時(shí)間t=Invk-InvenP。若t<T1,則將減速事件(包括該減速事件的其他兩個(gè)參數(shù):發(fā)生時(shí)的庫(kù)存InvK和減速后的速率P1)插入事件表;否則表示第一個(gè)需求事件發(fā)生在減速事件之前,故該減速事件不可能發(fā)生。
③循環(huán)執(zhí)行下列操作:調(diào)用時(shí)序控制函數(shù),其功能是:移出事件表中的第一個(gè)事件,其第二個(gè)參數(shù)即為該事件的類(lèi)型,仿真時(shí)鐘time推進(jìn)到該事件發(fā)生之時(shí);根據(jù)事件類(lèi)型調(diào)用相應(yīng)的事件處理函數(shù)。再次調(diào)用時(shí)序控制函數(shù),…,直到time≥T時(shí),結(jié)束循環(huán)。
④調(diào)用報(bào)告函數(shù),計(jì)算最后一個(gè)事件至T之間發(fā)生的各項(xiàng)生產(chǎn)-庫(kù)存費(fèi)用的日均值,并計(jì)算兩類(lèi)顧客的提前期pre1=sum1/n1,pre2=sum2n2(其中sum1、sum2分別為兩類(lèi)顧客的總提前期,n1、n2分別為兩類(lèi)顧客的需求總次數(shù))。
(2)更新函數(shù):供事件處理函數(shù)調(diào)用,其功能是:根據(jù)Inven和Ilast變更下列統(tǒng)計(jì)計(jì)數(shù)器的值:I+(t)曲線下的面積AP(即I+(t)dt)、I-(t)下的面積AM(即I-(t)dt)和總生產(chǎn)量SP。SP變更為:
SP=SP+Inven-Ilast (7)
設(shè)△AP、△AM分別為AP和AM在tlast到time之間增量(即I+(t)dt)和I-(t)dt))則:
AM=AM+△AM 8
AP=AP+△AP 9
分以下三種情況來(lái)計(jì)算:
① 如果Ilast>0且Inven≥0,此時(shí):
△AM=0 10
△AP=0.5Inven+Ilasttime-tlast 11
△AP即圖1中陰影部分面積。
②如果Ilast<0且Inven≥0(如圖2所示),因生產(chǎn)速率P即tgθ,而△AM和△AP分別為圖中的兩個(gè)三角形的面積,故可得:
△AM=Ilast2(2×P) 12
△AP=Inven2(2×P) 13
③如果Ilast<0,且Inven<0,則:
△AM=0.5|Inven|+|Ilast|time-tlast 14
△AP=0 15
(3)事件處理函數(shù):對(duì)應(yīng)于每一離散事件,其功能是改變狀態(tài)變量的值,策劃未來(lái)事件,變更計(jì)數(shù)器的值。本文的事件處理函數(shù)為:
① 需求到達(dá)事件函數(shù)。其流程見(jiàn)圖3。需要說(shuō)明的是:如果Ilast<0,說(shuō)明上次事件發(fā)生時(shí),有顧客缺貨,因此要調(diào)用計(jì)算提前期函數(shù)。如果Inven<D,即目前庫(kù)存不足以為此次需求供貨,此時(shí)發(fā)生缺貨,故需要計(jì)算缺貨量Sht,即此次需求沒(méi)有得到滿足的量。如P=0(表示處于停產(chǎn)階段)且Inven>Repro(表示庫(kù)存減少后仍處于恢復(fù)生產(chǎn)點(diǎn)Repro之上),故系統(tǒng)仍處于停產(chǎn)階段,生產(chǎn)速率不改變。
② 減速事件函數(shù)。其流程為:a如果Ilast<0,調(diào)用計(jì)算提前期函數(shù)。b按式(4)計(jì)算此時(shí)庫(kù)存Inven;(c)調(diào)用更新函數(shù),根據(jù)該事件的第四個(gè)屬性,確定此時(shí)生產(chǎn)速率P,并累計(jì)生產(chǎn)速率改變次數(shù)。(d)策劃可能發(fā)生的減速事件(見(jiàn)3.1節(jié))。(e)置tlast=time,Ilast=Inven。
(4)計(jì)算提前期函數(shù)。每當(dāng)需求到達(dá)事件或減速事件發(fā)生時(shí),如果上次庫(kù)存Ilast<0(即有顧客等待補(bǔ)貨),則調(diào)用計(jì)算提前期函數(shù)。
本文對(duì)缺貨顧客的補(bǔ)貨策略是:生產(chǎn)出的產(chǎn)品立即為缺貨顧客補(bǔ)貨,高優(yōu)先級(jí)顧客優(yōu)先得到補(bǔ)足。
該函數(shù)的流程為:
①置開(kāi)始為隊(duì)首顧客補(bǔ)貨的時(shí)刻Ti=tlast。
②如果高優(yōu)先級(jí)缺貨隊(duì)列非空且Ti<time(表明在當(dāng)前時(shí)刻time之前已到了開(kāi)始為隊(duì)首顧客補(bǔ)貨的時(shí)刻Ti),則執(zhí)行下列循環(huán):a計(jì)算隊(duì)首顧客的缺貨得到補(bǔ)足的時(shí)刻Td=Ti+ShtP,(Sht為缺貨量,ShtP即該顧客缺貨全部得到補(bǔ)足所需要的時(shí)間)。b如果Td≤time,表示此時(shí)該顧客缺貨已全部得到補(bǔ)足,則取出隊(duì)首顧客,該隊(duì)列中其他顧客依次前移一位。置此時(shí)隊(duì)首顧客開(kāi)始補(bǔ)貨的時(shí)間Ti=Td,并累加高優(yōu)先級(jí)的總提前期:
sum1=sum1+Td-tarriveD (16)
其中 D為此次補(bǔ)貨顧客的需求量。否則(即如果Td>time),表示此時(shí)該顧客的缺貨尚未全部得到補(bǔ)足,而在Ti至time時(shí)間內(nèi)生產(chǎn)量為time-Ti×P,因此此時(shí)隊(duì)首顧客的缺貨量Sht降至Sht-time-Ti×P,同時(shí)置Ti=time。
③按相同方法處理低優(yōu)先級(jí)缺貨隊(duì)列。
(5) 隨機(jī)數(shù)產(chǎn)生函數(shù)
①抽樣產(chǎn)生顧客優(yōu)先級(jí):因?yàn)椋缡歉邇?yōu)先級(jí)顧客的概率,故當(dāng)r<g時(shí)(r?yàn)椋埃眳^(qū)間內(nèi)均勻分布的隨機(jī)數(shù)),則為高優(yōu)先級(jí);否則為低優(yōu)先級(jí)。
②本文設(shè)需求到達(dá)的時(shí)間間隔服從平均值為rmean的指數(shù)分布,其分布函數(shù)為:
F(x)=1-e-17
根據(jù)逆變換法產(chǎn)生連續(xù)分布的隨機(jī)變量的方法6,解方程 x=F-1(r),可得到服從指數(shù)分布的隨機(jī)數(shù):
x=-rmean×ln(1-r)18
因?yàn)椋保蛞彩牵埃眳^(qū)間內(nèi)均勻分布的隨機(jī)數(shù),故上式(18)也可以簡(jiǎn)化為:
X=-rmean×ln(r)19
③本文設(shè)需求量是離散型均勻分布隨機(jī)變量,其密度函數(shù)為:
P(xi)=1N (i=1,2,…,N)20
其分布函數(shù)為:
F(xi)=iN(21)
逆變換法產(chǎn)生離散隨機(jī)變量的方法是計(jì)算滿足下式的xk值xk即為所求的隨機(jī)數(shù):
F(xk-1)<r≤F(xk)(22)
把21式代入22式,解不等式得:
Nr≤k<Nr+123
即:K=Nr+1(24)
其中 表示舍去小數(shù)取整數(shù)。因此所求隨機(jī)變量:
xk=xNr+125
4 仿真結(jié)果
本仿真程序用面向?qū)ο蟮能浖_(kāi)發(fā)工具vc 6.0編制。設(shè)企業(yè)各階段的生產(chǎn)速率為已知,以臨界庫(kù)存(即Inv0Inv1 ReproInv2)為決策變量(即表1中第一列“策略”中的4個(gè)數(shù)字),各項(xiàng)庫(kù)存費(fèi)用和提前期為目標(biāo)變量,取T=2 000;k=3;Io=5;h=1;π=4;z=10;c=20;g=0.5;產(chǎn)生需求量的概率分布參數(shù)為:rmean=2,N=5,x1=5 x2=10 x3=15 x4=20,x5=25; 各階段的生產(chǎn)速率為:v0=2,v1=4,v2=7。以輸入下列四組不同的生產(chǎn)-庫(kù)存策略為例,所得仿真結(jié)果見(jiàn)表1。
從表1中可以看出,策略4的費(fèi)用最少,而策略1的提前期最小。這就需要企業(yè)根據(jù)顧客對(duì)提前期的要求,來(lái)決定最佳策略,如果高優(yōu)先級(jí)顧客要求平均提前期不超過(guò)0.033(即當(dāng)一天內(nèi)需求量小于30時(shí),平均而言當(dāng)天可以得到滿足),則只有策略1和策略3符合要求,明顯策略3總費(fèi)用少,因此策略3為四組中最好的策略。
5 結(jié)束語(yǔ)
本文基于系統(tǒng)仿真原理,建立了生產(chǎn)速率可調(diào)、顧客有不同優(yōu)先級(jí)的生產(chǎn)-庫(kù)存系統(tǒng)的仿真模型,并開(kāi)發(fā)了相應(yīng)的仿真程序,可得到庫(kù)存總費(fèi)用和兩類(lèi)優(yōu)先級(jí)顧客的提前期,為制造商作出科學(xué)的生產(chǎn)和庫(kù)存決策提供了有效的工具。在實(shí)際應(yīng)用中,可根據(jù)需求量和需求到達(dá)時(shí)間間隔的觀察數(shù)據(jù),得到這些隨機(jī)變量的概率分布,從而編寫(xiě)相應(yīng)的隨機(jī)數(shù)產(chǎn)生子函數(shù),來(lái)代替本文中的指數(shù)分布和離散均勻分布的隨機(jī)數(shù)產(chǎn)生子函數(shù)。