- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数学建模——理发店问题的蒙特卡洛仿真
数学建模课程设计
题目:理发店问题
学生:
一、课程设计题目
一个理发店有两位服务员 A 和 B,顾客们随机到达店内,其中 60% 的顾客仅剪发,每位花 5 分钟时
间;40% 的顾客既剪发又洗发,每位花 8 分钟时间。设计算法,利用计算机对理发店的服务情况进行模拟。并统计以下量:
1. 最大队列长度
2. 顾客平均等待
3. 顾客总等待时间
4. 平均队列长度
二、设计思路
利用蒙特卡洛模拟原理,利用计算机对以上排队问题进行模拟。蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。具体的,当系统中各个单元的可靠性特征量已知,但系统的可靠性过于复杂,难以建立可靠性预计的精确数学模型或模型太复杂而不便应用时,可用随机模拟法近似计算出系统可靠性的预计值;随着模拟次数的增多,其预计精度也逐渐增高。
蒙特卡洛模拟方法的原理是当问题或对象本身具有概率特征时,可以用计算机模拟的方法产生抽样结果,根据抽样计算统计量或者参数的值;随着模拟次数的增多,可以通过对各次统计量或参数的估计值求平均的方法得到稳定结论。
对于本题,我们假定顾客到达时间间隔服从均值为3min的指数分布,模拟一定数量顾客情况下理发店的排队状况。
三、设计代码
arrive_t=exprnd(3,10,1); %顾客到达时间
q=zeros(10,1);
t=zeros(10,1);
t0=zeros(10,1);
rannum=unifrnd(0,1,10,1);%产生均匀分布随机数
customer=zeros(10,1);%设定顾客
wait_time1=0;
wait_time2=0;
flag=0;%确定是否有人等待
for i=1:10%分出第一种和第二种状况
if(rannum(i,1)=0.6)
customer(i,1)=5;%只剪
else
customer(i,1)=8;%剪和洗
end
end
tf=0;
t(1,1)=tf+arrive_t(1,1);%到达时间
wait_time=0;%等待时间
t0(1,1)=t(1,1)+customer(1,1);%服务时间
q(1,1)=0;%队列长度
t(2,1)=t(1,1)+arrive_t(2,1);
t0(2,1)=t(2,1)+customer(2,1);
t(3,1)=t(2,1)+arrive_t(3,1);
if (t(3,1)t0(2,1)||t(3,1)t0(2,1))
t0(3,1)=t(3,1)+customer(3,1);
else
wait_time1=t0(1,1)-t(3,1);
wait_time2=t0(2,1)-t(3,1);
if (wait_time1wait_time2)
t0(3,1)=t(3,1)+wait_time2+customer(3,1);
wait_time=wait_time2;
else
t0(3,1)=t(3,1)+wait_time1+customer(3,1);
wait_time=wait_time1;
end
end
i=4;
while(i=10)
t(i,1)=t(i-1,1)+arrive_t(i,1);
q(i,1)=q(i-1,1)+1;
wait_time1=t0(i-1,1)-t(i,1);
wait_time2=t0(i-2,1)-t(i,1);
if (flag==0)
if (wait_time10)(wait_time20)
if wait_time1wait_time2
flag=1;
t0(i,1)=t(i,1)+wait_time2+customer(i,1);
wait_time=wait_time+wait_time2;
else
flag=1;
t0(i,1)=t(i,1)+wait_time1+customer(i,1);
wait_time=wait_time+wait_time1;
end
i=i+1;
el
文档评论(0)