《現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第13、14章 某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)、網(wǎng)絡(luò)庫存管理基礎(chǔ)_第1頁
《現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第13、14章 某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)、網(wǎng)絡(luò)庫存管理基礎(chǔ)_第2頁
《現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第13、14章 某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)、網(wǎng)絡(luò)庫存管理基礎(chǔ)_第3頁
《現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第13、14章 某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)、網(wǎng)絡(luò)庫存管理基礎(chǔ)_第4頁
《現(xiàn)代庫存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第13、14章 某食品企業(yè)Y庫存共享決策實(shí)戰(zhàn)、網(wǎng)絡(luò)庫存管理基礎(chǔ)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論