史 歷,夏先進
SHI Li1, XIA Xian-jin2
(1. 西安航空技術(shù)高等??茖W(xué)校 基礎(chǔ)課部,西安 710077;2. 西北工業(yè)大學(xué) 軟件與微電子學(xué)院,西安 710072)
基于Matlab解決生產(chǎn)—庫存問題
To solve pproduction and inventory problem based on Matlab
史 歷1,夏先進2
SHI Li1, XIA Xian-jin2
(1. 西安航空技術(shù)高等??茖W(xué)校 基礎(chǔ)課部,西安 710077;2. 西北工業(yè)大學(xué) 軟件與微電子學(xué)院,西安 710072)
生產(chǎn)—庫存問題是多階段決策問題,若用動態(tài)規(guī)劃建立模型求其解,則非常復(fù)雜;基于Matlab軟件,給出一般的求解程序及命令,使得問題得以解決。
生產(chǎn)—庫存;多階段決策;Matlab軟件;源碼程序
生產(chǎn)—庫存問題是一個多階段決策問題,屬運籌學(xué)中動態(tài)規(guī)劃所研究解決的范圍。動態(tài)規(guī)劃(dynamic programming)是運籌學(xué)的一個分支,是求解多階段決策問題的最優(yōu)化方法。20世紀50年代初由貝爾曼(R.Beliman)等人在研究多階段決策過程(multistep decision process)的優(yōu)化問題時,提出了著名的最優(yōu)性原理(principle of optimality),把多階段過程轉(zhuǎn)化為一系列單階段問題,逐個求解,創(chuàng)立了解決這類過程優(yōu)化問題的新方法—動態(tài)規(guī)劃。其數(shù)學(xué)模型為:
其中:R效益總和,rk(xk,uk)為階段效益,xk+1=Tk(xk,uk)為狀態(tài)轉(zhuǎn)移方程,xk各階段狀態(tài)集合,uk為各階段決策集合,k為階段變量。
生產(chǎn)—庫存問題是企業(yè)在生產(chǎn)實踐中經(jīng)常遇到的實際問題。所謂生產(chǎn)—庫存問題,就是一個生產(chǎn)部門在已知生產(chǎn)成本、庫存費用和各階段市場需求量的條件下,如何決定各階段的生產(chǎn)量,欲使計劃期內(nèi)的費用總和最小的問題。我們所要解決的是如何決策各階段的生產(chǎn)量,若進行大批量的生產(chǎn)可以降低成本,但當(dāng)超過市場的需求量時,就會造成積壓而增加庫存費用,但如果按市場的需求量來安排生產(chǎn),也會出現(xiàn)由于開工不足或加班加點造成生產(chǎn)成本的提高。由于生產(chǎn)—庫存問題涉及的因素較多,用數(shù)學(xué)模型在求其解時其計算非常復(fù)雜,這對于解決生產(chǎn)—庫存問題的工作者或決策者來說,無論是理論計算或?qū)嶋H應(yīng)用都會帶來很多的困難和不便。下面先列出在生產(chǎn)—庫存問題中所要考慮到的因素并用變量表示:
1)生產(chǎn)計劃期分為n各階段,即 k = 1 ~ n ;
2)最初的庫存量x0;
3)各階段市場的需求量dk;
4)各階段生產(chǎn)單位產(chǎn)品的消耗費用Hk;
5)各階段單位產(chǎn)品的庫存費用Fk;
6)各階段的倉庫容量mk;
7)各階段的最大生產(chǎn)能力bk;
8)各階段生產(chǎn)的準備費用Ck(若產(chǎn)量=0,則Ck=0)。
9)計劃期末庫存量x00。
生產(chǎn)—庫存問題就是要解決:在所處條件和要求的約束下,如何決策各階段的生產(chǎn)量,使得既滿足各階段市場的需求量,又使計劃期內(nèi)總的費用為最低的目標。
生產(chǎn)—庫存問題所涉及的因素較多,將所有因素都考慮在內(nèi),基于Matlab軟件,給出求解程序及運行命令。先建立如下六個m文件:
1)狀態(tài)變量xk為階段k的初始庫存量,由于x0與x00是已知的,于是問題是始端末端固定的問題,其約束條件為:0≤xk≤Min{mk,dk+dk+1+…+dn+x00}。
所建立的m文件為:
2)決策變量uk為階段k的生產(chǎn)量,其約束條件為:Max{0,dk-xk}≤uk≤Min{bk,dk+dk+1+…+dn+x00-xk,mk-xk+dk}。
所建立的m文件為:
3)狀態(tài)轉(zhuǎn)移方程為:xk+1= xk+uk-dk,
建立第三個m文件為:
4)各個階段的效益為:
建立第四個m文件為:
5)建立第五個m文件:引入?yún)⒖嘉墨I[1]第184頁文件dynprog.m并作如下修改。
將以上六個m文件保存在Matlab的work中,在求解實際問題時,先在Matlab運行窗口中設(shè)定參數(shù):生產(chǎn)計劃期分為的階段n;最初的庫存量x0及期末庫存量x00;各階段市場的需求量d=[d1,d2,...,dn,x00]; 各階段的倉庫容量m=[m1,m2,...,mn,x00];各階段的最大生產(chǎn)能力b=[b1,b2,...,bn,0];各階段生產(chǎn)單位產(chǎn)品的消耗費用H=[h1,h2,...,hn,0];各階段單位產(chǎn)品的庫存費用F=[f1,f2,...,fn,0];各階段生產(chǎn)的準備費用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有四列輸出:第一列為階段序號;第二列為各階段初的庫存量;第三列為各階段的最優(yōu)生產(chǎn)量;第四列為各階段的費用。在fval輸出中顯示了計劃期最優(yōu)決策的總費用。
例如:某企業(yè)計劃初期產(chǎn)品的庫存為2個單位,欲進行六個月的生產(chǎn)計劃件,要求計劃期末庫存為1個單位;據(jù)預(yù)測每個月的最大生產(chǎn)能力分別為:8、7、8、5、6、7個單位,需求量分別為:5、3、2、6、3、7個單位,最大庫存容量分別為:15、12、7、8、10、9個單位,生產(chǎn)費用每單位分別為:3、2、5、4、3、5千元,生產(chǎn)所需的準備費用分別為:2、3、1、4、3、2千元,每單位的庫存費用分別為:0.005、0.004、0.005、0.002、0.003、0.002千元。求使總費用最小的最優(yōu)生產(chǎn)計劃。
在Matlab運行窗口中輸入?yún)?shù):
所得到的最優(yōu)決策為:第一、三、五、六各月分別安排生產(chǎn)6、8、4、7個單位,其余月份不生產(chǎn);最少費用為67(千元)。
以上所建立的m文件較多,其目的能夠?qū)嶋H應(yīng)用者提供方便。生產(chǎn)—庫存問題不僅生產(chǎn)經(jīng)營部門會遇到,在商業(yè)中的采購營銷部門同時也存在這樣的問題,只需將投入生產(chǎn)的固定和變動成本變?yōu)椴少徤唐返墓潭ê妥儎映杀炯纯蓱?yīng)用于實際;企業(yè)在市場經(jīng)營中追求利潤最大和成本最低為主要目標,解決生產(chǎn)—庫存問題能夠使企業(yè)減少成本,增加貨幣的流通性,為利潤最大化的實現(xiàn)提供了最優(yōu)決策,在一定的范圍內(nèi)具有實際應(yīng)用價值。文章中的源碼及程序均在Matlab6.5.1中通過驗證。
[1] 胡良劍,等.數(shù)學(xué)實驗一使用MATLAB[M].上海:上??茖W(xué)技術(shù)出版杜,2001.
[2] 趙靜,但琦.數(shù)學(xué)建模與數(shù)學(xué)實驗[M].北京:高等教育出版社,2003.
[3] 楊民助.運籌學(xué)[M].西安:西安交通大學(xué)出版社,2001.
[4] 樓順天,等.MATLAB 7.X程序設(shè)計語言[M].西安:西安電子科技大學(xué)出版社,2007.
TH166
A
1009-0134(2010)10(下)-0051-03
10.3969/j.issn.1009-0134.2010.10(下).16
2010-04-09
史歷(1956 -),男,山西垣曲人,副教授,主要從事應(yīng)用數(shù)學(xué)及數(shù)學(xué)模型的教學(xué)與研究。