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