版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)第13章某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)13背景介紹企業(yè)Y是一家休閑食品企業(yè),產(chǎn)品主要有常溫和生鮮兩類:產(chǎn)品供應(yīng)主要通過一個(gè)中央倉來完成,中央倉從工廠補(bǔ)貨,然后向全國各地的分銷商、零售商供貨休閑食品市場(chǎng)向新興低線城市的下沉,更多消費(fèi)者接觸到新零售、外賣、無人售賣等銷售渠道新品類、新市場(chǎng)、新渠道給公司的供應(yīng)鏈帶來履約成本與效率的挑戰(zhàn)企業(yè)的發(fā)展趨勢(shì)和轉(zhuǎn)型需求:建立了5個(gè)區(qū)域倉,對(duì)部分品類庫存進(jìn)行分倉管理決策哪些商品庫存進(jìn)行分倉管理,而哪些商品的庫存繼續(xù)留在中央倉中央倉管理的優(yōu)勢(shì)在于庫存共享,一定程度上降低安全庫存,進(jìn)而降低庫存成本分倉管理的優(yōu)勢(shì)在于工廠到各區(qū)域倉可以通過整車運(yùn)輸,且運(yùn)輸平均距離更近,降低運(yùn)輸成本,考慮到生鮮品需采用冷鏈運(yùn)輸,單位運(yùn)輸費(fèi)用明顯要高于常溫品13解決方法從常溫品和生鮮品中各挑選出一個(gè)具有一定代表性的SKU,提取這兩個(gè)SKU過去一年的銷量數(shù)據(jù)、價(jià)格以及運(yùn)輸費(fèi)率。通過數(shù)據(jù),探究如下兩個(gè)問題:中央倉管理與區(qū)域倉管理兩種模式下,這兩個(gè)SKU的安全庫存成本是多少?綜合考慮庫存成本和運(yùn)輸成本,這兩個(gè)SKU應(yīng)該分別選擇哪種方式管理庫存?13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算數(shù)據(jù)集概況:sales_df表:5個(gè)區(qū)域倉所覆蓋區(qū)域過去1年兩個(gè)SKU的銷量信息’node_id’:表示區(qū)域倉id’type’:表示產(chǎn)品類型’Normal’:表示常溫品’Cold’:生鮮品’date’:對(duì)應(yīng)日期’qty’:對(duì)應(yīng)日期的銷量數(shù)據(jù)’unit_id’:定義一個(gè)unit為一個(gè)區(qū)域倉與一個(gè)SKU的組合,便于對(duì)每個(gè)區(qū)域倉的每種商品進(jìn)行索引node_idtypedateqtyunit_id0RDC01Normal2020-07-1751.0RDC01_Normal1RDC01Normal2020-07-18444.0RDC01_Normal2RDC01Normal2020-07-19596.0RDC01_Normal3RDC01Normal2020-07-2065.0RDC01_Normal4RDC01Normal2020-07-210.0RDC01_Normal5RDC01Normal2020-07-220.0RDC01_Normal6RDC01Normal2020-07-23109.0RDC01_Normal7RDC01Normal2020-07-2453.0RDC01_Normal8RDC01Normal2020-07-25157.0RDC01_Normal9RDC01Normal2020-07-2653.0RDC01_Normal13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算數(shù)據(jù)集概況:transport_cost_df表:記錄了核算后的節(jié)點(diǎn)間運(yùn)輸費(fèi)率’predecessor’:上游節(jié)點(diǎn)’successor’:下游節(jié)點(diǎn)’normal_transport_unit_cost’:常溫品的單位運(yùn)輸費(fèi)率’cold_transport_unit_cost’:生鮮品的單位運(yùn)輸費(fèi)率predecessorsuccessornormal_transport_unit_costcold_transport_unit_cost0FactoryCDC2.03.01CDCRDC011.52.02CDCRDC021.02.03CDCRDC032.53.04CDCRDC043.54.05CDCRDC052.02.06FactoryRDC012.02.57FactoryRDC021.52.08FactoryRDC033.04.09FactoryRDC044.04.510FactoryRDC051.01.813.1分散式管理和集中式管理模式下安全庫存量的計(jì)算
常溫SKU和生鮮SKU的售價(jià)分別為35元和38元。由于生鮮SKU對(duì)倉儲(chǔ)設(shè)施和管理的要求都較高,存儲(chǔ)成本更高。因此,按照SKU售價(jià)的40%和60%的比例分別計(jì)算單位年持貨成本,再計(jì)算出每天的單位持貨成本normal_price=
35
cold_price=
38
normal_hc_rate=
0.04
cold_hc_rate=
0.06工廠在接到中央倉或者區(qū)域倉的訂單后,平均需要2天的備貨時(shí)間,將商品從工廠運(yùn)送到倉還需要1天的時(shí)間,因此倉庫補(bǔ)貨的提前期為3天。公司期望周期服務(wù)水平能夠達(dá)到90%lead_time=
3csl
=
0.913.1分散式管理和集中式管理模式下安全庫存量的計(jì)算使用參數(shù)化的方法擬合出各個(gè)unit的需求分布plt.figure(figsize=(18,12))
plt.subplots_adjust(hspace=0.5)
forn,unitinenumerate(sales_df['unit_id'].unique()):
ax=plt.subplot(5,2,n+
1)
hist_sales=sales_df[sales_df['unit_id']==unit]['qty'].values
sns.histplot(hist_sales,ax=ax,color='#1c79d9')
ax.set_title(unit)
ax.set_ylabel('計(jì)數(shù)')
plt.show()13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算使用參數(shù)化的方法擬合出各個(gè)unit的需求分布13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算由于不同unit的分布特征有所不同,很難直接選定某一特定分布族進(jìn)行參數(shù)擬合使用Python的fitter工具包,給定一些可能的分布列表,找到擬合效果最好的分布及其參數(shù)以u(píng)nit’RDC01_Normal’(RDC01的常溫SKU)為例,演示如何使用fitter工具包#導(dǎo)入fitter工具包
fromfitterimportFitter
#定義可能的分布列表
dist_list=['norm','halfnorm','lognorm','gamma','beta','chi2','uniform']#篩選出'FDC01_Normal'的銷量數(shù)據(jù)
unit_sales=sales_df[sales_df['unit_id']==
'RDC01_Normal']['qty'].values
#使用Fitter進(jìn)行擬合
fitter=Fitter(unit_sales,distributions=dist_list)
fitter.fit()#展示擬合信息
fitted_table=fitter.summary()
print(fitted_table)13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算在使用均方誤差評(píng)判擬合效果好壞時(shí):擬合unit’RDC1_Normal’效果最好的分布是貝塔分布,提取對(duì)應(yīng)參數(shù)
sumsquare_erroraicbickl_div
beta0.0001083863.479360-5464.736465inf
chi20.0001982071.601353-5247.542500inf
halfnorm0.0002614164.396355-5153.896332inf
lognorm0.0002611887.101432-5147.460082inf
norm0.0003344996.289130-5063.637313infunit_dist_para=fitter.get_best()
print(unit_dist_para){'beta':{'a':0.8351544197633447,'b':109.07329659678845,'loc':-1.1991932626111443e-20,'scale':6801.05324498265}}13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算利用上述方法,為所有unit找到擬合效果最好的分布及其參數(shù)擬合RDC01_Normal效果最好的是beta分布
擬合RDC01_Cold效果最好的是halfnorm分布
擬合RDC02_Normal效果最好的是beta分布
擬合RDC02_Cold效果最好的是beta分布
擬合RDC03_Normal效果最好的是gamma分布
擬合RDC03_Cold效果最好的是gamma分布
擬合RDC04_Normal效果最好的是beta分布
擬合RDC04_Cold效果最好的是chi2分布
擬合RDC05_Normal效果最好的是chi2分布
擬合RDC05_Cold效果最好的是beta分布13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算定義函數(shù)cal_ss_decentralized來計(jì)算指定周期服務(wù)水平下區(qū)域倉管理模式的安全庫存量defcal_ss_decentralized(dist_dict,tau,sample_size):
"""
Args:
dist_dict:各節(jié)點(diǎn)的需求分布(scipy.stats)
tau:期望的周期服務(wù)水平
sample_size:樣本量
Return:
unit_leadtime_mean_dict:各區(qū)域倉的提前期需求均值
unit_ss_decentralized_dict:區(qū)域倉管理模式下各區(qū)域倉的安全庫存量
"""
#根據(jù)分布,生成每個(gè)unit提前期需求樣本
unit_leadtime_samples_dict={unit:[sum(dist.rvs(lead_time))
for_inrange(sample_size)]
forunit,distindist_dict.items()}
#計(jì)算指定周期服務(wù)水平下的分位數(shù),作為目標(biāo)庫存水平
unit_oul_dict={unit:np.quantile(dist_leadtime_samples,tau)
forunit,dist_leadtime_samples
inunit_leadtime_samples_dict.items()}
#計(jì)算提前期需求均值
unit_leadtime_mean_dict={unit:np.mean(dist_leadtime_samples)
forunit,dist_leadtime_samples
inunit_leadtime_samples_dict.items()}
#根據(jù)安全庫存等于目標(biāo)庫存水平-需求均值,計(jì)算每個(gè)unit的安全庫存量
unit_ss_decentralized_dict={unit:unit_oul_dict[unit]-
unit_leadtime_mean_dict[unit]
forunitindist_dict.keys()}
returnunit_leadtime_mean_dict,unit_ss_decentralized_dict13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算調(diào)用cal_ss_decentralized計(jì)算周期服務(wù)水平為0.9時(shí),區(qū)域倉管理模式下每個(gè)unit的安全庫存量unit_leadtime_mean_dict,unit_ss_decentralized_dict=cal_ss_decentralized(
unit_dist_dict,csl,10000)
#提前期需求均值將在下一節(jié)計(jì)算成本中用到
unit_leadtime_mean_df=pd.DataFrame.from_dict(
unit_leadtime_mean_dict,orient='index',columns=['leadtime_mean']).\
reset_index().rename(columns={'index':'unit_id'})
#安全庫存量
unit_ss_decentralized_df=pd.DataFrame.from_dict(
unit_ss_decentralized_dict,orient='index',columns=['ss_decentralized']).\
reset_index().rename(columns={'index':'unit_id'})
#合并出每個(gè)unit的信息表
unit_df=sales_df[['unit_id','node_id','type']].drop_duplicates()
unit_df=unit_df.merge(unit_leadtime_mean_df,on='unit_id',how='left')
unit_df=unit_df.merge(unit_ss_decentralized_df,on='unit_id',how='left')
print(unit_df)13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算進(jìn)而計(jì)算出每個(gè)SKU在區(qū)域倉管理模式下的安全庫存總量normal_ss_decentralized=unit_df[unit_df['type']==
'Normal'][
'ss_decentralized'].sum()
print('使用分散式管理常溫品所需安全庫存總量為:%.2f'
%normal_ss_decentralized)
cold_ss_decentralized=unit_df[unit_df['type']==
'Cold'][
'ss_decentralized'].sum()
print('使用分散式管理生鮮品所需安全庫存總量為:%.2f'
%cold_ss_decentralized)unit_idnode_idtypeleadtime_meanss_decentralized
0RDC01_NormalRDC01Normal154.254592132.144293
1RDC01_ColdRDC01Cold423.709284247.108366
2RDC02_NormalRDC02Normal127.225049154.668676
3RDC02_ColdRDC02Cold283.250822384.830874
4RDC03_NormalRDC03Normal49.43504074.808101
5RDC03_ColdRDC03Cold101.640800125.808299
6RDC04_NormalRDC04Normal57.04805161.059525
7RDC04_ColdRDC04Cold31.34104047.671219
8RDC05_NormalRDC05Normal36.77284459.176580
9RDC05_ColdRDC05Cold111.499564119.772253使用分散式管理常溫品所需安全庫存總量為:481.86,使用分散式管理生鮮品所需安全庫存總量為:925.1913.1分散式管理和集中式管理模式下安全庫存量的計(jì)算計(jì)算中央倉管理模式下兩個(gè)SKU的安全庫存量。假設(shè)各區(qū)域的需求相互獨(dú)立,通過得到的各區(qū)域倉的需求分布函數(shù)生成更多的需求樣本,求和得到中央倉的需求樣本,計(jì)算出中央倉所需安全庫存量defcal_ss_centralized(dist_dict,tau,sample_size):
"""
Args:
dist_dict:各節(jié)點(diǎn)的需求分布(scipy.stats)
tau:期望的周期服務(wù)水平
sample_size:樣本量
Return:
ss_centralized:各節(jié)點(diǎn)中央倉管理模式下的安全庫存總量
"""
#根據(jù)分布,生成每個(gè)unit提前期需求樣本
unit_leadtime_samples_dict={unit:[sum(dist.rvs(lead_time))
for_inrange(sample_size)]
forunit,distindist_dict.items()}
centralized_leadtime_samples=[sum([unit_leadtime_samples_dict[unit][i]
forunitindist_dict.keys()])
foriinrange(sample_size)]
#計(jì)算中央倉管理模式下的安全庫存總量
ss_centralized=np.quantile(centralized_leadtime_samples,tau)\
-np.mean(centralized_leadtime_samples)
returnss_centralized13.1分散式管理和集中式管理模式下安全庫存量的計(jì)算調(diào)用cal_ss_centralized來計(jì)算周期服務(wù)水平為0.9時(shí)的中央倉管理模式下兩個(gè)SKU的安全庫存量node_list=unit_df['node_id'].unique()
normal_unit_dist_dict={node+
'_'
+
'Normal':unit_dist_dict[
node+
'_'
+
'Normal']fornodeinnode_list}
normal_ss_centralized=cal_ss_centralized(normal_unit_dist_dict,csl,10000)
print('使用中央倉管理常溫品所需安全庫存總量為:%.2f'
%normal_ss_centralized)
cold_unit_dist_dict={node+
'_'
+
'Cold':unit_dist_dict[
node+
'_'
+
'Cold']fornodeinnode_list}
cold_ss_centralized=cal_ss_centralized(cold_unit_dist_dict,csl,10000)
print('使用中央倉管理生鮮品所需安全庫存總量為:%.2f'
%cold_ss_centralized)使用中央倉管理常溫品所需安全庫存總量為:234.52,使用中央倉管理生鮮品所需安全庫存總量為:473.54使用分散式管理常溫品所需安全庫存總量為:481.86,使用分散式管理生鮮品所需安全庫存總量為:925.19使用中央倉管理模式都能夠降低安全庫存量,從而降低總庫存成本13.2綜合庫存成本與運(yùn)輸成本,決策存貨布局庫存成本的變化量:安全庫存的變化量*單位持貨成本平均運(yùn)輸成本:提前期需求的均值*對(duì)應(yīng)的運(yùn)輸費(fèi)率#工廠發(fā)往CDC的單位運(yùn)輸費(fèi)率
factory_to_cdc_cost=transport_cost_df[
(transport_cost_df['predecessor']==
'Factory')
&(transport_cost_df['successor']==
'CDC')][
['normal_transport_unit_cost','cold_transport_unit_cost']].values
#常溫品使用區(qū)域倉管理模式,即由工廠發(fā)往區(qū)域倉的單位運(yùn)輸費(fèi)率
normal_before_cost_df=transport_cost_df[
(transport_cost_df['predecessor']==
'Factory')
&(transport_cost_df['successor'].isin(node_list))][
['successor','normal_transport_unit_cost']]
normal_before_cost_df.columns=['node_id','before_trans_cost']
#常溫品使用中央倉管理模式,單位運(yùn)輸費(fèi)率為從工廠發(fā)往CDC與從CDC發(fā)往各區(qū)域顧客的運(yùn)輸費(fèi)率之和
normal_after_cost_df=transport_cost_df[
(transport_cost_df['predecessor']==
'CDC')
&(transport_cost_df['successor'].isin(node_list))][
['successor','normal_transport_unit_cost']]
normal_after_cost_df.columns=['node_id','after_trans_cost']
normal_after_cost_df['after_trans_cost']=
\
normal_after_cost_df['after_trans_cost']+factory_to_cdc_cost[0][0]13.2綜合庫存成本與運(yùn)輸成本,決策存貨布局#生鮮品使用區(qū)域倉管理模式的單位運(yùn)輸費(fèi)率
cold_before_cost_df=transport_cost_df[
(transport_cost_df['predecessor']==
'Factory')
&(transport_cost_df['successor'].isin(node_list))][
['successor','cold_transport_unit_cost']]
cold_before_cost_df.columns=['node_id','before_trans_cost']
#生鮮品使用中央倉管理模式的單位運(yùn)輸費(fèi)率
cold_after_cost_df=transport_cost_df[
(transport_cost_df['predecessor']==
'CDC')
&(transport_cost_df['successor'].isin(node_list))][
['successor','cold_transport_unit_cost']]
cold_after_cost_df.columns=['node_id','after_trans_cost']
cold_after_cost_df['after_trans_cost']=
\
normal_after_cost_df['after_trans_cost']+factory_to_cdc_cost[0][1]normal_unit_df=unit_df[unit_df['type']==
'Normal']
normal_unit_df=normal_unit_df.merge(normal_before_cost_df,
on='node_id',how='left')
normal_unit_df=normal_unit_df.merge(normal_after_cost_df,
on='node_id',how='left')
normal_decrease_hc=normal_price*normal_hc_rate\
*(normal_ss_decentralized-normal_ss_centralized)
13.2綜合庫存成本與運(yùn)輸成本,決策存貨布局print('對(duì)于常溫商品,使用集中式管理模式能夠降低平均庫存成本:%.2f'
%normal_decrease_hc)
normal_increase_trans=((normal_unit_df['leadtime_mean']
*normal_unit_df['after_trans_cost']).sum()
-(normal_unit_df['leadtime_mean']
*normal_unit_df['before_trans_cost']).sum())\
/lead_time
print('對(duì)于常溫品,使用中央倉管理模式會(huì)增加平均運(yùn)輸成本:%.2f'
%normal_increase_trans)
normal_avg_cost_change=normal_increase_trans-normal_decrease_hc
print('對(duì)于常溫品,使用中央倉管理模式會(huì)改變總平均成本:%.2f'
%normal_avg_cost_change)對(duì)于常溫商品,使用集中式管理模式能夠降低平均庫存成本:346.28
對(duì)于常溫品,使用中央倉管理模式會(huì)增加平均運(yùn)輸成本:230.75
對(duì)于常溫品,使用中央倉管理模式會(huì)改變總平均成本:-115.5213.2綜合庫存成本與運(yùn)輸成本,決策存貨布局cold_unit_df=unit_df[unit_df['type']==
'Cold']
cold_unit_df=cold_unit_df.merge(cold_before_cost_df,
on='node_id',how='left')
cold_unit_df=cold_unit_df.merge(cold_after_cost_df,
on='node_id',how='left')
cold_decrease_hc=cold_price*cold_hc_rate\
*(cold_ss_decentralized-cold_ss_centralized)
print('對(duì)于生鮮品,使用中央倉管理模式能夠降低平均庫存成本:%.2f'
%cold_decrease_hc)
cold_increase_trans=((cold_unit_df['leadtime_mean']
*cold_unit_df['after_trans_cost']).sum()
-(cold_unit_df['leadtime_mean']
*cold_unit_df['before_trans_cost']).sum())\
/lead_time
print('對(duì)于生鮮品,使用中央倉管理模式會(huì)增加平均運(yùn)輸成本:%.2f'
%cold_increase_trans)
cold_avg_cost_change=cold_increase_trans-cold_decrease_hc
print('對(duì)于生鮮品,使用中央倉管理模式會(huì)改變總平均成本:%.2f'
%cold_avg_cost_change)13.2綜合庫存成本與運(yùn)輸成本,決策存貨布局對(duì)于生鮮品:使用中央倉管理模式能夠降低平均庫存成本:1029.77使用中央倉管理模式會(huì)增加平均運(yùn)輸成本:1296.25使用中央倉管理模式會(huì)改變總平均成本:266.48對(duì)于常溫品:使用集中式管理模式能夠降低平均庫存成本:346.28
使用中央倉管理模式會(huì)增加平均運(yùn)輸成本:230.75
使用中央倉管理模式會(huì)改變總平均成本:-115.52結(jié)論:對(duì)于常溫SKU來說,繼續(xù)使用中央倉管理模式總成本更低對(duì)于生鮮SKU來說,采用區(qū)域倉管理模式的總成本更低,優(yōu)先考慮生鮮品前置分倉管理13.3拓展拓展思考:在案例中,我們通過區(qū)域倉的需求分布生成更多樣本,求和得到中央倉的需求樣本,從而計(jì)算中央倉的安全庫存量。另外一種方式是首先將各區(qū)域的需求數(shù)據(jù)進(jìn)行聚合,然后擬合出中央倉的需求分布,然后計(jì)算其安全庫存。這兩種方式得到的安全庫存是否相同?它們之間有什么差異?本案例使用參數(shù)化方法擬合區(qū)域倉的需求分布,如何利用非參數(shù)方法進(jìn)行分析?哪種效果更好?案例中,企業(yè)要么將一個(gè)SKU的庫存全部放置在中央倉,要么全部放置在前置倉。如果將一個(gè)SKU的庫存同時(shí)放在中央倉和前置倉,應(yīng)該如何考慮安全庫存的存貨布局優(yōu)化?現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)第14章網(wǎng)絡(luò)庫存管理基礎(chǔ)14.1網(wǎng)絡(luò)分析基礎(chǔ)網(wǎng)絡(luò)的基本概念與表示方法:供應(yīng)網(wǎng)絡(luò)通常是一個(gè)有向圖,一張圖??由一組節(jié)點(diǎn)??和一組能夠?qū)蓚€(gè)節(jié)點(diǎn)相連的邊??組成,記為??=(??,??)產(chǎn)品從工廠發(fā)出后運(yùn)輸?shù)絽^(qū)域倉RDC,RDC向三個(gè)前置倉FDC1,F(xiàn)DC2和FDC3供貨14.1網(wǎng)絡(luò)分析基礎(chǔ)使用Python表示圖的方法:邊的數(shù)組:定義一個(gè)列表,將網(wǎng)絡(luò)中的邊存儲(chǔ)起來每個(gè)tuple中的第一個(gè)元素表示前任節(jié)點(diǎn),第二個(gè)元素表示繼任節(jié)點(diǎn)這種存儲(chǔ)方式不便于快速查找節(jié)點(diǎn)相關(guān)的邊。每次查找時(shí)都需要遍歷所有邊,計(jì)算開銷較大distribute_edges=[('Factory','RDC'),('RDC','FDC1'),('RDC','FDC2'),('RDC','FDC3')]
print(distribute_edges)[('Factory','RDC'),('RDC','FDC1'),('RDC','FDC2'),('RDC','FDC3')]14.1網(wǎng)絡(luò)分析基礎(chǔ)使用Python表示圖的方法:鄰接矩陣:表示節(jié)點(diǎn)之間相鄰關(guān)系的矩陣,對(duì)于有向圖,當(dāng)圖中存在由節(jié)點(diǎn)i指向節(jié)點(diǎn)j的邊時(shí),i行j列的元素值為1,否則為0all_nodes=list(set([nodeforedgeindistribute_edgesfornodeinedge]))
adj_matrix=np.zeros((len(all_nodes),len(all_nodes)))
foriinrange(len(all_nodes)):
forjinrange(len(all_nodes)):
if(all_nodes[i],all_nodes[j])indistribute_edges:
adj_matrix[i,j]=
1
adj_matrix_df=pd.DataFrame(adj_matrix,index=all_nodes,columns=all_nodes)
print(adj_matrix_df)FDC2FactoryRDCFDC3FDC1
FDC20.00.00.00.00.0
Factory0.00.01.00.00.0
RDC1.00.00.01.01.0
FDC30.00.00.00.00.0
FDC10.00.00.00.00.014.1網(wǎng)絡(luò)分析基礎(chǔ)使用Python表示圖的方法:鄰接數(shù)組:以節(jié)點(diǎn)為索引的列表數(shù)組,其中每個(gè)元素是和該節(jié)點(diǎn)相鄰的節(jié)點(diǎn)列表,可以使用字典來實(shí)現(xiàn),字典的key為節(jié)點(diǎn),value為與其連通的節(jié)點(diǎn)列表deffind_successors_dict(edges):
all_nodes=set([nodefortuinedgesfornodeintu])
#初始化字典,key為全部節(jié)點(diǎn),value初始化為空列表
succ_dict
={node:[]fornodeinall_nodes}
#遍歷所有邊,向每個(gè)上游節(jié)點(diǎn)對(duì)應(yīng)的列表中添加下游節(jié)點(diǎn)
for
pred,succ
inedges:
succ_dict[pred].append(succ)
return
succ_dict
deffind_predecessors_dict(edges):
all_nodes=set([nodefortuinedgesfornodeintu])
pred_dict={node:[]fornodeinall_nodes}
#遍歷所有邊,向每個(gè)下游節(jié)點(diǎn)對(duì)應(yīng)的列表中添加上游節(jié)點(diǎn)
forpred,succinedges:
pred_dict[succ].append(pred)
returnpred_dictfind_predecessors_dict和find_successors_dict獲得與每個(gè)節(jié)點(diǎn)連通的上游和下游節(jié)點(diǎn)的字典調(diào)用上面兩個(gè)函數(shù),就可以得到分銷網(wǎng)絡(luò)的鄰接數(shù)組14.1網(wǎng)絡(luò)分析基礎(chǔ)使用Python表示圖的方法:NetworkX:可以用于創(chuàng)建、操作和研究復(fù)雜網(wǎng)絡(luò)的結(jié)構(gòu)、動(dòng)態(tài)和功能,也可以進(jìn)行圖的可視化#建立一個(gè)空的有向圖
distribute_graph=nx.DiGraph()
#向空的圖中添加邊
distribute_graph.add_edges_from(distribute_edges)
#定義繪圖位置和參數(shù)
pos={'Factory':(-1,0),'RDC':(0,0),
'FDC1':(1,0),'FDC2':(1,1),'FDC3':(1,-1)}
options={
'font_size':10,
'node_size':1500,
'node_color':'white',
'edgecolors':'black',
}
#繪制圖像
nx.draw_networkx(distribute_graph,pos,**options)
ax=plt.gca()
ax.margins(0.20)
plt.axis('off')
plt.show()NetworkX也實(shí)現(xiàn)了一些常見的網(wǎng)絡(luò)分析算法,例如計(jì)算最短路徑的Dijkstra、Bellman-Ford算法等14.1網(wǎng)絡(luò)分析基礎(chǔ)常見的供應(yīng)網(wǎng)絡(luò):有向樹:定義:任意兩個(gè)節(jié)點(diǎn)中只存在一條路徑的無向圖稱為樹,若有向圖在不考慮邊的方向時(shí)是樹,即為有向樹性質(zhì):有向樹網(wǎng)絡(luò)轉(zhuǎn)化為無向圖時(shí),網(wǎng)絡(luò)中不存在環(huán)路,可以清楚定義層級(jí)結(jié)構(gòu)分類:有向樹包含鏈?zhǔn)?、分布式和裝配式三類網(wǎng)路鏈?zhǔn)较到y(tǒng):每個(gè)節(jié)點(diǎn)都至多有一個(gè)上游節(jié)點(diǎn)和一個(gè)下游節(jié)點(diǎn)14.1網(wǎng)絡(luò)分析基礎(chǔ)常見的供應(yīng)網(wǎng)絡(luò):分布式系統(tǒng):每個(gè)節(jié)點(diǎn)有至多一個(gè)上游節(jié)點(diǎn)裝配式系統(tǒng):分布式系統(tǒng)的鏡像系統(tǒng)14.1網(wǎng)絡(luò)分析基礎(chǔ)網(wǎng)絡(luò)庫存管理常用算法:
14.1網(wǎng)絡(luò)分析基礎(chǔ)網(wǎng)絡(luò)庫存管理常用算法:累計(jì)提前期的計(jì)算:節(jié)點(diǎn)的累計(jì)提前期是指,當(dāng)其全部上游節(jié)點(diǎn)都沒有庫存時(shí),從向外部供應(yīng)商訂購原材料開始到該節(jié)點(diǎn)持有可用庫存的最短時(shí)間例:計(jì)算下圖各節(jié)點(diǎn)的累計(jì)提前期,‘0’節(jié)點(diǎn)為虛擬節(jié)點(diǎn)除了最上游的C1、C2和C3三個(gè)節(jié)點(diǎn),其余節(jié)點(diǎn)到‘0’節(jié)點(diǎn)有多條通路在多條通路中,提前期之和最長(zhǎng)的一條,就是該節(jié)點(diǎn)的累計(jì)提前期利用節(jié)點(diǎn)的拓?fù)渑判蛑饌€(gè)計(jì)算節(jié)點(diǎn)的累計(jì)提前期計(jì)算下游節(jié)點(diǎn)的累計(jì)提前期時(shí),上游節(jié)點(diǎn)的累計(jì)提前期就已經(jīng)確定14.1網(wǎng)絡(luò)分析基礎(chǔ)defcal_cum_lt(edges,lt_dict):
#篩選出最上游的節(jié)點(diǎn)
roots=list(set([ifori,_inedges])-set([jf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字文創(chuàng)產(chǎn)品市場(chǎng)細(xì)分研究-深度研究
- 智能交互技術(shù)-深度研究
- 2025年嵩山少林武術(shù)職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年山東水利職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 2025年安徽衛(wèi)生健康職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年寧夏藝術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 2025年中國高能無觸點(diǎn)點(diǎn)火模塊市場(chǎng)調(diào)查研究報(bào)告
- 二零二五年度高端建筑構(gòu)件吊裝與運(yùn)輸安全協(xié)議3篇
- 2025年中國聚氨酯樹脂市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國窄間隙埋弧焊機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 山東鐵投集團(tuán)招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
- 2025年天津市政集團(tuán)公司招聘筆試參考題庫含答案解析
- GB/T 44953-2024雷電災(zāi)害調(diào)查技術(shù)規(guī)范
- 2024-2025學(xué)年度第一學(xué)期三年級(jí)語文寒假作業(yè)第三天
- 2024年列車員技能競(jìng)賽理論考試題庫500題(含答案)
- 心律失常介入治療
- 6S精益實(shí)戰(zhàn)手冊(cè)
- 展會(huì)場(chǎng)館保潔管理服務(wù)方案
- 監(jiān)理從業(yè)水平培訓(xùn)課件
- 廣東省惠州市實(shí)驗(yàn)中學(xué)2025屆物理高二第一學(xué)期期末綜合測(cè)試試題含解析
評(píng)論
0/150
提交評(píng)論