史 歷,夏先進
SHI Li1, XIA Xian-jin2
(1. 西安航空技術高等專科學校 基礎課部,西安 710077;2. 西北工業大學 軟件與微電子學院,西安 710072)
基于Matlab解決生產—庫存問題
To solve pproduction and inventory problem based on Matlab
史 歷1,夏先進2
SHI Li1, XIA Xian-jin2
(1. 西安航空技術高等??茖W校 基礎課部,西安 710077;2. 西北工業大學 軟件與微電子學院,西安 710072)
生產—庫存問題是多階段決策問題,若用動態規劃建立模型求其解,則非常復雜;基于Matlab軟件,給出一般的求解程序及命令,使得問題得以解決。
生產—庫存;多階段決策;Matlab軟件;源碼程序
生產—庫存問題是一個多階段決策問題,屬運籌學中動態規劃所研究解決的范圍。動態規劃(dynamic programming)是運籌學的一個分支,是求解多階段決策問題的最優化方法。20世紀50年代初由貝爾曼(R.Beliman)等人在研究多階段決策過程(multistep decision process)的優化問題時,提出了著名的最優性原理(principle of optimality),把多階段過程轉化為一系列單階段問題,逐個求解,創立了解決這類過程優化問題的新方法—動態規劃。其數學模型為:

其中:R效益總和,rk(xk,uk)為階段效益,xk+1=Tk(xk,uk)為狀態轉移方程,xk各階段狀態集合,uk為各階段決策集合,k為階段變量。
生產—庫存問題是企業在生產實踐中經常遇到的實際問題。所謂生產—庫存問題,就是一個生產部門在已知生產成本、庫存費用和各階段市場需求量的條件下,如何決定各階段的生產量,欲使計劃期內的費用總和最小的問題。我們所要解決的是如何決策各階段的生產量,若進行大批量的生產可以降低成本,但當超過市場的需求量時,就會造成積壓而增加庫存費用,但如果按市場的需求量來安排生產,也會出現由于開工不足或加班加點造成生產成本的提高。由于生產—庫存問題涉及的因素較多,用數學模型在求其解時其計算非常復雜,這對于解決生產—庫存問題的工作者或決策者來說,無論是理論計算或實際應用都會帶來很多的困難和不便。下面先列出在生產—庫存問題中所要考慮到的因素并用變量表示:
1)生產計劃期分為n各階段,即 k = 1 ~ n ;
2)最初的庫存量x0;
3)各階段市場的需求量dk;
4)各階段生產單位產品的消耗費用Hk;
5)各階段單位產品的庫存費用Fk;
6)各階段的倉庫容量mk;
7)各階段的最大生產能力bk;
8)各階段生產的準備費用Ck(若產量=0,則Ck=0)。
9)計劃期末庫存量x00。
生產—庫存問題就是要解決:在所處條件和要求的約束下,如何決策各階段的生產量,使得既滿足各階段市場的需求量,又使計劃期內總的費用為最低的目標。
生產—庫存問題所涉及的因素較多,將所有因素都考慮在內,基于Matlab軟件,給出求解程序及運行命令。先建立如下六個m文件:
1)狀態變量xk為階段k的初始庫存量,由于x0與x00是已知的,于是問題是始端末端固定的問題,其約束條件為:0≤xk≤Min{mk,dk+dk+1+…+dn+x00}。
所建立的m文件為:

2)決策變量uk為階段k的生產量,其約束條件為:Max{0,dk-xk}≤uk≤Min{bk,dk+dk+1+…+dn+x00-xk,mk-xk+dk}。
所建立的m文件為:

3)狀態轉移方程為:xk+1= xk+uk-dk,
建立第三個m文件為:

4)各個階段的效益為:

建立第四個m文件為:

5)建立第五個m文件:引入參考文獻[1]第184頁文件dynprog.m并作如下修改。


將以上六個m文件保存在Matlab的work中,在求解實際問題時,先在Matlab運行窗口中設定參數:生產計劃期分為的階段n;最初的庫存量x0及期末庫存量x00;各階段市場的需求量d=[d1,d2,...,dn,x00]; 各階段的倉庫容量m=[m1,m2,...,mn,x00];各階段的最大生產能力b=[b1,b2,...,bn,0];各階段生產單位產品的消耗費用H=[h1,h2,...,hn,0];各階段單位產品的庫存費用F=[f1,f2,...,fn,0];各階段生產的準備費用C=[c1,c2,...,cn,0]。
然后輸入命令:
[p_opt,fval]=prdcStoreProb(x0,x00,d,m,b,H,F,C,'DecisF_1','ObjF_1','TransF_1')
運行后,p_opt有四列輸出:第一列為階段序號;第二列為各階段初的庫存量;第三列為各階段的最優生產量;第四列為各階段的費用。在fval輸出中顯示了計劃期最優決策的總費用。
例如:某企業計劃初期產品的庫存為2個單位,欲進行六個月的生產計劃件,要求計劃期末庫存為1個單位;據預測每個月的最大生產能力分別為:8、7、8、5、6、7個單位,需求量分別為:5、3、2、6、3、7個單位,最大庫存容量分別為:15、12、7、8、10、9個單位,生產費用每單位分別為:3、2、5、4、3、5千元,生產所需的準備費用分別為:2、3、1、4、3、2千元,每單位的庫存費用分別為:0.005、0.004、0.005、0.002、0.003、0.002千元。求使總費用最小的最優生產計劃。
在Matlab運行窗口中輸入參數:


所得到的最優決策為:第一、三、五、六各月分別安排生產6、8、4、7個單位,其余月份不生產;最少費用為67(千元)。
以上所建立的m文件較多,其目的能夠對實際應用者提供方便。生產—庫存問題不僅生產經營部門會遇到,在商業中的采購營銷部門同時也存在這樣的問題,只需將投入生產的固定和變動成本變為采購商品的固定和變動成本即可應用于實際;企業在市場經營中追求利潤最大和成本最低為主要目標,解決生產—庫存問題能夠使企業減少成本,增加貨幣的流通性,為利潤最大化的實現提供了最優決策,在一定的范圍內具有實際應用價值。文章中的源碼及程序均在Matlab6.5.1中通過驗證。
[1] 胡良劍,等.數學實驗一使用MATLAB[M].上海:上海科學技術出版杜,2001.
[2] 趙靜,但琦.數學建模與數學實驗[M].北京:高等教育出版社,2003.
[3] 楊民助.運籌學[M].西安:西安交通大學出版社,2001.
[4] 樓順天,等.MATLAB 7.X程序設計語言[M].西安:西安電子科技大學出版社,2007.
TH166
A
1009-0134(2010)10(下)-0051-03
10.3969/j.issn.1009-0134.2010.10(下).16
2010-04-09
史歷(1956 -),男,山西垣曲人,副教授,主要從事應用數學及數學模型的教學與研究。