资源描述
数学建模之超市收费系统问题小作业一
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
课程设计题目超市收费系统
摘要
一小超级市场有 4 个付款柜,每个柜台为一位顾客计算货款数的时间与顾客所购商品件数成正比(大约每件费时1s),20%的顾客用支票或信用卡支付,这需要1.5min,付款则仅需0.5min 。有人倡议设一个快速服务台专为购买8个或8个以下商品的顾客服务,指定另外两个为“现金支付柜"。
请你建立一个模拟模型,用于比较现有系统和倡议的系统的运转.假设顾客到达平均间隔时间是 0。5min ,顾客购买商品件数按如下频率表分布。
件数
9~19
20~29
30~39
40~49
相对频率
0。12
0.10
0。18
0。28
0.20
0.12
根据题目要求建立模型并求解,应用MATLAB求解。
关键词:MATLAB 模拟模型
一、模型的分析
1.步骤
(1)分析问题,收集资料。需要搞清楚问题要达到的目标,根据问题的性质收集有关随机性因素的资料。这里用得较多的知识为概率统计方面。在这个阶段,还应当估计一下待建立的模拟系统的规模和条件,说明哪些是可以控制的变量,哪些是不可控制的变量。
(2)建立模拟模型,编制模拟程序。按照一般的建模方法,对问题进行适当的假设。也就是说,模拟模型未必要将被模拟系统的每个细节全部考虑。模拟模型的优劣将通过与实际系统有关资料的比较来评价。如果一个“粗糙”的模拟模型已经比较符合实际系统的情况,也就没有必要建立费时、复杂的模型。当然,如果开始建立的模型比较简单,与实际系统相差较大,那么可以在建立了简单模型后,逐步加入一些原先没有考虑的因素,直到模型达到预定的要求为止。编写模拟程序之前,要现画出程序框图或写出算法步骤。然后选择合适的计算机语言,编写模拟程序.
(3)运行模拟程序,计算结果.为了减小模拟结果的随机性偏差,一般要多次运行模拟程序,还有就是增加模拟模型的时段次数.
(4)分析模拟结果,并检验。模拟结果一般说来反映的是统计特性,结果的合理性、有效性,都需要结合实际的系统来分析,检验。以便提出合理的对策、方案。
以上步骤是一个反复的过程,在时间和步骤上是彼此交错的。比如模型的修改和改进,都需要重新编写和改动模拟程序。模拟结果的不合理,则要求检查模型,并修改模拟程序。
2.控制模拟时间的方法:
(1)固定时间增量法,是选用一段合适的时间作单位,然后每隔一个单位时间就计算一次有关参数的值,到达预定的模拟时间后,模拟程序结束。在编写这种程序时,一般可以建立一个“模拟时钟”变量。程序的主体框架一般是个大的循环,循环变量,则为模拟时间;在每个循环体内,就是对每个时段作处理.例如,有些排队论模型,可能就是以每隔一段时间(一天或者一个月)进行处理。
(2)可变时间增量法,模拟也有一个“模拟时钟"变量,但它是在一个事件发生时,“模拟时钟”才向前推进。需要注意的是,该模拟方法每一步经过的时间是可变的,而且会自动寻找下一个最早使系统状态发生变化的事件.整个模拟直到“模拟时钟"到达指定的时间长度为止.可以参考有关离散系统仿真的内容。
渡口模型:一个渡口的渡船营运者拥有一只甲板长32米,可以并排停放两列车辆的渡船。他在考虑怎样在甲板上安排过河车辆的位置,才能安全地运过最多数量的车辆。
分析:怎样安排过河车辆,关心一次可以运多少辆各类车。
准备工作: 观察数日,发现每次情况不尽相同,得到下列数据和情况:
(1) 车辆随机到达,形成一个等待上船的车列;
(2) 来到车辆,轿车约占40%,卡车约占55%,摩托车约占5%;
(3) 轿车车身长为3。5~5.5米,卡车车身长为8~10米。
二、问题分析
这是一个机理较复杂的随机问题,是遵循“先到先服务”的随机排队问题。
解决方法:采用模拟模型方法。因此需考虑以下问题:
(1) 应该怎样安排摩托车?
(2) 下一辆到达的车是什么类型?
(3) 怎样描述一辆车的车身长度?
(4) 如何安排到达车辆加入甲板上两列车队中的哪一列中去?
本实验主要模拟装载车辆的情况,暂时不考虑渡船的安全。
三、模型建立
设到达的卡车、轿车长度分别为随机变量。结合实际,这里不妨假设卡车、轿车的车身长度均服从正态分布.
由于卡车车身长为8~10m,所以卡车车长的均值为m,由概率知识中的“"原则,其标准差为,所以得到。同理可得。
四、模拟程序设计
由以上的分析,程序设计时的应划分的主要模块(函数)如下:
确定下一辆到达车辆的类型;
根据车的类型确定到达车辆的长度;
根据一定的停放规则,确定放在哪一列。
五、模拟程序
function sim_dukou %渡口模型的模拟
n=input('输入模拟次数:');
if isempty(n) | (n<500)
n=500;
end
N=zeros(1,3);%依次为摩托车数量、卡车数量、轿车数量
for i=1:n
isfull=0;
L=[0 ,0]; %第一列长度,第二列长度
while ~isfull
t=rand; %模拟下一辆到达车的类型
if t〈=0。55,
id=1; %到达卡车
elseif t〈0。95,
id=2; %到达轿车
else
id=3; %到达摩托车
end
N(id) = N(id) + 1;
newlen=getlength(id);
[isfull,pos]=getiffull(L,newlen);
if ~isfull
L(pos)=L(pos)+newlen;
end%if
end%while
end%for
disp(’平均每次渡船上的车数’)
mean_n=N/n
function len=getlength(id) %根据车的类型,产生车长随机数
switch id
case 1
len=min([4.5 + randn*(1/3), 5.5]);
case 2
len=min([9 + randn*(1/3),10]);
case 3
len=0; %根据放置方法,可以不予考虑
end
function [full,pos]=getiffull(L,newlen) %增加车长为len后是否可行(是否满),pos表示加到那一列去
full=0;
pos=0;
if L(1)〉L(2)
if L(1)+newlen〈32
pos=1;
elseif L(2)+newlen〈32
pos=2;
else
full=1;
end
else
if L(2)+newlen<32
pos=2;
elseif L(1)+newlen<32
pos=1;
else
full=1;
end
end
六、模型求解结果及分析
(一)运行结果
程序名为sim_dukou,运行程序,输出结果如下:
sim_dukou
输入模拟次数:1000
平均每次渡船上的车数
mean_n =
5.4840 3。9180 0。5160
(二)结果分析
上面为运行一次模拟程序,模拟次数为1000次的模拟结果.从模拟结果,你能得出什么结论?
发现摩托车的平均数量不到1辆,因此从另外一方面看,忽略摩托车的长度是合理的。统计结果显示平均每次渡口时船上卡车、轿车、摩托车数量分别为5.484、3.918、0。516辆。
参考代码:
clear
gds(1)=ceil(exprnd(30));
fw(1)=time;
fwjs=zeros(4,3000);
fwjs(1,1)=gds(1)+fw(1);
dh(1)=fw(1);
for i=2:4
gds(i)=gds(i—1)+ceil(exprnd(30));
fw(i)=time;
fwjs(i,1)=gds(i)+fw(i);
dh(i)=fw(i);
end
i=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));
end
js1.m文件:
t=rand;
if t<0.12
a=randperm(8);
js=a(1);
elseif t<0。22
a=randperm(11);
js=a(1)+8;
elseif t<0.4
a=randperm(10);
js=a(1)+19;
elseif t〈0。68
a=randperm(10);
js=a(1)+29;
elseif t<0.88
a=randperm(10);
js=a(1)+39;
else
t1=rand;
if t1<0。5
js=50;
elseif t1〈0.5+0。5^2;
js=51;
elseif t1<0。5+0.5^2+0.5^3;
js=52;
elseif t1<0.5+0。5^2+0.5^3+0.5^4;
js=53;
elseif t1〈0.5+0。5^2+0.5^3+0.5^4+0。5^5;
js=54;
elseif t1〈0。5+0.5^2+0。5^3+0。5^4+0。5^5+0。5^6;
js=55;
elseif t1<0.5+0。5^2+0。5^3+0.5^4+0.5^5+0。5^6+0.5^7;
js=56;
elseif t1<0。5+0.5^2+0。5^3+0。5^4+0.5^5+0.5^6+0。5^7+0.5^8;
js=57;
elseif t1<0。5+0.5^2+0.5^3+0。5^4+0。5^5+0.5^6+0。5^7+0.5^8+0。5^9;
js=58;
elseif t1<0.5+0.5^2+0。5^3+0。5^4+0.5^5+0。5^6+0.5^7+0。5^8+0.5^9+0.5^10;
js=59;
else
js=60;
end
end
js
paidui.m文件:
function [dh,fwjs]=paidui(fwjs,gds,fw)
for l=1:4
fwjs1=fwjs(l,find(fwjs(l,:)>0));
j=1;
while j<length(fwjs1)
if gds〉=fwjs1(j)&gds<fwjs1(j+1);
dc(l)=length(fwjs1)—j;
break
end
j=j+1;
end
if gds〉fwjs1(length(fwjs1))
dc(l)=0;
end
if length(fwjs1)==1
if gds>fwjs1(1)
dc(l)=0;
else
dc(l)=1;
end
end
end
[k,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=time
t=rand;
if t〈0.12
a=randperm(8);
js=a(1);
elseif t<0.22
a=randperm(11);
js=a(1)+8;
elseif t〈0。4
a=randperm(10);
js=a(1)+19;
elseif t〈0.68
a=randperm(10);
js=a(1)+29;
elseif t〈0。88
a=randperm(10);
js=a(1)+39;
else
t1=rand;
if t1〈0。5
js=50;
elseif t1〈0.5+0.5^2;
js=51;
elseif t1〈0.5+0。5^2+0.5^3;
js=52;
elseif t1<0。5+0。5^2+0.5^3+0.5^4;
js=53;
elseif t1〈0.5+0.5^2+0.5^3+0.5^4+0。5^5;
js=54;
elseif t1〈0。5+0。5^2+0。5^3+0。5^4+0.5^5+0。5^6;
js=55;
elseif t1〈0。5+0。5^2+0.5^3+0。5^4+0.5^5+0.5^6+0。5^7;
js=56;
elseif t1〈0。5+0。5^2+0。5^3+0。5^4+0。5^5+0。5^6+0。5^7+0.5^8;
js=57;
elseif t1<0.5+0。5^2+0.5^3+0。5^4+0。5^5+0。5^6+0。5^7+0。5^8+0。5^9;
js=58;
elseif t1〈0.5+0.5^2+0.5^3+0。5^4+0。5^5+0。5^6+0。5^7+0.5^8+0.5^9+0.5^10;
js=59;
else
js=60;
end
end
t=rand;
if t〈=0。2
t2=90;
else
t2=30;
end
t0=js+t2;
12
七、参考文献
【1】 傅鹏,龚肋,刘琼荪,何中市.数学实验室【M】.北京:科学出版社,2000.
【2】 谭永基,俞文呲。数学建模【M】.上海:复旦大学出版社,1997.
【3】 杨启凡,数学建模【M】。杭州:浙江大学出版社,2000。
【5】 于秀林,任雪松.多元统计分析[M].北京:中国统计出版社,1999。8.P154
【6】 王树禾.数学建模基础【M】.合肥:中国科学技术大学出版社,1996。
【7】 赵静,但琦.数学建模与数学试验【M】。3版.北京:高等教育出版社,2008。
符号计算系统Mathematica教程 张韵华编著 北京:科学出版社,2001 SPSS实用教程 阮桂海主编;蔡建平等编著 北京:电子工业出版社,2000
数学建模实验 周义仓,赫孝良编 西安:西安交通大学出版社,1999 数学建模竞赛赛题简析与论文点评:西安交大近年参赛论文选编 赫孝良等[选编] 西安: 西安交通大学出版社,2002
数学建模案例分析 白其峥主编 北京:海洋出版社,2000
数学建模案例精选 朱道元等编著 北京:科学出版社,2003
数学建模导论 陈理荣主编 北京:北京邮电大学出版社,1999
展开阅读全文