缺货不补随机库存系统WITNESS仿真建模
1.系统描述
某公司经销单类产品,顾客需求时间间隔DIT(Demand Interval Time)为服从均值为0.1个月的指数随机变量,需求量D是随机变量,其概率函数为:
需求量D | 发生概率 |
1 | 1/6 |
2 | 1/3 |
3 | 1/3 |
4 | 1/6 |
公司采取的采购和销售策略分别为:
(1)采购策略:
定期订货(s,S,T):即每隔一段时间T检查一次库存,如果存储数量高于一个数值s,则不订货,否则进行订货,订货数量为S-q,其中q为检查库存时的库存量。
(2)销售策略:
缺货不补:当客户需求到达时,如果仓库中没有足够的产品,则仅以现有库存满足客户需求,客户没满足的需求将不再补给。
当公司相关库存费率如下时:
存储费率C1=1.5元/件.月;
缺货费率C2=5元/件;
订货费率C3=K+mQ=32+3Q,其中:
K—订货附加费,电话、订单传递等;
m—单件订货费,例如运输费,保险等;
Q—订货量;
通过建立仿真模型并进行仿真实验,分析公司采用如下9种采购策略中的哪一种策略,在100天内可以获得最低的系统总成本,其中:存储成本、缺货成本、订货成本各为多少?
L |
20 |
20 |
20 |
20 |
40 |
40 |
40 |
60 |
60 |
S |
40 |
60 |
80 |
100 |
60 |
80 |
100 |
80 |
100 |
具体建成的模型界面如图1所示,模型下载。
图1 库存系统WITNESS仿真模型界面
2. 系统分析
2.1 元素说明
库存系统需要能够模拟满足顾客需求的过程、库存检验以及采购过程,同时需要能够统计出存储费、缺货费、订货费以及总费用,为了实现这些功能,设计模型的具体元素如表1。
元素名称 |
元素类型 |
元素数量 |
元素作用 |
检查员 |
Part |
1 |
每隔1月到达一次,进行库存检查和采购决策,模拟库存系统中的库存检验员 |
缺货物品 |
Part |
1 |
当仓库中的“物品”不足时,由缺货物品填补,缺货物品进入系统的数量为系统缺货量 |
物品 |
Part |
1 |
客户需要的物品 |
仓库 |
Buffer |
1 |
存储物品的仓库 |
采购过程 |
Machine:Batch |
1 |
根据NeedPurchase和purchaseQ来进行物品采购 |
客户需求 |
Machine:Assembly |
1 |
模拟客户到达和获取物品 |
BigS |
Variable:Integer |
1 |
存储库存决策中的S |
Cost |
Variable:Real |
4 |
统计库存系统存储费、缺货费、订货费和三项费用之和 |
LittleS |
Variable:Integer |
1 |
存储库存决策中的s |
NeedPurchase |
Variable:Integer |
1 |
控制变量,当其为1是,表示需要采购;当其为0时,表示不需采购 |
purchaseQ |
Variable:Integer |
1 |
当期采购批量 |
DmdQty |
Distribution |
1 |
某一客户需求的数量 |
2.2 运行时间
仿真运行100个时间单位(每个时间单位为现实系统1个月),统计不同采购决策参数BigS和LittleS下的库存系统成本。
3. 元素细节设计
3.1 Part类型元素“缺货物品”和“物品”细节设计
“物品”模拟系统中顾客需求的实际物品,将由“采购过程”元素将其引入模型;而“缺货物品”模拟在仓库货物不足时提供给顾客的虚拟货物以便累积缺货数量,计算缺货费用,该元素将在库存不足时由“客户需求”元素将其引入模型,因此这两类元素均设定为被动型Part,保留Witness系统对Part的缺省设置即可。
3.2 Part类型元素“检查员”细节设计
Part元素“检查员”需要实现的功能为每间隔1个月对库存元素“仓库”中所剩余的物品数量进行检查,如果所剩物品数量小于LittleS,则计算采购物品的数量,向采购过程发送采购指令,因此对其进行细节设置如图2所示。
图2 检验员细节设计对话框
在type栏中选择active选项,表示检验员是主动进入系统;
在inter arrival栏中输入1,表示检验员每隔1个时间单位(月)进入系统检验一次;
在Lot size栏中输入1,表示每次检验员只来一个人。
点击To…按钮,输入“push to ship”,表明检验员进入系统 之后处理了采购决策后立即离开系统;
点击actions on create按钮,输入下列语句:
!每月检查一次,如果当前库存量小于littleS,则将needPurchase设定为1,同时
!将purchaseQ设定为bigS-当前库存量
IF needPurchase = 0 !当以前采购订单全部送达仓库时,再进行下一次采购决策
IF NPARTS (仓库) < littleS !如果当前“仓库”中物品数量小于littleS的值,则进行下列处理
needPurchase = 1
purchaseQ = bigS - NPARTS (仓库)
ENDIF
ENDIF
!
!实时更新库存成本、缺货成本
cost (1) = TIME * APARTS (仓库) * 1.5 !库存成本为截止目前时刻“仓库”的平均库存量*存储费率(1.5)*总时长(TIME)
cost (2) = NCREATE (缺货物品) * 5 !缺货费率为截止目前时刻系统所需要的“缺货物品”数量,可参看“客户需求”元素细节设计
cost (4) = cost (1) + cost (2) + cost (3) !截止目前时刻系统总成本为三项分成本之和
点击确定按钮,完成设计。
函数解释:
APARTS函数:
语法:APARTS (element_name)
作用:APARTS函数返回一个实值,包含在指定元素名称参量的缓冲区,输送链,运输工具或模块的零部件在时间长度上的平均数量。
示例1:AVG_ON_BUF = APARTS(BUFFER001)
上述表达式中,APARTS函数计算在BUFFER001缓冲区中零部件时间加权平均数量,并且以此值来更新AVG_ON_BUF变量。
如果BUFFER001中共进入了I个零件,这I个零件进入BUFFER001的时间分别为inTime(i),在当前时刻Time有J(J<=I)个零件离开了BUFFER001,第j个零件离开BUFFER001的时间为outTime(j)(outTime(j)>=inTime(j),即零件离开缓冲区的时间肯定不小于其进入缓冲区的时间),则计算缓冲区中存储零件平均数量过程如下:
(注:如下计算过程仅仅为了说明平均存储数量的计算方法,在WITNESS仿真过程中,该计算过程由WITNESS自动完成,而不需要用户自定义编程)
(1)将零件到达缓冲区和离开缓冲区的时间按照升序排列,获得缓冲区库存变化时间序列
changeTime(1),changeTime(2),....,changeTime(I+J)
以及变化类型序列
changeKind(1),changeKind(2),....,changeKind(I+J)
其中:
changeTime(k)<=changeTime(k+1), 1<=k,k+1<=I+J,即事件序列按升序排序
当changeTime(k)为零件到达缓冲区时,changeKind(k)=1,即缓冲区中零件数量将增加1个;
当changeTime(k)为零件离开缓冲区时,changeKind(k)=-1,即缓冲区中零件数量将减少1个;
只有当有零件进入缓冲区之后,才可能发生零件离开缓冲区,因此changeKind(1)=1,即最早发生的事件必然是零件到达缓冲区的事件。
(2)计算每个库存变化时间段内的库存数量之和
sumParts=[changeTime(2)-changeTime(1)]*changeKind(1)
+[changeTime(3)-changeTime(2)]*[changeKind(1)+changeKind(2)]
+[changeTime(4)-changeTime(3)]*[changeKind(1)+changeKind(2)+changeKind(3)]
......
+[changeTime(I+J)-changeTime(I+J-1)]*[changeKind(1)+changeKind(2)+changeKind(3)+...+changeKind(I+J-1)]
(3)计算整个时间段内平均零件存储量
APARTS(BUFFER001)=sumParts/Time
计算:
(1)模型中有一个零件A每隔5分钟到达一个,第一个零件在时刻0到达,到达后送进缓冲区BufA存储,将不再离开,则截止时间100,缓冲区BufA中的平均库存数量为多少?
答案:10.5
(2)模型中有一个零件A每隔5分钟到达一个,第一个零件在时刻0到达,到达后送进缓冲区BufA存储,后续有一台设备从BufA中提取零件进行加工,对每个零件的加工时长为6分钟,则截止时间100,缓冲区BufA中的平均库存数量为多少?
答案:1.66
NCREATE函数:
语法:NCREATE(PartName)
作用:NCREATE函数返回一个整数值,记录截止当前时刻进入系统中的零件数量。
示例:模型中有一个零件A每隔5分钟到达一个,第一个零件在时刻0到达,到达后送进缓冲区BufA存储,将不再离开,则截止时间100,使用NCREATE(A)函数,将返回值21,即截止到100这个时刻,有21个零件A进入模型。
3.3 Machine类型元素“采购过程”细节设计
Machine类型元素“采购过程”需要实现的功能为:当检验员通过库存检查和库存决策变量判断需要进行采购时,根据采购决策变量needPurchase=1,以及采购批量purchaseQ,向供应商采购物品,并通过1个月的采购以及运输时间将物品送达仓库,因此对其进行细节设置如图3所示。
图3 采购过程细节设计界面
点击Type下拉列表,选择“Batch”,实现该机器采购一批物品;
在Batch Min中输入“purchaseQ”,即每次采购量为purchaseQ的数量;
点击from…按钮,输入下列语句,实现采购过程:
!!当采购决策变量needPurchase=1时,才进行物品的采购
IF needPurchase = 1
PULL from 物品 out of WORLD
ELSE
Wait
ENDIF
在Cycle Time中输入“1”,实现采购提前期为1个月;
点击Actions on Start..按钮,输入语句“cost (3) = cost (3) + 32 + purchaseQ * 3”,实现采购成本的累积计算;
点击to…按钮,输入“push to 仓库”, 实现采购过来的物品将送入“仓库”中;
点击Actions on Output...按钮,输入下列语句,将采购决策变量置0,以便下一次检查员进行库存决策:
!当所采购的物品进入仓库,则将采购决策变量置0
needPurchase = 0
purchaseQ = 0
3.4 Distribution类型元素“dmdQty”细节设计
dmdQty元素需要实现能够随机的返回[1,2,3,4]这四个数值中一个,而且返回这四个数的概率分别为1/6,1/3,1/3,1/6,以便模拟顾客需求到达时所需的物品数量,具体设计如图4所示。
图4 需求量经验分布设计界面
如图4所示,distribution设计中主要有两项内容:
Value:经验分布执行一次返回的值;
Weight:经验分布执行一次返回对应值的权重;
在本模型中,返回值为[1,2,3,4]的权重分别为[1,2,2,1],则总的权重数之和为6,而返回值1的权重为1,则该经验分布执行一次返回值为1的可能性为1/6;返回值为2的可能性为2/6=1/3;返回值为3的可能性为2/6=1/3;返回值为4的可能性为1/6。从而实现对顾客需求量模式的模拟。
3.5 Machine类型元素“客户需求”细节设计
“客户需求”元素需要模拟客户需求的到达间隔(均值为0.1的负指数分布)和需求量(经验分布dmdQty()),并以当前库存量进行需求满足,如果当前需求量大于“仓库”储存量,则将产生缺货,具体设计如图5所示。
图5 客户需求细节设计界面
点击Type下拉列表,选择“Assembly”,实现 每隔客户需求量可能为多个物品;
在Input Quantity中输入“dmdQty()”,即每个客户到达时,根据dmdQty函数随机产生该顾客需要的物品量;
点击from…按钮,输入“PULL from 仓库,缺货物品 out of WORLD”语句, 即当客户到达,首先从“仓库”中提取“物品”满足其需求,如果“仓库”中“物品”数量不足,将提取“缺货物品”以补充该客户需求,实现仓库库存不足时,缺货数量的记录。
3.6 模型初始化设计
该库存模型需要不断改变的为库存决策参数BigS和LittleS的组合,需要模型在仿真实验之前就对这两个参数赋值。通过系统菜单项Model-->Initialization Actions...(该操作见图6)打开初始化设计对话框,向对话框中输入 下面两行赋值语句进行决策参数的赋值。
littleS = 20
bigS = 40
图6 初始化过程菜单项操作
4. 仿真实验及结果分析
对每种(s,S)的组合进行仿真实验,得到的成本统计数据如表2所示 ,运行100个月,最优决策配置参数为[20,40]时,库存系统总成本为最低的12484。
表2 不同(s,S)组合下的库存成本
方案 |
s |
20 |
20 |
20 |
20 |
40 |
40 |
40 |
60 |
60 |
S |
40 |
60 |
80 |
100 |
60 |
80 |
100 |
80 |
100 |
|
存储费 |
2526.65 |
3953.45 |
5954.277 |
8000.74 |
4609.75 |
6291.51 |
7716.45 |
6834.38 |
8538.68 |
|
缺货费 |
1780 |
1235 |
1460 |
1010 |
575 |
410 |
470 |
290 |
190 |
|
采购费 |
8178 |
8085 |
7355 |
7728 |
9452 |
9090 |
8582 |
9556 |
9399 |
|
总费用 |
12484.65 |
13061.45 |
14769.28 |
16738.74 |
14636.76 |
15791.52 |
16768.4 |
16680.3 |
17966.6 |
注:由于客户需求的随机性,需要进行多次实验后,对每种(s,S)配置下的库存系统Cost数值求平均后,数据方具有实际比较意义。