版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)第10章某零食企業(yè)W庫(kù)存策略?xún)?yōu)化實(shí)戰(zhàn)10.1背景介紹企業(yè)W是一家以零食為主要產(chǎn)品的企業(yè):來(lái)自線上需求激增,需求結(jié)構(gòu)日趨復(fù)雜非必要庫(kù)存高,熱銷(xiāo)商品缺貨暴露了傳統(tǒng)庫(kù)存管理模式的低效滯后企業(yè)的發(fā)展趨勢(shì)和轉(zhuǎn)型需求:由人工預(yù)測(cè)、手工計(jì)劃的模式的數(shù)字化轉(zhuǎn)型將海量數(shù)據(jù)的價(jià)值充分利用起來(lái)建立一個(gè)智能化的補(bǔ)貨系統(tǒng)10.1背景介紹試點(diǎn)規(guī)模:該系統(tǒng)的功能需求:提供多種基于歷史銷(xiāo)量數(shù)據(jù)擬合產(chǎn)品需求分布的擬合工具給定庫(kù)存策略下,策略參數(shù)與安全庫(kù)存量的自動(dòng)化計(jì)算提供一套庫(kù)存策略模擬仿真工具進(jìn)行成本評(píng)估200+SKU1天/3天/7天的盤(pán)貨周期2至7天不等的提前期10.2數(shù)據(jù)集概況數(shù)據(jù)規(guī)模:表一數(shù)據(jù):‘sku_id’:產(chǎn)品id‘date’:銷(xiāo)售日期‘sale’:銷(xiāo)量2020年8月1日開(kāi)始,到2021年1月31日為止6個(gè)月的銷(xiāo)量數(shù)據(jù)前四個(gè)月的數(shù)據(jù)作為訓(xùn)練集(train_df)后兩個(gè)月為測(cè)試集(test_df)datesku_idsale02020-08-01SKU0016.012020-08-01SKU002722.022020-08-01SKU00310.032020-08-01SKU0049.042020-08-01SKU0057.010.3需求預(yù)測(cè)參數(shù)化方法:調(diào)用Python的scipy.stats統(tǒng)計(jì)工具包進(jìn)行分布擬合:正態(tài)分布擬合伽馬分布擬合泊松分布擬合對(duì)數(shù)正態(tài)分布擬合defget_para_policy(sales_qty,rep_time,dist_type,target_csl,
sample_size=1000):
"""
Args:
sales_qty:銷(xiāo)量數(shù)據(jù)
rep_time:補(bǔ)貨周期
dist_type:指定擬合分布類(lèi)型
target_csl:期望的周期服務(wù)水平
sample_size:樣本量
Return:
dist_paras:擬合出的需求分布參數(shù)
oul:目標(biāo)庫(kù)存水平
ss:安全庫(kù)存量
"""
ifdist_type==
'normal':
dist_paras=stats.norm.fit(sales_qty)
dist=stats.norm(*dist_paras)10.3需求預(yù)測(cè)代碼續(xù):elifdist_type==
'gamma':
dist_paras=stats.gamma.fit(sales_qty)
dist=stats.gamma(*dist_paras)
elifdist_type==
'poisson':
dist_paras=np.mean(sales_qty)
dist=stats.poisson(dist_paras)
elifdist_type==
'lognormal':
dist_paras=stats.lognorm.fit(sales_qty)
dist=stats.lognorm(*dist_paras)
else:
raise
Exception
#根據(jù)分布,構(gòu)造補(bǔ)貨周期內(nèi)需求樣本
rep_time_sample=[sum(dist.rvs(rep_time))for_inrange(sample_size)]
oul=np.quantile(rep_time_sample,target_csl)
ss=oul-np.mean(rep_time_sample)
returndist_paras,oul,ss10.3需求預(yù)測(cè)參數(shù)化方法:假設(shè)每天的需求獨(dú)立,構(gòu)造補(bǔ)貨周期內(nèi)需求樣本#根據(jù)分布,構(gòu)造補(bǔ)貨周期內(nèi)需求樣本
rep_time_sample=[sum(dist.rvs(rep_time))for_inrange(sample_size)]
oul=np.quantile(rep_time_sample,target_csl)
ss=oul-np.mean(rep_time_sample)
returndist_paras,oul,ss對(duì)于’SKU001’,使用正態(tài)分布進(jìn)行需求擬合:
sku=
'SKU001'
sku_sales_qty=train_df[train_df['sku_id']==sku]['sale'].values.tolist()
normal_dist_paras,normal_oul,normal_ss=get_para_policy(sku_sales_qty,rep_time_dict[sku],
'normal',0.9)print('使用正態(tài)方法進(jìn)行擬合,估計(jì)得到的均值為:%.2f,標(biāo)準(zhǔn)差為:%.2f'
%(normal_dist_paras[0],normal_dist_paras[1]))
print('目標(biāo)庫(kù)存水平為:%.2f'
%normal_oul)
print('安全庫(kù)存量為:%.2f'
%normal_ss)估計(jì)得到的均值為:26.16,標(biāo)準(zhǔn)差為:61.42
目標(biāo)庫(kù)存水平為:406.92
安全庫(kù)存量為:210.4410.3需求預(yù)測(cè)經(jīng)驗(yàn)分布估計(jì):使用經(jīng)驗(yàn)分布估計(jì)相應(yīng)的需求分位數(shù),計(jì)算對(duì)應(yīng)庫(kù)存指標(biāo):
defget_empirical_policy(sales_qty,rep_time,target_csl,sample_size=1000):
"""
Args:
sales_qty:銷(xiāo)量數(shù)據(jù)
rep_time:補(bǔ)貨周期
target_csl:期望的周期服務(wù)水平
sample_size:樣本量
Return:
oul:目標(biāo)庫(kù)存水平
ss:安全庫(kù)存量
"""
#使用重采樣技術(shù),構(gòu)造提前期內(nèi)需求樣本
rep_time_sample=[sum(np.random.choice(sales_qty,rep_time,
replace=True))
for_inrange(sample_size)]
oul=np.quantile(rep_time_sample,target_csl)
ss=oul-np.mean(rep_time_sample)
returnoul,ss10.3需求預(yù)測(cè)經(jīng)驗(yàn)分布估計(jì):對(duì)‘SKU001’使用經(jīng)驗(yàn)分布方法,使用重采樣技術(shù),構(gòu)造提前期內(nèi)需求樣本,并計(jì)算樣本分位數(shù):
empirical_oul,empirical_ss=get_empirical_policy(sku_sales_qty,
rep_time_dict[sku],
0.9)
print('使用經(jīng)驗(yàn)分布的方法計(jì)算得到的目標(biāo)庫(kù)存水平為:%.2f'
%empirical_oul)
print('使用經(jīng)驗(yàn)分布的方法計(jì)算得到的安全庫(kù)存量為:%.2f'
%empirical_ss)使用經(jīng)驗(yàn)分布的方法計(jì)算得到的目標(biāo)庫(kù)存水平為:493.10
使用經(jīng)驗(yàn)分布的方法計(jì)算得到的安全庫(kù)存量為:288.8810.3需求預(yù)測(cè)基于核密度函數(shù)的非參數(shù)估計(jì):定義函數(shù)get_kde_policy對(duì)銷(xiāo)量數(shù)據(jù)進(jìn)行擬合,使用留一交叉驗(yàn)證方法,選擇合適的帶寬,并計(jì)算相應(yīng)的庫(kù)存策略
#調(diào)用kde計(jì)算包
fromsklearn.neighborsimportKernelDensity
#調(diào)用交叉估計(jì)驗(yàn)證計(jì)算包
fromsklearn.model_selectionimportGridSearchCV,LeaveOneOutdefget_kde_policy(sales_qty,rep_time,target_csl,sample_size=1000):
"""
Args:
sales_qty:銷(xiāo)量數(shù)據(jù)
rep_time:補(bǔ)貨周期
target_csl:期望的周期服務(wù)水平
sample_size:樣本量
Return:
best_bandwidth:最優(yōu)帶寬
oul:目標(biāo)庫(kù)存水平
ss:安全庫(kù)存量
"""10.3需求預(yù)測(cè)代碼續(xù):
sales_qty=np.array(sales_qty).reshape(-1,1)
bandwidth_choices={'bandwidth':np.linspace(1,100,20)}
grid=GridSearchCV(KernelDensity(kernel='gaussian'),bandwidth_choices,
cv=LeaveOneOut())
grid.fit(sales_qty)
best_bandwidth=grid.best_estimator_.bandwidth
kde=grid.best_estimator_
#根據(jù)分布,構(gòu)造補(bǔ)貨周期內(nèi)需求樣本
rep_time_sample=[sum(kde.sample(rep_time))for_inrange(sample_size)]
oul=np.quantile(rep_time_sample,target_csl)
ss=oul-np.mean(rep_time_sample)
returnbest_bandwidth,oul,ssbest_bandwidth,kde_oul,kde_ss=get_kde_policy(sku_sales_qty,
rep_time_dict[sku],
0.9)
print('使用留一驗(yàn)證法得到的最優(yōu)帶寬為:%.2f'
%best_bandwidth)
print('使用核函數(shù)估計(jì)法計(jì)算得到的目標(biāo)庫(kù)存水平為:%.2f'
%kde_oul)
print('使用核函數(shù)估計(jì)法計(jì)算得到的安全庫(kù)存量為:%.2f'
%kde_ss)使用留一驗(yàn)證法得到的最優(yōu)帶寬為:16.63,使用核函數(shù)估計(jì)法計(jì)算得到的目標(biāo)庫(kù)存水平為:479.97使用核函數(shù)估計(jì)法計(jì)算得到的安全庫(kù)存量為:263.7810.3需求預(yù)測(cè)需求估計(jì)方法的應(yīng)用:對(duì)所有產(chǎn)品應(yīng)用上述三種方法,計(jì)算對(duì)應(yīng)庫(kù)存策略指標(biāo):normal_parasnormal_oulnormal_ss\
SKU001(26.15573770491803,61.416345943453486)439.248432229.770615
SKU002(93.47540983606558,224.0771315211208)741.841441489.715204
SKU003(6.459016393442623,1.40926408526803)83.9131246.390042
SKU004(6.385245901639344,1.250879830106973)62.2764064.578243
SKU005(33.15573770491803,73.1685703030577)582.850969286.346227
……lognormal_ssempirical_oulempirical_sskde_best_bandwidthkde_oul\
SKU00187.922101497.1287.12416.631579473.860751
SKU002182.165317790.4515.25868.736842827.300485
SKU0036.10781284.06.7151.085.415584
SKU0044.82723963.05.3491.063.263129
SKU005163.700998619.7323.32811.421053600.33853
kde_ss
SKU001262.680957
SKU002545.529678
SKU0037.930236
SKU0045.912068
SKU005303.8689710.3需求預(yù)測(cè)觀察不同策略下不同產(chǎn)品的安全庫(kù)存量和目標(biāo)庫(kù)存水平這要求我們對(duì)不同產(chǎn)品采取基于產(chǎn)品自身特點(diǎn)的差異化策略
基于模擬庫(kù)存水平變化,仿真計(jì)算相應(yīng)庫(kù)存成本參數(shù)與非參數(shù)方法與指標(biāo)高低沒(méi)有絕對(duì)的關(guān)系不同產(chǎn)品的最適合方法不固定這點(diǎn)將在庫(kù)存仿真流程中體現(xiàn)基于庫(kù)存策略量模擬庫(kù)存水平變化基于對(duì)需求的擬合,計(jì)算相應(yīng)目標(biāo)庫(kù)存水平下的庫(kù)存策略量10.4仿真流程輸入產(chǎn)品未來(lái)一段時(shí)間內(nèi)的需求樣本,目標(biāo)庫(kù)存水平,盤(pán)貨周期和提前期令第一期的庫(kù)存水平為目標(biāo)庫(kù)存水平,在途庫(kù)存為0對(duì)之后每一期:計(jì)算庫(kù)存成本期初更新現(xiàn)貨庫(kù)存在途庫(kù)存到貨更新庫(kù)存水平(若缺貨,則缺貨候補(bǔ)量表示為負(fù))根據(jù)是否在盤(pán)貨周期,判斷是否補(bǔ)貨至目標(biāo)庫(kù)存水平庫(kù)存成本=總持貨成本+總?cè)必洺杀?0.4仿真流程對(duì)于’SKU003’,設(shè)定目標(biāo)庫(kù)存水平為80,進(jìn)行仿真:給定策略下產(chǎn)品每日現(xiàn)貨庫(kù)存水平和需求隨時(shí)間變化曲線sku=
'SKU003'
sku_sales_qty=test_df[test_df['sku_id']==sku]['sale'].values.tolist()
sku_onhand_list=inv_simulation(sku_sales_qty,80,cycle_time_dict[sku],
lead_time_dict[sku])
plt.plot(sku_sales_qty,marker='.',label='需求')
plt.plot(sku_onhand_list,marker='.',label='庫(kù)存水平')
plt.xlabel('時(shí)間')
plt.ylabel('數(shù)量')
plt.legend()
plt.show()10.4仿真流程依據(jù)現(xiàn)貨庫(kù)存水平計(jì)算該產(chǎn)品的總庫(kù)存成本:SKU003在目標(biāo)庫(kù)存水平為80.00的情況下,庫(kù)存總成本為:1615.26defcal_inv_cost(onhand_list,hc,pc):
"""
Args:
onhand_list:歷史現(xiàn)貨庫(kù)存水平
hc:單箱持貨成本
pc:單箱缺貨成本
Return:
total_cost:庫(kù)存成本
"""
holding_cost=hc*sum([max(0,onhand)foronhandinonhand_list])
backorder_cost=pc*(-1)*sum([min(0,onhand)foronhandinonhand_list])
total_cost=holding_cost+backorder_cost
returntotal_costsku_inv_cost=cal_inv_cost(sku_onhand_list,hc_dict[sku],pc_dict[sku])
print('%s在目標(biāo)庫(kù)存水平為%.2f的情況下,庫(kù)存總成本為:%.2f'
%(sku,80,sku_inv_cost))10.5比較多種方法下的庫(kù)存成本接下來(lái)我們要找到最優(yōu)的擬合方法:
尋找最優(yōu)擬合方式的流程:method_list=['normal','gamma','poisson','lognormal','empirical','kde']以總庫(kù)存成本為評(píng)價(jià)指標(biāo)
10.5比較多種方法下的庫(kù)存成本采用上述流程得到的全部SKU最優(yōu)擬合方法:通過(guò)統(tǒng)計(jì)可以發(fā)現(xiàn):best_method_count=cost_df['best_method'].value_counts().to_dict()
formethodinmethod_list:
print('采用%s方法獲得最小庫(kù)存成本的產(chǎn)品占比%.2f'
%(method,best_method_count[method]/len(all_sku_list)))
采用normal方法獲得最小庫(kù)存成本的產(chǎn)品占比0.14
采用gamma方法獲得最小庫(kù)存成本的產(chǎn)品占比0.18
采用poisson方法獲得最小庫(kù)存成本的產(chǎn)品占比0.23
采用lognormal方法獲得最小庫(kù)存成本的產(chǎn)品占比0.18
采用empirical方法獲得最小庫(kù)存成本的產(chǎn)品占比0.20
采用kde方法獲得最小庫(kù)存成本的產(chǎn)品占比0.0710.6拓展拓展思考:在本案例中,我們分析的是周期盤(pán)點(diǎn)的目標(biāo)補(bǔ)貨策略,如何分析連續(xù)盤(pán)點(diǎn)的批量補(bǔ)貨策略?在本案例中計(jì)算庫(kù)存策略基于的是期望的周期服務(wù)水平,如果采用需求滿(mǎn)足率指標(biāo)該如何計(jì)算?如果同時(shí)考慮兩種指標(biāo)呢?現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)第11章周期服務(wù)水平優(yōu)化11.1報(bào)童模型一家滑雪場(chǎng)正在向生產(chǎn)廠家訂購(gòu)滑雪板:滑雪場(chǎng)需要在超儲(chǔ)與缺貨之間進(jìn)行權(quán)衡,來(lái)找到最優(yōu)的服務(wù)水平訂購(gòu)提前期為3個(gè)月每套滑雪板的訂購(gòu)成本是2000元每套售價(jià)是2800元未能賣(mài)出的,以每套1800元變賣(mài)處理需求量大致服從正態(tài)分布,且均值為1000個(gè),標(biāo)準(zhǔn)差為300個(gè)11.1報(bào)童模型超儲(chǔ)和缺貨所帶來(lái)的損失:這類(lèi)短期、單次補(bǔ)貨模型就是庫(kù)存管理中經(jīng)典的報(bào)童問(wèn)題
超儲(chǔ)成本:??=2000?1800=200元缺貨成本:每套的利潤(rùn)為2800?2000=800元。這即為由于庫(kù)存不足而丟失的每個(gè)訂單造成的缺貨成本,記為??針對(duì)生命周期很短,庫(kù)存只能持有一期的商品,就可以用報(bào)童模型來(lái)分析其補(bǔ)貨問(wèn)題,例如報(bào)紙的訂貨問(wèn)題以及機(jī)票超售的問(wèn)題報(bào)童模型也適用于補(bǔ)貨提前期較長(zhǎng)的季節(jié)性商品的補(bǔ)貨問(wèn)題,例如中秋節(jié)期間月餅的備貨問(wèn)題11.1報(bào)童模型
??≤??,表示需求量小于等于訂貨量,超儲(chǔ)量為?????,因此將產(chǎn)生??(?????)的超儲(chǔ)成本??>??,表示需求量大于訂貨量,缺貨量為?????,因此將產(chǎn)生 ??(?????)的缺貨成本11.1報(bào)童模型
11.1報(bào)童模型邊際分析:若增加1個(gè)單位的訂貨量:以??????的概率,原先的訂貨量??將無(wú)法售罄,因此增加1個(gè)單位的訂貨量將增加1個(gè)單位的超儲(chǔ)量,因此超儲(chǔ)成本增加??以1???????的概率,原先的訂貨量??將無(wú)法滿(mǎn)足所有需求,增加1個(gè)單位的訂貨量后,缺貨數(shù)量可以減少1個(gè)單位,因此缺貨成本降低??因此,增加1個(gè)單位的訂貨量帶來(lái)的期望成本的邊際影響為:
11.1報(bào)童模型可以看到:若??????<??/(??+??),????(??)<0,增加訂貨量會(huì)使期望成本減小若??????>??/(??+??),????(??)>0,增加訂貨量會(huì)使期望成本增加
11.1報(bào)童模型
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平
長(zhǎng)期平均總成本:11.2
(??OP,??)策略的最優(yōu)服務(wù)水平僅對(duì)缺貨候補(bǔ)的系統(tǒng)成立對(duì)缺貨流失的系統(tǒng)[??,??+??]期間的實(shí)際需求會(huì)受到??時(shí)刻系統(tǒng)的凈庫(kù)存以及在途庫(kù)存的影響,因此狀態(tài)獨(dú)立的庫(kù)存策略將不再是最優(yōu)的
長(zhǎng)期平均總成本:11.2
(??OP,??)策略的最優(yōu)服務(wù)水平
缺貨候補(bǔ)系統(tǒng):11.2
(??OP,??)策略的最優(yōu)服務(wù)水平
情形一:?jiǎn)挝粫r(shí)間單位數(shù)量的缺貨成本
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平
情形一:?jiǎn)挝粫r(shí)間單位數(shù)量的缺貨成本
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平
情形二:?jiǎn)挝粩?shù)量的缺貨成本
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平缺貨流失的情形:在實(shí)際中,缺貨候補(bǔ)和缺貨流失都有可能發(fā)生。對(duì)于直接面向消費(fèi)者的零售企業(yè)來(lái)說(shuō),缺貨流失甚至比缺貨候補(bǔ)發(fā)生的可能性更大由于缺貨流失系統(tǒng)的復(fù)雜性,我們直接給出缺貨流失系統(tǒng)下最優(yōu)服務(wù)水平的近似計(jì)算公式:
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:某快消品公司上海區(qū)域倉(cāng)的一款洗發(fā)水的日需求服從均值為200(瓶),標(biāo)準(zhǔn)差為50的正態(tài)分布采銷(xiāo)人員的補(bǔ)貨策略是當(dāng)該洗發(fā)水的庫(kù)存水平降至1200瓶的時(shí)候向工廠補(bǔ)貨1000瓶,補(bǔ)貨的提前期為5天該洗發(fā)水的采購(gòu)成本為40元每瓶,售價(jià)為60元每瓶洗發(fā)水每天在倉(cāng)庫(kù)的結(jié)余庫(kù)存會(huì)產(chǎn)生一定的持貨成本。公司估計(jì)其持貨成本大約為采購(gòu)成本的40%每年當(dāng)需求超過(guò)倉(cāng)庫(kù)的可用庫(kù)存時(shí),將發(fā)生缺貨。假設(shè)缺貨可以候補(bǔ),即需求可以通過(guò)后續(xù)到達(dá)的庫(kù)存來(lái)滿(mǎn)足,但公司需要為顧客支付2元每件每天的延遲交貨補(bǔ)貼11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:在當(dāng)前的補(bǔ)貨策略下,洗發(fā)水的周期服務(wù)水平是多少?最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?如果公司只需要一次性像顧客支付每件3元的延遲交貨補(bǔ)貼,最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?如果需求超過(guò)倉(cāng)庫(kù)的可用庫(kù)存,發(fā)生缺貨時(shí),需求直接流失,考慮到缺貨除了造成當(dāng)前商品利潤(rùn)的損失外,可能還會(huì)對(duì)顧客未來(lái)的購(gòu)買(mǎi)意
愿造成不良影響,公司認(rèn)為單位缺貨成本為30元。此時(shí),最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:
最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:
如果公司只需要一次性像顧客支付每件3元的延遲交貨補(bǔ)貼,最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?可以看到,如果缺貨成本是一次性支付3元,則最優(yōu)的服務(wù)水平相比于 按缺貨周期支付的情形更低
11.2
(??OP,??)策略的最優(yōu)服務(wù)水平例:
如果需求超過(guò)倉(cāng)庫(kù)的可用庫(kù)存,發(fā)生缺貨時(shí),需求直接流失,考慮到缺貨除了造成當(dāng)前商品利潤(rùn)的損失外,可能還會(huì)對(duì)顧客未來(lái)的購(gòu)買(mǎi)意愿造成不良影響,公司認(rèn)為單位缺貨成本為30元。此時(shí),最優(yōu)的周期服務(wù)水平和相應(yīng)的再補(bǔ)貨點(diǎn)是多少?可以看到,如果缺貨直接流失,則需要保證更高的服務(wù)水平
11.3
(OUL,T)策略的最優(yōu)服務(wù)水平
最小化系統(tǒng)的長(zhǎng)期平均成本等價(jià)于最小化系統(tǒng)在一個(gè)周期的平均成本(??????,??)系統(tǒng)將一直重復(fù)這樣的長(zhǎng)度為??的周期11.3
(OUL,T)策略的最優(yōu)服務(wù)水平
情形一:?jiǎn)挝粫r(shí)間單位數(shù)量的缺貨成本11.3
(OUL,T)策略的最優(yōu)服務(wù)水平
情形二:?jiǎn)挝粩?shù)量的缺貨成本11.3
(OUL,T)策略的最優(yōu)服務(wù)水平
缺貨流失的情形:11.3
(OUL,T)策略的最優(yōu)服務(wù)水平某家電賣(mài)場(chǎng)一款電飯煲的日需求服從均值為10臺(tái),標(biāo)準(zhǔn)差為5臺(tái)的正態(tài)分布采銷(xiāo)人員每周二進(jìn)行補(bǔ)貨,每次補(bǔ)貨都將庫(kù)存水平補(bǔ)至150臺(tái),補(bǔ)貨提前期為1周該電飯煲的采購(gòu)成本為280元每臺(tái),售價(jià)為380元賣(mài)場(chǎng)估計(jì)其持貨成本大約為采購(gòu)成本的50%假設(shè)缺貨可以候補(bǔ),但每延遲一天賣(mài)場(chǎng)需要給顧客提供1%的折扣作為補(bǔ)貼。目前的目標(biāo)庫(kù)存水平是否可以最小化庫(kù)存系統(tǒng)長(zhǎng)期平均成本?例:11.3
(OUL,T)策略的最優(yōu)服務(wù)水平
例:
11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
在實(shí)際中,需求的分布往往需要不斷地更新,需求還可能具有一定的周期性和趨勢(shì)性,并且?guī)齑娴挠?jì)劃期可考慮有限的展望期一種管理方法是將(ROP,Q)策略或者(OUL,T)策略的參數(shù)計(jì)算和優(yōu)化進(jìn)行動(dòng)態(tài)更新如滾動(dòng)時(shí)間窗法,每期基于未來(lái)一段時(shí)間的需求(分布)預(yù)測(cè),動(dòng)態(tài)地計(jì)算相應(yīng)的安全庫(kù)存量與策略參數(shù),從而決定相應(yīng)的補(bǔ)貨量在這種情況下:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化以最小化一定展望期內(nèi)的總庫(kù)存成本為目標(biāo)一般計(jì)算成本較高于上述方法優(yōu)勢(shì)在于可以往后展望更多的周期,適用于需求分布非平穩(wěn)的情形,同時(shí)也可以考慮周期服務(wù)水平與需求滿(mǎn)足率約束下的策略?xún)?yōu)化樣本均值近似(sampleaverageapproximation,SAA)相較于較難評(píng)估的真實(shí)期望成本,SAA根據(jù)由樣本得到的成本的經(jīng)驗(yàn) 分布進(jìn)行優(yōu)化SAA是解決隨機(jī)離散優(yōu)化問(wèn)題常用的非參數(shù)方法之一11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
基礎(chǔ)模型:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
基礎(chǔ)模型:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
基礎(chǔ)模型:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
基礎(chǔ)模型:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
基礎(chǔ)模型:11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化通過(guò)使用樣本均值近似目標(biāo)函數(shù),我們可以將原問(wèn)題轉(zhuǎn)化為下述SAA問(wèn)題:基礎(chǔ)模型:
11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化
例:importnumpyasnp
fromcoptpyimport*#提前期
L=
2
#盤(pán)貨周期(T=1表示每天都能訂貨)
T=
3
#展望期
J=
50
#樣本數(shù)
N=
100
#成本
c=
10
h=c*
0.01
p=c*
0.01
#用于生成變量的index
time_index=[tfortinrange(J)]
cycle_index=np.arange(1,J,T)
non_cycle_index=[tfortintime_indexiftnot
incycle_index]
sample_path_index=[iforiinrange(N)]#生成需求樣本
dist=stats.norm(50,10)
demand_sample={(t,i):max(dist.rvs(),0)fortintime_index
foriinsample_path_index}11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化例:使用COPT進(jìn)行建模:第二步,我們向模型中添加變量#生成COPT的環(huán)境
env=Envr()
#建立空的模型
m=env.createModel('basestock')CardinalOptimizerv5.0.1.BuilddateJun202022
CopyrightCardinalOperations2022.AllRightsReserved#目標(biāo)庫(kù)存水平
OUL=m.addVar(vtype=COPT.CONTINUOUS,name='OUL')
#現(xiàn)貨庫(kù)存
O=m.addVars(time_index,sample_path_index,vtype=COPT.CONTINUOUS,lb=0)
#延期交貨庫(kù)存
B=m.addVars(time_index,sample_path_index,vtype=COPT.CONTINUOUS,lb=0)
#訂貨量
Q=m.addVars(cycle_index,sample_path_index,vtype=COPT.CONTINUOUS,lb=0)11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化例:
#目標(biāo)函數(shù)
holding_cost=quicksum(O[t,i]fortintime_indexforiinsample_path_index)*h
penalty_cost=quicksum(B[t,i]fortintime_indexforiinsample_path_index)*p
m.setObjective((1
/(N*J))*(holding_cost+penalty_cost),COPT.MINIMIZE)11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化例:m.addConstrs((O[t,i]-B[t,i]==O[t-
1,i]-B[t-
1,i]
+(Q[t-L,i]ift-Lincycle_indexelse
0)
-demand_sample[t,i]
fortintime_index[1:]foriinsample_path_index))<coptcore.tupledictat0x1441cac40>#訂貨
m.addConstrs((Q[t,i]==sum([demand_sample[j,i]
forjinrange(max(1,t-T+
1),t+
1)])
fortincycle_indexforiinsample_path_index))<coptcore.tupledictat0x1442941c0>m.addConstrs((O[0,i]-B[0,i]==OULforiinsample_path_index))<coptcore.tupledictat0x1442b6910>11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化例:第五步,我們?cè)O(shè)定求解參數(shù)并求解模型,并將求解結(jié)果讀取出來(lái)最優(yōu)目標(biāo)庫(kù)存水平:144.1811.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化例:
11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化雙服務(wù)水平約束下的目標(biāo)庫(kù)存水平:
11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化雙服務(wù)水平約束下的目標(biāo)庫(kù)存水平:
11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化示例續(xù):接下來(lái),我們向原模型中添加約束,求解最差周期服務(wù)水平和滿(mǎn)足率均為0.95情況下的目標(biāo)庫(kù)存水平:M=
10000
worst_csl=
0.95
worst_fr=
0.95
Z=m.addVars(time_index,sample_path_index,vtype=COPT.BINARY)11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化示例續(xù):增加周期服務(wù)水平約束:
m.addConstrs((O[t,i]-B[t,i]>=
-M*Z[t,i]
fortintime_indexforiinsample_path_index))
m.addConstr((quicksum(Z[t,i]fortintime_indexforiinsample_path_index)
<=(1
-worst_csl)*N*J))11.4基于SAA的有限周期庫(kù)存系統(tǒng)優(yōu)化示例續(xù):
m.addConstr((1
-(quicksum(
B[t,i]fortintime_indexforiinsample_path_index)/sum(
demand_sample.values()))>=worst_fr))m.setParam(COPT.Param.TimeLimit,1200)
m.setParam(COPT.Param.HeurLevel,3)
m.setParam(COPT.Param.RelGap,0.001)
m.solve()求解帶雙服務(wù)水平約束的模型:最優(yōu)目標(biāo)庫(kù)存水平:219.84
樣本周期服務(wù)水平:0.95
樣本滿(mǎn)足率:0.99現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)第12章庫(kù)存共享12.1庫(kù)存共享效應(yīng)
12.1庫(kù)存共享效應(yīng)
12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算
12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算
名稱(chēng)共享節(jié)點(diǎn)的提前期需求分布正態(tài)分布泊松分布伽馬分布12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算
12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算首先生成出兩個(gè)分散節(jié)點(diǎn)的需求樣本,并計(jì)算共享節(jié)點(diǎn)的提前期需求樣本:#期望的周期服務(wù)水平
tau=
0.95
#提前期
lead_time=
7
#樣本量
sample_size=
20000
#定義兩個(gè)節(jié)點(diǎn)的需求分布
halfnorm_dist=stats.halfnorm(loc=5,scale=3)
gamma_dist=stats.gamma(a=2)
#生成指定樣本量的兩個(gè)節(jié)點(diǎn)的提前期需求樣本
halfnorm_leadtime_samples=[sum(halfnorm_dist.rvs(size=lead_time))
for_inrange(sample_size)]
gamma_leadtime_samples=[sum(gamma_dist.rvs(size=lead_time))
for_inrange(sample_size)]
#計(jì)算共享節(jié)點(diǎn)的提前期需求樣本
central_leadtime_samples=[
halfnorm_leadtime_samples[i]+gamma_leadtime_samples[i]
foriinrange(sample_size)]12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算計(jì)算分散化管理和集中化管理模式下的安全庫(kù)存量以及庫(kù)存共享效應(yīng)分散化管理模式下的安全庫(kù)存總量為:15.03;集中化管理模式下的安全庫(kù)存總量為:10.46在周期服務(wù)水平為0.95
時(shí),庫(kù)存共享效應(yīng)為:1.44#分散化管理模式
oul_decentralized=np.quantile(halfnorm_leadtime_samples,tau)+
\
np.quantile(gamma_leadtime_samples,tau)
ss_decentralized=oul_decentralized-np.mean(halfnorm_leadtime_samples)\
-np.mean(gamma_leadtime_samples)
print('分散化管理模式下的安全庫(kù)存總量為:%.2f'
%ss_decentralized)
#集中化管理模式
oul_centralized=np.quantile(central_leadtime_samples,tau)
ss_centralized=oul_centralized-np.mean(central_leadtime_samples)
print('集中化管理模式下的安全庫(kù)存總量為:%.2f'
%ss_centralized)
#庫(kù)存共享效應(yīng)
pooling_effect=ss_decentralized/ss_centralized
print('在周期服務(wù)水平為%.2f時(shí),庫(kù)存共享效應(yīng)為:%.2f'
%(tau,pooling_effect))12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算在正態(tài)分布下,庫(kù)存共享效應(yīng)與周期服務(wù)水平無(wú)關(guān)。但在一般分布下,周期服務(wù)水平不同,庫(kù)存共享效應(yīng)也會(huì)有所不同??紤]在不同周期服務(wù)水平下,上述例子中的庫(kù)存共享效應(yīng):12.2
分散節(jié)點(diǎn)間需求獨(dú)立情況下集中化安全庫(kù)存計(jì)算
12.3分散節(jié)點(diǎn)間需求相關(guān)情況下的聯(lián)合分布樣本生成
12.3分散節(jié)點(diǎn)間需求相關(guān)情況下的聯(lián)合分布樣本生成不具有顯示的聯(lián)合分布函數(shù)刻畫(huà)一個(gè)聯(lián)合分布需要擬合邊際分布和刻畫(huà)邊際分布之間的相關(guān)關(guān)系,步驟如下:擬合出每個(gè)分散節(jié)點(diǎn)需求的邊際分布選擇合適的Copula函數(shù)并估計(jì)節(jié)點(diǎn)間需求的相關(guān)關(guān)系,生成關(guān)聯(lián)性樣本利用基于樣本的方法優(yōu)化網(wǎng)絡(luò)的庫(kù)存共享策略例:兩個(gè)分散節(jié)點(diǎn)的網(wǎng)絡(luò)中,考慮邊際分布為正態(tài)分布,定義協(xié)方差矩陣,繪制聯(lián)合分布樣本點(diǎn)的分布圖#樣本量
sample_size=
1000
#相關(guān)系數(shù)
rho=
0.85
#協(xié)方差矩陣
cov_matrix=[[1,rho],[rho,1]]
#帶有相關(guān)性的二維正態(tài)分布
multi_corr_norm_dist=stats.multivariate_normal(mean=[0,0],cov=cov_matrix)
#生成帶有相關(guān)性的二維正態(tài)分布的隨機(jī)樣本
multi_corr_norm_samples=multi_corr_norm_dist.rvs(sample_size)
#生成沒(méi)有相關(guān)性的二維正態(tài)分布的隨機(jī)樣本
multi_nc_norm_samples=stats.multivariate_normal(mean=[0,0]).rvs(sample_size)12.3分散節(jié)點(diǎn)間需求相關(guān)情況下的聯(lián)合分布樣本生成沒(méi)有相關(guān)性的聯(lián)合分布樣本點(diǎn)的分布圖具有正相關(guān)性的聯(lián)合分布樣本點(diǎn)的分布圖結(jié)論:分布之間是否獨(dú)立將會(huì)導(dǎo)致生成的聯(lián)合分布樣本分布不同分布的相關(guān)性越強(qiáng),橢圓的形狀會(huì)越扁,正相關(guān)時(shí)需求樣本右偏,負(fù)相關(guān)時(shí)左偏12.3.1使用概率積分變換和分位數(shù)變換生成帶有相關(guān)性的樣本概率積分變換:
#使用標(biāo)準(zhǔn)正態(tài)分布的累計(jì)分布函數(shù)對(duì)每一維進(jìn)行概率積分變換
uni_samples=stats.norm.cdf(multi_corr_norm_samples)
uni_plot=sns.jointplot(x=uni_samples[:,0],
y=uni_samples[:,1],
color='#1c79d9')
uni_plot.plot_joint(sns.kdeplot,color='black',levels=5)
plt.show()12.3.1使用概率積分變換和分位數(shù)變換生成帶有相關(guān)性的樣本具有正相關(guān)性的樣本經(jīng)概率積分變換后的分布函數(shù)圖及KDE圖可以看出,每一維邊際分布都被轉(zhuǎn)化成了均勻分布,而新生成的樣本依然保留了一定的正相關(guān)性12.3.1使用概率積分變換和分位數(shù)變換生成帶有相關(guān)性的樣本分位數(shù)變換:
#定義gamma分布
gamma_dist=stats.gamma(a=2,scale=5)
#定義beta分布
beta_dist=stats.beta(a=1,b=2)
#使用這兩個(gè)分布,對(duì)兩維均勻分布進(jìn)行分位數(shù)變換
joint_gamma_beta_samples=np.zeros((sample_size,2))
joint_gamma_beta_samples[:,0]=gamma_dist.ppf(uni_samples[:,0])
joint_gamma_beta_samples[:,1]=beta_dist.ppf(uni_samples[:,1])
joint_gamma_beta_plot=sns.jointplot(x=joint_gamma_beta_samples[:,0],
y=joint_gamma_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 園區(qū)文員試用期工作總結(jié)范文(8篇)
- 向廠長(zhǎng)提出調(diào)換工作崗位的申請(qǐng)書(shū)(5篇)
- 冬季藝術(shù)節(jié)開(kāi)幕詞范文(6篇)
- 水電站優(yōu)化調(diào)度-洞察分析
- 虛擬現(xiàn)實(shí)酒店預(yù)訂平臺(tái)市場(chǎng)競(jìng)爭(zhēng)力分析-洞察分析
- 危險(xiǎn)化學(xué)品安全監(jiān)控-洞察分析
- 育兒APP用戶(hù)體驗(yàn)優(yōu)化-洞察分析
- 員工叉車(chē)安全責(zé)任承諾書(shū)(7篇)
- 醫(yī)療隱私泄露預(yù)警-洞察分析
- 溫室物聯(lián)網(wǎng)技術(shù)-洞察分析
- GB 16847-1997保護(hù)用電流互感器暫態(tài)特性技術(shù)要求
- 裝飾裝修施工質(zhì)量檢查評(píng)分表
- 超圖軟件三維平臺(tái)技術(shù)參數(shù)v7c2015r
- 《思想道德與法治》 課件 第四章 明確價(jià)值要求 踐行價(jià)值準(zhǔn)則
- 幼兒園講座:課程游戲化、生活化建設(shè)的背景與目的課件
- 湖南省高等教育自學(xué)考試 畢業(yè)生登記表
- 地理信息系統(tǒng)(GIS)公開(kāi)課(課堂)課件
- 電氣照明設(shè)備相關(guān)知識(shí)課件
- 婦產(chǎn)科護(hù)理學(xué)理論知識(shí)考核題庫(kù)與答案
- 漢字文化精品課件
- GB∕T 36681-2018 展覽場(chǎng)館服務(wù)管理規(guī)范
評(píng)論
0/150
提交評(píng)論