1、超市收费系统问题超市收费系统问题一、实验目的与意义1. 练习模拟模型的建立过程;2. 进一步熟悉模拟算法的设计、编程问题。二、实验要求1. 熟练应用 Matlab 的随机变量的模拟函数;2. 加强离散系统模拟算法的分析和设计训练;3. 提高 Matlab 的编程应用技能。三、题目内容描述: 一小超级市场有4个付款柜,每个柜台为一位顾客计算货款数的时间与顾客所购商品件数成正比(大约每件费时1s),20%的顾客用支票或信用卡支付,这需要1.5min,付款则仅需0.5min。有人倡议设一个快速服务台专为购买8个或8个以下商品的顾客服务,指定另外两个为“现金支付柜”。 请你建立一个模拟模型,用于比较现
2、有系统和倡议的系统的运转。假设顾客到达平均间隔时间是0.5min,顾客购买商品件数按如下频率表分布。件数919202930394049相对频率0.120.100.180.280.200.12四、问题分析 这是一个机理较复杂的随机问题,是遵循“先到先服务”的随机排队问题。解决方法:采用模拟模型方法。因此需考虑以下问题: (1) 应该怎样安排摩托车? (2) 下一辆到达的车是什么类型? (3) 怎样描述一辆车的车身长度? (4) 如何安排到达车辆加入甲板上两列车队中的哪一列中去? 本实验主要模拟装载车辆的情况,暂时不考虑渡船的安全。五、建立模型 设到达的卡车、轿车长度分别为随机变量。结合实际,这里
3、不妨假设卡车、轿车的车身长度均服从正态分布。 由于卡车车身长为810m,所以卡车车长的均值为m,由概率知识中的“”原则,其标准差为,所以得到。同理可得。六、模拟方法介绍1、步骤 (1)分析问题,收集资料。需要搞清楚问题要达到的目标,根据问题的性质收集有关随机性因素的资料。 这里用得较多的知识为概率统计方面。 在这个阶段, 还应当估计一下待建立的模拟系统的规模和条件, 说明哪些是可以控制的变量,哪些是不可控制的变量。 (2)建立模拟模型,编制模拟程序。按照一般的建模方法,对问题进行适当的假设。 也就是说, 模拟模型未必要将被模拟系统的每个细节全部考虑。 模拟模型的优劣将通过与实际系统有关资料的比
4、较来评价。 如果一个“粗糙”的模拟模型已经比较符合实际系统的情况,也就没有必要建立费时、复杂的模型。当然,如果开始建立的模型比较简单, 与实际系统相差较大, 那么可以在建立了简单模型后, 逐步加入一些原先没有考虑的因素, 直到模型达到预定的要求为止。 编写模拟程序之前, 要现画出程序框图或写出算法步骤。 然后选择合适的计算机语言,编写模拟程序。 (3)运行模拟程序,计算结果。为了减小模拟结果的随机性偏差,一般要多次运行模拟程序,还有就是增加模拟模型的时段次数。 (4)分析模拟结果,并检验。模拟结果一般说来反映的是统计特性,结果的合理性、 有效性, 都需要结合实际的系统来分析, 检验。 以便提出
5、合理的对策、方案。以上步骤是一个反复的过程, 在时间和步骤上是彼此交错的。 比如模型的修改和改进, 都需要重新编写和改动模拟程序。 模拟结果的不合理, 则要求检查模型,并修改模拟程序。2控制模拟时间的方法: (1)固定时间增量法,是选用一段合适的时间作单位,然后每隔一个单位时间就计算一次有关参数的值, 到达预定的模拟时间后, 模拟程序结束。 在编写这种程序时, 一般可以建立一个“模拟时钟”变量。 程序的主体框架一般是个大的循环,循环变量,则为模拟时间;在每个循环体内,就是对每个时段作处理。例如, 有些排队论模型,可能就是以每隔一段时间(一天或者一个月)进行处理。 (2)可变时间增量法,模拟也有
6、一个 “模拟时钟”变量,但它是在一个事件发生时,“模拟时钟”才向前推进。 需要注意的是,该模拟方法每一步经过的时间是可变的, 而且会自动寻找下一个最早使系统状态发生变化的事件。 整个模拟直到“模拟时钟”到达指定的时间长度为止。可以参考有关离散系统仿真的内容。七、模拟程序设计 由以上的分析,程序设计时的应划分的主要模块(函数)如下: 1.确定下一辆到达车辆的类型; 2.根据车的类型确定到达车辆的长度; 3.根据一定的停放规则,确定放在哪一列。八、模拟程序function sim_dukou%渡口模型的模拟n=input(输入模拟次数:);if isempty(n) | (n500) n=500;
7、endN=zeros(1,3);%依次为摩托车数量、卡车数量、轿车数量for i=1:n isfull=0; L=0 ,0;%第一列长度,第二列长度 while isfull t=rand; %模拟下一辆到达车的类型if t=0.55, id=1; %到达卡车elseif tL(2) if L(1)+newlen32 pos=1; elseif L(2)+newlen32 pos=2; else full=1; endelse if L(2)+newlen32 pos=2; elseif L(1)+newlen32 pos=1; else full=1; end end九、模型求解结果及分析(
8、一)运行结果程序名为sim_dukou,运行程序,输出结果如下:sim_dukou输入模拟次数:1000平均每次渡船上的车数mean_n = 5.4840 3.9180 0.5160(二)结果分析上面为运行一次模拟程序,模拟次数为1000次的模拟结果。从模拟结果,你能得出什么结论?发现摩托车的平均数量不到1辆,因此从另外一方面看,忽略摩托车的长度是合理的。统计结果显示平均每次渡口时船上卡车、轿车、摩托车数量分别为5.484、3.918、0.516辆。参考代码:cleargds(1)=ceil(exprnd(30);fw(1)=time;fwjs=zeros(4,3000);fwjs(1,1)=
9、gds(1)+fw(1);dh(1)=fw(1);for i=2:4gds(i)=gds(i-1)+ceil(exprnd(30);fw(i)=time;fwjs(i,1)=gds(i)+fw(i);dh(i)=fw(i);endi=5;gds(i)=gds(i-1)+ceil(exprnd(30);while gds(i)=8*60*60 fw(i)=time; dh(i),fwjs2=paidui(fwjs,gds(i),fw(i); fwjs=fwjs2; i=i+1; gds(i)=gds(i-1)+ceil(exprnd(30);endjs1.m文件:t=rand;if t0.12
10、a=randperm(8); js=a(1);elseif t0.22 a=randperm(11); js=a(1)+8;elseif t0.4 a=randperm(10); js=a(1)+19;elseif t0.68 a=randperm(10); js=a(1)+29;elseif t0.88 a=randperm(10); js=a(1)+39;else t1=rand; if t10.5 js=50; elseif t10.5+0.52; js=51; elseif t10.5+0.52+0.53; js=52; elseif t10.5+0.52+0.53+0.54; js=
11、53; elseif t10.5+0.52+0.53+0.54+0.55; js=54; elseif t10.5+0.52+0.53+0.54+0.55+0.56; js=55; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57; js=56; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57+0.58; js=57; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57+0.58+0.59; js=58; elseif t10); j=1; while j=fwjs1(j)&gdsfwj
12、s1(length(fwjs1) dc(l)=0; end if length(fwjs1)=1 if gdsfwjs1(1) dc(l)=0; else dc(l)=1; end endendk,s=min(dc);fwjs2=fwjs(s,find(fwjs(s,:)0);fwjs(s,length(fwjs2)+1)=max(fwjs(s,length(fwjs2)-gds,0)+gds+fw;dh=fwjs(s,length(fwjs2)+1)-gds;time.m文件:function t0=timet=rand;if t0.12 a=randperm(8); js=a(1);els
13、eif t0.22 a=randperm(11); js=a(1)+8;elseif t0.4 a=randperm(10); js=a(1)+19;elseif t0.68 a=randperm(10); js=a(1)+29;elseif t0.88 a=randperm(10); js=a(1)+39;else t1=rand; if t10.5 js=50; elseif t10.5+0.52; js=51; elseif t10.5+0.52+0.53; js=52; elseif t10.5+0.52+0.53+0.54; js=53; elseif t10.5+0.52+0.53
14、+0.54+0.55; js=54; elseif t10.5+0.52+0.53+0.54+0.55+0.56; js=55; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57; js=56; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57+0.58; js=57; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57+0.58+0.59; js=58; elseif t10.5+0.52+0.53+0.54+0.55+0.56+0.57+0.58+0.59+0.510; js=59; else js=60; endendt=rand;if t=0.2 t2=90;else t2=30;endt0=js+t2; 参考文献 1 杨启凡,数学建模M.杭州:浙江大学出版社,2000 2姜启源.谢金星.叶俊.数学模型.高等教育出版社20033 雷功炎.数学模型讲义.北京大学出版社.20094韩中庚.马晓军.胡宗云.数学建模竞赛获奖论文精选与点评(第二卷). 科学出版社2013
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1