《现代库存管理:模型、算法与Python实现》 课件 第15章-承诺服务模型_第1页
《现代库存管理:模型、算法与Python实现》 课件 第15章-承诺服务模型_第2页
《现代库存管理:模型、算法与Python实现》 课件 第15章-承诺服务模型_第3页
《现代库存管理:模型、算法与Python实现》 课件 第15章-承诺服务模型_第4页
《现代库存管理:模型、算法与Python实现》 课件 第15章-承诺服务模型_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

现代库存管理:模型、算法与Python实现第15章承诺服务模型15.1承诺服务模型的需求规划问题

15.1承诺服务模型的需求规划问题

15.2需求上界的构造与计算

15.2需求上界的构造与计算

15.2需求上界的构造与计算例:以下图的生产装配网络为对象,计算给定服务水平为0.95的情况下,每个节点的需求上界#定义数据存储路径

data_dir=

'../../data/tree_example/'

#读取网络的节点数据

node_df=pd.read_csv(data_dir+

'assembly_node_df.csv')

#读取网络的边数据

edge_df=pd.read_csv(data_dir+

'assembly_edge_df.csv')

#读取网络的需求数据

demand_df=pd.read_csv(data_dir+

'assembly_demand_df.csv')15.2需求上界的构造与计算例:数据概况节点信息表’node_df’:’lt’:节点的单级提前期’hc’:单位持货成本’sla’:对客户承诺的服务时间node_idlthcsla0C180.4685565NaN1B111.994935NaN2C270.271441NaN3C330.632656NaN4B280.861130NaN5A33.7657402.0边信息表’edge_df’:’predecessor’:上游节点’successor’:下游节点’quantity’:生产配比predecessorsuccessorquantity0C1B111B1A12C2B123C3B214B2A1需求信息表’demand_df’:只有节点A为需求节点,mean为14.558117,std为2.89212915.2需求上界的构造与计算假设库存共享效应系数为2,服务水平系数取标准正态分布的0.95分位数。相当于假设需求服从正态分布,同时模型仅覆盖0.95分位数以下的需求波动

pooling_factor=

2

tau=

0.9515.2需求上界的构造与计算具体代码如下:#调用第10章确定上游节点的函数得到每个节点的上游节点列表

pred_dict=find_predecessors_dict(edges=edge_df[['predecessor',

'successor']].values)

#生产配比

qty_dict={(pred,succ):qtyforpred,succ,qtyinedge_df.values}

#需求节点的需求及标准差

mu_dict=dict(zip(demand_df['node_id'],demand_df['mean']))

sigma_dict=dict(zip(demand_df['node_id'],demand_df['std']))

#各节点自身需求所对应的需求波动系数

ksigma_dict={node:0

fornodeinnode_df['node_id']}

ksigma_dict.update({node:norm.ppf(tau)*sigma

fornode,sigmainsigma_dict.items()})

#初始化涉及到向下传递的字典

network_mu_dict={node:0

fornodeinnode_df['node_id']}

#首先将需求节点的信息加入到字典中

network_mu_dict.update({node:mufornode,muinmu_dict.items()})

constant_dict={node:v**pooling_factorfornode,vinksigma_dict.items()}15.2需求上界的构造与计算具体代码如下:#将网络的边反向

reverse_edges=[(j,i)fori,jin

edge_df[['predecessor','successor']].values]

#计算拓扑排序

ts=TopologicalSort(reverse_edges)

reverse_topo_sort=ts()

fornodeinreverse_topo_sort:

#如果节点有上游节点,则将自身的需求信息传递给上游节点

iflen(pred_dict[node])>

0:

forpredinpred_dict[node]:

constant_dict[pred]+=(qty_dict[pred,node]**pooling_factor)\

*constant_dict[node]

network_mu_dict[pred]+=qty_dict[pred,node]*network_mu_dict[

node]

#在全部节点传递完成后,计算需求波动系数

volatility_constant_dict={node:np.power(v,1

/pooling_factor)

fornode,vinconstant_dict.items()}

volatility_constant_df=pd.DataFrame.from_dict(

volatility_constant_dict,orient='index').reset_index().rename(

columns={'index':'node_id',0:'volatility_constant'})

