蒙特卡洛模拟在随机存储问题中的应用_陈沂
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 变量假设 图1 图2 6.2 延迟时间累计频率散点图 (见图 2 ) s: 每单位货物的存储费用; e: 每次运送货 6.3 运用蒙特卡罗算法确定最佳定货点和 物的固定成本; d: 送货物的单位成本; d1: 单位 退货成本; q:货物的日需求量, 是随机变量; 最佳定货量 Qm: 仓库的最大存储量; N: 模拟运行天数; R: #include<stdio.h> #include<stdlib.h> 送货时仓库的库存货物量(定货点); Q: 每次最 #include<time.h> Q 10000 // 定义库存容量为 10000 佳订货量; p: 供货延迟期,是随机变量; C: 一周 #define #define M 100 // 模拟次数 #define N 100 // 模拟天数 期的费用总和; x,y [0,1]之间的随机数; c: 日平 double fun1(double x) // 需求子模型的逆线性样条 均费用。 { double q; 4 模型假设 if(x>=0.0&&x<0.01) q=(x+0.2)*5000.0; 仓库有一定的存货上限, 因此在货超出库 else if(x>=0.01&&x<0.03) 存的情况下,需要将货退回; 仓库在发出一张定 q=(x+0.2)*5000.0; else if(x>=0.03&&x<0.08) 单后再收到下一张定单之前不会在发定单; 货 q=(x+0.545)*2000.0; else if(x>=0.08&&x<0.20) 物能够连续分割; 缺货失销。 q=(x+1.42)*833.33; 5 运用蒙特卡罗模拟库存模型的子模型 else if(x>=0.20&&x<0.40) q=(x+2.5)*500.0; 5.1 运用蒙特卡罗模拟日需求量的子模型 else if(x>=0.40&&x<0.67) 5.1.1 求日需求量的累计频率 q=(x+3.515)*370.37;
要 :在一个随机库存模型中, 根据单位时间销售量以及提前期的统计数据运用蒙特卡洛模拟的方法得到该模型中需求子模型以及提前期
} void main() { int k,i,j,count=0,m=10; //count: count 小于提前期时表示进入非提前期,保证在 提前期不重复订货; double x=0.0,y=0.0,q=0.0,p=0.0,I=Q,d=1.0,d1=1.5,C=0. 0, c[M]={0.0}, min=100.0,Xbest=0.0,Rbest=0.0,s=2.0,e=20.0,X,Y; //d 为单位运货费用, d1 为退货单位费用, X 为订货量, Y 为订货点, Xbest 为最佳订货量, Ybest 为最佳订货点; for(i=0;i<M;i++) { srand(time(NULL)); X=rand()%10001; for(j=0;j<rand();j++) srand(time(NULL)); Y=rand()%10001; for(k=1;k<=N;k++) { srand(time(NULL)); x=rand()/32767.0; q=fun1(x); I=I-q; if(count==m) // 提前期到期, 补充货物 { count=0; if((I+X)<10000) C=C+X*d+e; if((I+X)>10000) C=C+(I+X-10000)*d1+(10000-I)*d; I=I+X; } if(I<=Y&&count<m) { if(count==0) { srand(time(NULL)); y=rand()/32767.0; p=fun2(y); m=int(p); } count++; } } c[i]=C/N; if(c[i]<min) { min=c[i]; Xbest=X;Ybest=R; } } printf("%f\t%f\t%f",min,Xbest,Rbest);
if(R>=0&&R<0.1) p=5.0*R+1.5; else if(R>=0.1&&R<0.35) p=4.0*R+1.6; else if(R>=0.35&&R<0.65) p=3.3*R+2.845; else if(R>=0.65&&R<0.85) p=5.0*R+0.75; else if(R>=0.85&&R<0.98) p=7.7*R-1.545; else if(R>=0.98&&R<1.00) p=50.0*R-43.0; return p;
Baidu Nhomakorabea
参考文献
5.1.2 利用[0,1]上的均匀分布随机数复制 各个需求区间的出现情况
[1] 《运筹学》 教材编写组.运筹学[M]. 北京:清华 大学出版社,2005:343-376. [2] 周鹏 . 基于混合智能算法的仓库有限容量下 2007 (4 ) : 74-76. 随机存贮模型[J].价值工程, [3]黄保和, 江弋.C 语言程序设计[M]. 北京: 清华 大学出版社, 2006: 80-259. 谢金星.数学建模[M].北京: 高等教育 [4]姜启源, 出版社, 2003: 275-278.
Â Ã Ä Å Æ Ç Á Â Ã Ä Å Æ Ç Á È É È É ! " # $ % " # $ % & ' (
科 技 论 坛
} } double fun2(double R) // 延迟时间的逆线性样条 { double p;
(厦门大学数学科学学院数学与应用数学系, 福建 厦门 361005 )
-68-
蒙特卡洛模拟在随机存储问题中的应用
陈 沂
摘
子模型, 最后再利用蒙特卡洛模拟得到最佳的订货点以及订货量。通过一个具体实例来阐释模拟方法。 关键词 :随机库存模型; (R,Q ) 策略; 蒙特卡洛模拟 5.1.3 需求子模型的蒙特卡罗近似 1 概述 由于随机单位时间需求量以及随机提前 期的因素,企业在库存管理时必须制定一个存 储策略来最小化成本,目前一般认为最为合理 的存储策略为(R,Q)策略, 即在库存到达一定的 下限 (订货点 ) 时订货, 在一段时间后货物到达, 然后开始一个新的销售周期,一般这段时间的 此外在实际订 长度也是随机变量, 即为提前期。 货的过程中还需考虑库存容量的问题。目前解 5.2 运用蒙特卡罗模拟延期时间的子模型: 决库存问题的方法种类很多,包括解析方法和 5.2.1 求延期时间的累计频率 由于销售行为的复杂性, 解析 计算机模拟方法。 方法的应用受到很大限制,一般是采用计算机 模拟随机销售行为的方法来得到最佳的 (y,Q ) 。 5.2.2 利用[0,1]上的均匀分布随机数复制 本文采用的是蒙特卡洛模拟的方法。 2 问题 各个需求区间的出现情况 应用一种存储策略, 当存储量达到一定水 平(定货点)时,发出最佳定货量的定单。并且仓 库有一定的存储上限,超过的货得退回,运用蒙 5.2.3 延迟时间子模型的蒙特卡罗近似 特卡罗模拟出这个过程, 以及合适的需求及延 迟时间的随机子模型,确定最佳定货点及最佳 定货数量。 6 用蒙特卡洛方法模拟存储过程 6.1 日需求量累计频率散点图 (见图 1 )
else if(x>=0.67&&x<0.85) q=(x+2.12)*555.55; else if (x>=0.85&&x<0.93) q=(x+0.47)*1250.0; else if(x>=0.93&&x<0.97) q=(x-0.23)*2500.0; else if(x>=0.97&&x<1.00) q=(x-0.6)*5000.0; return q;