[库存说明书] 去库存
辽 宁 工 业 大 学
题目: 已知服务水平定量订货法模拟
院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间:
课程设计(论文)任务及评语
目 录
第一章. 设计目的 . ........................................................... 3 第二章.定量订货原理 . ....................................................... 3
2.1 定量订货法原理 . .................................................... 3 2.2 定量订货法优点 . .................................................... 3 第三章.蒙特卡洛模拟法原理 . ................................................. 4 第四章.定量订货法操作步骤 . ................................................. 5 第五章.软件的功能及操作说明 . ............................................... 5 第六章.主要任务 . ........................................................... 6
6.1 封面表单设计 . ...................................................... 6 6.2 分析数据库建立过程 . ................................................ 7
6.2.1 pqk对照表 ................................................... 7 6.2.2 r概率分布数据表 ............................................. 7 6.2.3 tk分布表 .................................................... 8 6.2.4 模拟过程表 . .................................................. 9 6.3 分别模拟100、120、150次在C 0,C 1不变的情况下分析Q*结果 ........... 10 6.4 输出库存满意率为1时的订货点Q k . ................................... 15 6.5 pq报表 ........................................................... 16 第七章.课设感想 . .......................................................... 16 第八章.参考文献 . .......................................................... 17
已知服务水平的定量订货法模拟
第一章. 设计目的
库存控制课程设计是在学生完成库存控制技术课程后必修的教学环节。它一方面要求在设计中能初步学会综合运用过去所学的全部知识,另外也为毕业设计工作做一次综合训练
1、培养综合运用《物流学》、《库存控制技术》、《数据库语言》、《管理信息系统》等课程理论知识的能力。
2、培养初步掌握库存控制的基本方法和基本理论,学会编制计算机应用设计程序,提高里理论与实际相结合的应用能力。
3、能够进一步强化学生收集整理资料的能力,提高对文献资料的归纳、写作、综合运用的能力。
对于已知服务水平的定量订货,我们通过库存控制课程设计达到以下几个目的: 法模拟,要实现以下目的: 1、理解定量订货法策略。 2、掌握蒙特卡洛法模拟方法。
3、掌握定量订货法的蒙特卡洛模拟的数字化方法。
第二章.定量订货原理
2.1 定量订货法原理
定量订货法,就是预先确定一个订货点和订货批量,随时检查库存,当库存下降到订货点R 时就发出订货,即按预先确定的订购量Q 发出订货单,经过交纳周期(订货至到货间隔时间)LT ,库存量继续下降,到达安全库存s 时,收到订货Q ,库存水平上升到最大库存水平S 。故而,我们有时将定量订货库存控制方法称之为(s ,S )库存控制策略。
定量订货法库存控制方法的再订货点和订货量都是事先确定的,而且检查时刻是连续的,需求量是可变的。 2.2 定量订货法优点
(1)能经常地掌握库存储备动态,及时地提出订购,不易出现缺货。
(2)每次订购量固定,因而能采用经济订货批量模型,便于包装运输和保管作业。
(3)保险储备量较少
第三章.蒙特卡洛模拟法原理
蒙特卡洛(Monte Carlo) 模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。具体的,当系统中各个单元的可靠性特征量已知,但系统的可靠性过于复杂,难以建立可靠性预计的精确数学模型或模型太复杂而不便应用时,可用随机模拟法近似计算出系统可靠性的预计值;随着模拟次数的增多,其预计精度也逐渐增高。由于涉及到时间序列的反复生成,蒙特卡洛模拟法是以高容量和高速度的计算机为前提条件的,因此只是在近些年才得到广泛推广。
这个术语是二战时期美国物理学家Metropolis 执行曼哈顿计划的过程中提出来的。 蒙特卡洛模拟方法的原理是当问题或对象本身具有概率特征时,可以用计算机模拟的方法产生抽样结果,根据抽样计算统计量或者参数的值;随着模拟次数的增多,可以通过对各次统计量或参数的估计值求平均的方法得到稳定结论。
蒙特卡洛模拟法的概念(也叫随机模拟法)当系统中各个单元的可靠性特征量已知,但系统的可靠性过于复杂,难以建立可靠性预计的精确数学模型或模型太复杂而不便应用则可用随机模拟法近似计算出系统可靠性的预计值。随着模拟次数的增多,其预计精度也逐渐增高。由于需要大量反复的计算,一般均用计算机来完成。
蒙特卡洛模拟法求解步骤
1. 根据提出的问题构造一个简单、适用的概率模型或随机模型,使问题的解对应于该模型中随机变量的某些特征(如概率、均值和方差等),所构造的模型在主要特征参量方面要与实际问题或系统相一致。
2 . 根据模型中各个随机变量的分布,在计算机上产生随机数,实现一次模拟过程所需的足够数量的随机数。通常先产生均匀分布的随机数,然后生成服从某一分布的随机数,方可进行随机模拟试验。
3. 根据概率模型的特点和随机变量的分布特性,设计和选取合适的抽样方法,并对每个随机变量进行抽样(包括直接抽样、分层抽样、相关抽样、重要抽样等)。
4. 按照所建立的模型进行仿真试验、计算,求出问题的随机解。 5. 统计分析模拟试验结果,给出问题的概率解以及解的精度估计。
在此定量订货法中,即用计算机处理模仿实际的物资销售的业务过程。已知需求速度和前置期长度的随机分布,将实际业务过程中的随机变化的日销售量通过计算机随机数的大小随机取销售量来实现,而将实际业务过程中订货前置期的变化也通过计算机随机数随机提取前置期长度来实现。由计算机随机数取得的日销售量和前置期长度就可以计算出该次提前期的销售量。
第四章.定量订货法操作步骤
第一步:先确定模拟总次数N=100。
第二步:进行N 次模拟,每次模拟的过程为:
(1)通过随机数RND(T k ) 选定订货提前期T k 的大小(单位:天);
(2)选定T k 个日需求量相加,得到这个前置期的总需求量D L :(每个日需求量都是通过随机数RND(R)选定的,一共要选择T k 个日需求量;再相加,得到这个前置期的总需求量D L , 即D L =∑(D L )i 。
(3)累计这个需求量数字的发生次数S(D L ) 。 第三步:对N 次模拟结果进行数据处理:
(1)将模拟得到全部前置期需求量按从小到大的顺序排序; (2)求出每个需求量水平的发生频数和发生概率;
(3)按前置期从小到大的顺序求出每个前置期需求量的累计概率。这样就可以得出一个前置期需求量D L [D L =∑(D L )i ÷T k ],其发生概率F (D L ) [F (D L )=D L ÷N ]及累计概率P (D L ) [P (D L )=∑(D L )((D L )i ≤D L ) )]的对照表。由这个对照表就可以得到定量订货的订货策略。如果把某一个D L 值取为订货点,则其对应的累计概率就是相应的满足率。相反,如果想达到某一个满足率,则就可以取累计概率等于这个满足率的D L 值作为订货点。
第四步:根据订货费用C 0、单位货物单位时间的保管费用C 1、日需求量R 的平均值计算经济订货批量Q
* [Q *=和经济订货费用C
* [C *=],这样就完成了定量订货法两个指标的计算。
1N
T k 1
T k 1
第五章.软件的功能及操作说明
VFP :VISUAL FOXPRO 数据库管理软件 。VFP 是由FoxPro 发展而来,并且根据“可视化编程”的需要,增加了一些新的操作。它的语句、函数和语法规则与Xbase(如dBASE 、FoxBase 、FoxPro) 语言基本上是兼容的,而且功能更加强大。VFP 是运行在Windows 操作系统下的、功能更为强大的数据库语言系统。
Microsoft Visual FoxPro 6.0关系数据库系统是新一代小型数据库管理系统的杰出代表,它以强大的性能、完整而又丰富的工具、极高的处理速度、友好的界面以及完备的兼容性等特点,备受广大用户的欢迎。
Visual FoxPro 6.0及其中文版,是可运行于Windows 95和Windows NT平台的32位数据库开发系统,它不仅可以简化数据库管理,而且能使应用程序的开发流程更为合理。Visual FoxPro 6.0使组织数据、定义数据库规则和建立应用程序等工作变得简单易行。利用可视化的设计工具和向导,用户可以快速创建表单、查询和打印报表。
Visual FoxPro 6.0还提供了一个集成化的系统开发环境,它不仅支持过程式编程技术,而且在语言方面作了强大的扩充,支持面向对象可视化编程技术,并拥有功能强大的可视化程序设计工具。目前,Visual FoxPro 6.0是用户收集信息、查询数据、创建集成数据库系统、进行实用系统开发较为理想的工具软件。
第六章.主要任务
6.1 封面表单设计
封面表单设计如图1
图1 封面表单图
(1)设置主表单属性AutoCenter 属性设置为.T. ,ShowWindow 属性设置为2-作为顶层表单,WindowType 属性设置为0-无模式。 (2)编写“模拟过程”click 程序:
do form模拟程序表单.scx
(3)编写“退出”click 程序:
Quit
6.2 分析数据库建立过程 6.2.1 pqk对照表
Pqk 对照表中pdl 的类型是数值型,宽度为10,小数位数为2,索引为升,设置pdl 为索引。pdl 为数值型,因为pdl 产生的是数值,pdl 取宽度为10,小数位数为2是为了对pdl 进行更好的区分,设置pdl 为索引是为了使在之后的pqk 报表之中能够按照pdl 的升序排列;qk 的类型是数值型,宽度为10,小数位数为0,qk 为数值型,因为qk 对应的值为数值,qk 取宽度为10。pqk 表的设计如图2。
图2 pqk 对照表图
6.2.2 r概率分布数据表
R 概率分布数据表中r 的类型为数值型,宽度为10,r 为数值型,因为r 产生的是数值,r 取宽度为10是因为r 的取值范围最大为50;f 的类型为数值型,宽度为10,小数位数为1;p 的类型为数值型,宽度为10,小数位数为1,p 为数值型,因为p 产生的是数值;rnd 的类型为数值型,宽度为10,rnd 为数值型,因为rnd 产生的是数值,rnd 取宽度为10是因为rnd 的取值范围最大为100。
图3 r 分布表图
R 10 11 12 13 14
F 0.1 0.2 0.4 0.2 0.1
P 0.1 0.3 0.7 0.9 1.0
表1 自拟R 分布表数据
Rnd 0-9 10-29 30-69 70-89 90-99
6.2.3 tk分布表
tk 分布表中tk 的类型为数值型,宽度为10,tk 为数值型,因为tk 产生的是数值,tk 取宽度为10,是因为tk 的取值范围最大为5;f 的类型为数值型,宽度为10,小数位数为1,f 为数值型,因为f 产生的是数值,f 取宽度为10,小数位数为1,是因为fk 的值是一个小数,且长度不大于4;p 的类型为数值型,宽度为10,小数位数为1,p 为数值型,因为p 产生的是数值,p 取宽度为10,小数位数为1,是因为pt 的值是一个小数,且长度不大于4;rnd 的类型为数值型,宽度为10, rnd为数值型,因为rnd 产生的是数值,rnd 取宽度为10是因为rnd 的取值范围最大为100,是3位数。
图4 t 分布表图
Tk 1 2 3 4 5
Fk 0.1 0.2 0.4 0.2 0.1
Pt 0.1 0.3 0.7 0.9 1.0
表2 tk分布表数据
Rnd 0-9 10-29 30-69 70-89 90-99
6.2.4 模拟过程表
模拟过程表中模拟序号类型为数值型,宽度为10,默认值为recno(),模拟序号是数值型,因为其产生的是数值,宽度为5,是因为其产生的序号是1-200,5位可以满足其要求,设置模拟类型为索引是为了使其能在模拟过程表单之中按照模拟序号排序,设置默认值是为了让其能够按照1-200的顺序排列;提前期随机数类型为数值型,宽度为5,提前期随机数为数值型,因为其产生的数位数值型,宽度为5,是因为其取值范围最大为200,是3位数,可以满足;tk 类型为数值型,宽度为5,tk 为数值型,因为其产生的数位数值型,宽度为5,是因为其取值最大为5,是1位数,可以满足;需求速率随机数类型为字符型,宽度为40,需求速率随机数为字符型,是因为其产生的内容为一串字符,宽度为40,是因为该字符串的长度最大可以为20,宽度40可以满足其最大要求;r 序列类型为字符型,宽度为20,r 序列类型为字符型,是因为其产生的内容为一串字
符,宽度为20,是因为该字符串的长度最大可以为15,宽度20可以满足其最大要求;dl 类型为数值型,宽度为5,dl 为数值型,因为其产生的数位数值型,宽度为5,是因为其取值最大为1000,是4位数,可以满足;sdl 类型为数值型,宽度为5,sdl 为数值型,因为其产生的数位数值型,宽度为5,是因为其取值最大为200,是3位数,可以满足;fdl 类型为数值型,宽度为4,小数位数为2,fdl 为数值型,因为其产生的数位数值型,宽度为4,小数位数为2,是因为其值为小数,可以满足;pdl 类型为数值型,宽度为4,小数位数为2,索引为升,pdl 为数值型,因为其产生的数位数值型,宽度为4,小数位数为2,是因为其值为小数,可以满足,设置pdl 为索引是为了在报表中能够按p 排序。模拟过程表的设计如图5。
图5 模拟过程表图
6.3 分别模拟100、120、150次在C 0,C 1不变的情况下分析Q*结果
(1)模拟100次时Q*的结果,如图
6
图6 模拟100次时Q*结果
(2)模拟120次时Q*的结果,如图
7
图7 模拟120次时Q*结果
(3) 模拟150次时Q*的结果,如图
8
图8 模拟150次时Q*结果
(4)重新模拟程序:
Public _r &&定义内存变量r 为全局性质&&
dimension _xx(5),_yy(5) &&建立一个10*10维的数&&
_r=0 &&_r值为0&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
Zap &&删除当前数据库文件所有记录&& do while reccount()
append blank &&给数据库文件追加记录&&
enddo &&结束循环&&
go 1 &&指针指向1&&
do while not eof() &&如果没到文件尾&&
_rantk=提前期随机数 &&将提前期随机数的值赋予_rantk&& sele tk概率分布数据表 &&打开“tk 概率分布数据表”&&
Go 1 &&指针指向1&&
do while _rantk>rnd &&如果_rantk的值大于rnd 的值&& skip &&记录移动&&
enddo &&结束循环&&
_stringx="" &&定义_stringx为空&&
_stringy="" &&定义_stringy为空&&
_前置期需求量dl=0 &&将0赋予_前置期需求量dl&&
_tk=tk &&将tk 的值赋予_tk&&
for i=1 to _tk &&让i 从1至_tk进行100次循环&& _xx(i)=int(rand()*100) &&产生提前期随机数&&
_stringx=_Stringx + "_" + allt(str(_xx(i))) &&产生提前期随机数序列&& sele r概率分布数据表 &&打开“r 概率分布数据表”&&
Go 1 &&指针指向1&&
do while _xx(i) >rnd &&如果_xx(i)的值大于rnd 的值&& skip &&记录移动&&
enddo &&结束循环&&
_yy(i) = r &&将r 的值赋予_yy(i)&&
_stringy = _stringy + " _ " +allt(str(_yy(i))) &&产生r 序列&&
_前置期需求量dl=_前置期需求量dl + _yy(i) &&将_dl+_yy(i)的值赋予给_dl&& Endfor &&结束循环&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
Repl tk with _tk &&将_tk的值替换给tk&&
repl 需求速率随机数序列 With _stringx &&将_steingx的值替换给需求随机数序列&&
repl r序列 With _stringy &&将_stringy的值替换给r 序列&&
repl 前置期需求量dl with _前置期需求量dl &&将_前置期需求量dl 的值替换给前置期需求量dl&&
skip &&记录移动&&
enddo &&结束循环&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
thisform.refresh &&刷新表单&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
for i= 1 to 100 &&让i 从1到100进行100次循环&& go I &&指针指向1&&
_r = _r + 前置期需求量dl/tk &&将_r+前置期需求量dl/_tk的值赋予_r&& Endfor &&结束循环&&
_r=_r/100 &&将_r/100的值赋予给_r&&
thisform.text3.value=_r &&将_r的数值赋予给text3&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
thisform. Refresh &&刷新表单&&
(5)密度分布计算程序:
dimension _sdl(100),_pdl(100) &&建立一个100*100维的数组&&
sele 模拟过程数据表 &&打开“模拟过程”表&& for i=1 to 100 &&开始执行100次循环&&
go i &&
_dl=dl &&
calculate cnt() for dl=_dl to _sdl(i) &&
endfor &&
for i=1 to 100 &&
go i &&
repl sdl with _sdl(i) &&
repl fdl with _sdl(i)/100 &&
endfor &&
for i=1 to 100 &&
go i &&
_dl=dl &&
calculate cnt() for dl
endfor &&
for i=1 to 100 &&
go I &&
repl pdl with _pdl(i)/100 &&
endfor &&
thisform.refresh &&
(6)p_Qk对照表程序:
sele pqk对照表 &&
zap &&
sele 模拟过程数据表 &&
指针指向i&& 将dl 的值赋予给_dl&& 计算“模拟过程”表中dl 与_dl相等的个数,并将其个数值存入_sdl中(即计算频次)&& 结束循环&& 让i 从1至100进行100次循环&& 指针指向第i 行&& 将sdl 的值替换为_sdl的值&& 将_fdl除以100的值的值替换给fdl && 结束循环&& 让i 从1至100进行100次循环&& 指针指向i&& 将dl 的值赋予给_dl&& 计算“模拟过程”表中dl 小于等于 _dl的个数,并将其个数值存入_pdl中(即计算概率密度(第一类服务水平))&& 结束循环&& 让i 从1至100进行100次循环&& 指针指向i&& 将_pdl除以100的值的值替换给pdl && 结束循环&& 刷新表单&& 打开“pqk 对照表”&& 一次性记录表中物理删除&& 打开“模拟过程数据表”&&
go 1 &&绝对移动到首指针&&
_p=概率密度pdl &&将概率密度pdl 的值赋给_p&&
_q=前置期需求量dl &&将前置期需求量pdl 的值赋给_q&&
do while .not. eof() &&只要记录指针没到文件尾就一直循环&& sele pqk对照表 &&打开“pqk 对照表”&&
loca for 库存满足率pdl=_p &&当库存满足率pdl 的值=_p得值时&& if not found() &&如果没有寻找到&&
append blank &&添加一条空记录&&
repl 库存满足率pdl with _p ,订货点qk with _q &&替换语句&&
endif &&结束if 循环&&
sele 模拟过程数据表 &&打开“模拟过程数据表”&&
skip &&相对移动&&
_p=概率密度pdl &&将概率密度pdl 的值赋给_p&&
_q=前置期需求量dl &&将前置期需求量dl 的值赋给_q&&
Enddo &&结束do 循环&&
report form pq preview &&形成“pq ”报表&&
6.4 输出库存满意率为1时的订货点Q k
库存满足率为1时的订货点Qk, 如图
9
图9 库存满足率为1时的订货点Qk
库存控制策略:当满意率为1时,订货点Qk 为11,一次订货费用C0为2,单位保管费用C1为2,订货批量Q*为2.01
6.5 pq报表
pq报表如图
10
图10 pq报表
第七章.课设感想
此次库存控制技术课程设计我们历时两个星期,通过这些天库存控制技术课程设计,让我很好的复习了老师在课堂上讲的知识,也让我对VFP 有了重新的认识。在做系统的过程中,不能急于求成,俗话说的好,不能一口吃成一个胖子,要慢慢做,认真做,慢慢来,少出错。在做表的时候,需要输入很多的数据,稍有不慎,就会出错,所以,就
要认真,专心的输入;库存控制是仓储管理的一个重要组成部门。它是在满足顾客服务要求的前提下通过对企业的库存水平进行控制,力求尽可能降低库存水平、提高物流系统的效率,以提高企业的市场竞争力。
第八章.参考文献
[1] 赵晓波,黄四民. 库存管理[M].北京:清华大学出版社,2008.
[2] 胡明. Visual Foxpro中表单之间的参数传递. 电脑学习.2009(1):1-2
[3] 宫丽娟. 基金选择决策的蒙特卡洛模拟[D].北京:对外经济贸易大学,2007