network_mu_df=pd.DataFrame.from_dict(

network_mu_dict,orient='index').reset_index().rename(

columns={'index':'node_id',0:'mean'})15.2需求上界的构造与计算具体代码如下:lt_dict=dict(zip(node_df['node_id'],node_df['lt']))

cum_lt_dict=cal_cum_lt(edge_df[['predecessor','successor']].values,lt_dict)

cum_lt_df=pd.DataFrame.from_dict(

cum_lt_dict,orient='index').reset_index().rename(

columns={'index':'node_id',0:'cum_lt'})

node_df=node_df.merge(cum_lt_df,on='node_id',how='left')

print(node_df)#定义离散化的时间颗粒度

time_unit=

1

#根据节点和对应的累计提前期,生成index

node_list=node_df['node_id'].tolist()

idx=[(node,ct)fornodeinnode_list

forctinnp.arange(0,cum_lt_dict[node]+time_unit,time_unit)]

idx=pd.MultiIndex.from_tuples(idx,names=['node_id','time'])

demand_bound_df=pd.DataFrame(index=idx).reset_index()

demand_bound_df=demand_bound_df.merge(

volatility_constant_df,on=['node_id'],how='left')

demand_bound_df=demand_bound_df.merge(

network_mu_df,on=['node_id'],how='left')

#根据对应的CT,计算对应的安全库存量,以及需求上界

demand_bound_df['ss_qty']=demand_bound_df['volatility_constant']*np.power(

demand_bound_df['time'],1

/pooling_factor)

demand_bound_df['demand_bound']=demand_bound_df['mean']*demand_bound_df[

'time']+demand_bound_df['ss_qty']

print(demand_bound_df.head())15.2需求上界的构造与计算结果如下:node_idtimevolatility_constantmeanss_qtydemand_bound0C104.75712914.558170.0000000.0000001C114.75712914.558174.75712919.3152472C124.75712914.558176.72759735.8438323C134.75712914.558178.23959051.9139424C144.75712914.558179.51425867.74672815.2需求上界的构造与计算不同服务时间下的策略及成本比较:

根据计算得到的demand_bound_df,查找出每个节点不同覆盖时间的安全库存量,计算出总库存成本,接下来考虑三种比较有代表性的策略:只在最下游设置安全库存。该策略将安全库存全部前置到需求节点,即只持有成品库存。其好处是将所有节点安全库存的覆盖时间全部汇聚在需求节点,这样可以最大化安全库存在“时间维度”的共享效应。其劣势是完全忽视了安全库存在“空间”维度的共享效应按照单级的方法设置安全库存。该策略下,每个节点都根据自身的提前期按照单级的方式计算安全库存。其好处是计算简单,但它完全没有考虑到网络中安全库存的共享效应,也忽略了节点之间持货成本的差异,没有对安全库存进行全网络优化网络最优的安全库存。该策略通过优化所有节点的服务时间,在保证需求节点的承诺服务时间的条件下,充分挖掘网络中安全库存“空间维度”和“时间维度”的共享效应,最小化网络的总安全库存成本15.2需求上界的构造与计算不同服务时间下的策略及成本比较:只在最下游设置安全库存:前面计算过,节点A的累计提前期为14天,它的承诺服务时间为2天,如果只在节点A上设置安全库存,它的覆盖时间CT=14-2=12天,其他节点的覆盖时间都为0,经计算该策略的安全库存成本为62.06使用单级的方法设置安全库存:在该策略下,需求节点A的覆盖时间等于自身提前期减去其sla,其他节点的覆盖时间都是自身提前期,该策略的安全库存总成本为57.34网络最优的安全库存策略:本章的后续内容将介绍如何优化承诺服务模型。这里先直接给出该网络下每个节点的最优覆盖时间:{’B2’:10,’B1’:0,’C1’:8,’C2’:7,’A’:2,’C3’:0}。根据给出的最优覆盖时间,可以得到最优的安全库存策略及其成本51.43可以看出,相比于前两种方法,最优的安全库存策略能够显著降低库存成本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论