资源描述
五、STELLA销售存储模拟模型的建立
下面结合实际操作介绍如何利用STELLA建立并模拟一个存储管理系统的模型,说明怎样使用STELLA软件建模,通过学习,了解STELLA的某些功能。然而,要在一个模型中详细介绍STELLA的全部功能是不可能的,如有需要请查阅参考文献2,3。
研究存储模型,必须要有仓库,现在就建立一个。在STELLA环境下,选择累积量,将其命名为“kucun”。本模型中为研究物资的流动,任一时刻的库存量是有进库和出库决定的,,进库由订货决策决定,出库由需求量决定。目前模型中的库存还无法改变,因为它还没有流进和流出。
库存的流进和流出为进货和售出量,选择流率项,使它们分别流进和流出库存,命名为“jinhuo”“shouchuliang”。现在,我们把注意力集中到影响进货和售出的逻辑关系上。进货决策是怎样作出的呢?先要有一个每次进货量和安全库存量,然后比较库存量和安全库存量,如果库存量少于安全库存量,则作出订货决策。对销售的影响因素是需求量。销售量是否一定等于需求量呢?实际情况是当产生一个需求量时,首先比较需求量和库存量,当需求量小于库存量时,销售量等于需求量;当需求量大于库存量时,销售量等于库存量。所以三者之间也要建立联系选择相应元素作连线的下图:
用前一节中讲述的方法消灭问号。
在实际工作中,货物延迟是普遍现象,在上述模型中加入延迟,模型如图所示:
延迟的添加,这里需要特殊说明一下:在STELLA环境下选择累积量,建成一个累积变量并命名为“del”表示延迟双击该变量,出现如下的对话窗:
单选按钮“Reservoir”是累积变量,即我们最常用的变量。“Conveyor”为输送带,具有延迟的行为,是本例中我们用到的一种,“Queun”“Oven”分别是排队和处理箱,本例中暂不用,有兴趣的话可以探索一下它的使用方法。我们将单选按钮选中“Conveyor”将随后出现的对话窗中的“Transit Time:”栏中数值改为“4”,意为货物自订货日期始4天后到货,“Inflow Limit:”改为60,“Capacity:”也改为60,意为货物“ITIAL(del)”的初始值定为“0”,最终的对话窗为下图:
最后单击“OK”退出,定义完毕。
到货延迟期的大小对平均库存量和缺货损失都有影响,对不同的到货延迟期,应制定不同的安全库存量和进货量。下面三个图为同一库存策略在不同延迟期下的库存状态,一个将支付过多的保管费,一个将承受缺货损失。
对销售量的随机性模拟是通过计算机产生随机数来实现的,可调用相应的函数来完成。对某些商品其日销售量的随机分布可近似看作是正态分布。对一些中小型农机具其日销售量是偏态的。而对一些大型农机具(如联合收割机)其销售量的随机分布具有特殊的形式,需单独考虑。
综合考虑有关因素,建立存储模拟模型如图示:
模拟过程可简述如下:模拟开始,先检查这一天是否为预定到货期,如果是则原有库存量增加进货量,并把预定到货量清零。如果这一天不是预定到货期,则库存量不变。然后检查预期库存量(实际库存量加预订到货量)是否小于安全库存量,如果是则需要重新订货,这时需要增加一项订货费用,并按到货延迟期预订到货期。
按给定的分布规律,由计算机产生随机数模拟随机需求量,并将需求量与库存量比较,若需求量小于库存量,则库存量减去需求量,并对剩余库存计算一次得保管费;若需求量等于库存量,则库存量为零;若需求量大于库存量,则库存量为零,同时计算相应的缺货损失。
在一定模拟时间内,日复一日进行模拟,最后将销售收入减去订货总费用,库存保管费用以及由于缺货造成的损失即得总收益。通过比较不同策略的模拟结果,以效益最好的一个方案作为决策方案。模拟结果可通过图表的形式显示如下:
21:13 2003-2-25
Table
日期
随机数
销售量(台)
库存量(台)
订货量(台)
进货量(台)
0
216.39
4.00
40.00
0.00
0.00
1
821.75
12.00
36.00
0.00
0.00
2
134.20
3.00
24.00
60.00
0.00
3
549.84
7.00
21.00
0.00
0.00
4
120.63
2.00
14.00
0.00
0.00
5
349.96
5.00
12.00
0.00
0.00
6
707.67
7.00
7.00
0.00
0.00
7
863.14
12.00
60.00
0.00
0.00
8
800.77
11.00
48.00
0.00
0.00
9
587.24
8.00
37.00
0.00
0.00
10
820.55
12.00
29.00
60.00
0.00
11
41.60
1.00
17.00
0.00
0.00
12
244.03
5.00
16.00
0.00
0.00
13
354.98
5.00
11.00
0.00
0.00
14
159.52
3.00
6.00
0.00
60.00
15
42.90
1.00
63.00
0.00
0.00
16
38.88
0.00
62.00
0.00
0.00
17
392.79
6.00
62.00
0.00
0.00
18
593.95
8.00
56.00
0.00
0.00
19
554.33
7.00
48.00
0.00
0.00
20
643.32
9.00
41.00
0.00
0.00
…
…
…
…
…
…
48
608.45
8.00
40.00
0.00
0.00
49
213.40
4.00
32.00
60.00
0.00
Final
571.52
28.00
STELLA 方程:
cost(t) = cost(t - dt) + (c) * dt
INIT cost = 0
INFLOWS:
c = stock*unit_cost
del(t) = del(t - dt) + (order - r) * dt
INIT del = 0
TRANSIT TIME = 4
INFLOW LIMIT = 60
CAPACITY = 60
INFLOWS:
order = if(stock<safety_stock AND(t=1))then(order_volume)else(0)
OUTFLOWS:
r = CONVEYOR OUTFLOW
expend(t) = expend(t - dt) + (e) * dt
INIT expend = 0
INFLOWS:
e = if(order>0)then(1000)else(0)
loss(t) = loss(t - dt) + (l) * dt
INIT loss = 0
INFLOWS:
l = if(stock<require)then((require-stock)*4000)else(0)
profit(t) = profit(t - dt) + (income - e - c) * dt
INIT profit = 0
INFLOWS:
income = sell*price
OUTFLOWS:
e = if(order>0)then(1000)else(0)
c = stock*unit_cost
stock(t) = stock(t - dt) + (r - sell) * dt
INIT stock = 40
INFLOWS:
r = CONVEYOR OUTFLOW
OUTFLOWS:
sell = IF(stock>=require)THEN(require)else(stock)
order_volume = 60
price = 6680
randam = RANDOM(0,1000)
require=if(randam<=39)then(0)else(if(randam<=59)then(1)else(if(randam<=129) then(2)else(if(randam<=209)then(3)else(if(randam<=229)then(4)else(if(randam<=379)then(5)else(if(randam<=469)then(6)else(if(randam<=559)then(7)else(if (randam<=619)then(8)else(if(randam<=679)then(9)else(if(randam<=759)then(10) else(if(randam<=819)then(11)else(if(randam<=869)then(12)else(if(randam<=899)then(13)else(if(randam<=919)then(14)else(if(randam<=929)then(15)else(if (randam<=949)then(16)else(if(randam<=959)then(17)else(if(randam<=969)then (18)else(if(randam<=989)then(19)else(21))))))))))))))))))))
safety_stock = 35
t = if(r>0)then(0)else(if(stock<safety_stock)then(1)else(0))
unit_cost = 3
z = profit-loss*0.5
展开阅读全文