缺货不补随机库存系统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)销售策略:

      缺货不补:当客户需求到达时,如果仓库中没有足够的产品,则仅以现有库存满足客户需求,客户没满足的需求将不再补给。

   当公司相关库存费率如下时:

      通过建立仿真模型并进行仿真实验,分析公司采用如下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 检验员细节设计对话框

 

!每月检查一次,如果当前库存量小于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 采购过程细节设计界面

!!当采购决策变量needPurchase=1时,才进行物品的采购
IF needPurchase = 1
    PULL from 物品 out of WORLD
ELSE
    Wait
ENDIF

!当所采购的物品进入仓库,则将采购决策变量置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 客户需求细节设计界面

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数值求平均后,数据方具有实际比较意义。