学习清风蒙特卡罗排队论问题——学习笔记

问题: 假设某银⾏⼯作时间只有⼀个服务窗⼝,⼯作⼈员只能逐个的接待 顾客。当来的顾客较多时,⼀部分顾客就需要排队等待。

        假设:1) 顾客到来的间隔时间服从参数为0.1的指数分布 2) 每个 顾客的服务时间服从均值为10,⽅差为4的正态分布(单位为分钟,若 服务时间⼩于1分钟,则按1分钟计算) 3) 排队按先到先服务的规则, 且不限制队伍的⻓度,每天⼯作时⻓为8⼩时。

        试回答下⾯的问题:1) 模拟⼀个⼯作⽇,在这个⼯作⽇共接待了多 少客户,客户平均等待的时间为多少? 2) 模拟100个⼯作⽇,计算出 平均每⽇接待客户的个数以及每⽇客户的平均等待时⻓。

分析:

 

 符号引入:An+1=An+Xi

                   Ei+1=Bi+Yi

                   Bi=max\left \{ Ci ,Ei-1\right \}

 

 %%  代码部分(问题一)
 a=zeros(1,1000);       %每个客户到达时间初始化
 b=zeros(1,1000);       %每个客户开始办理业务时间初始化
 e=zeros(1,1000);       %每个客户办理业务结束时间初始化
 stary=zeros(1,1000);       %每个客户等待时间初始化
 i=1;      %接待客户数
 a(1)=exprnd(10);     %第一个客户到达时间赋值
 b(1)=exprnd(10);     %第一个客户开始办理业务时间赋值
 t=normrnd(10,2);     %办理业务的时长
     if t<1
         t=1;
     end
 e(1)=t;              %第一个客户办理业务结束时间赋值
 while (e(i)<=480)      %限制为一天,8个工作时长
     i=i+1;             %总客户加一
     a(i)=a(i-1)+exprnd(10);     %第i个客户到达时间赋值
     b(i)=max(e(i-1),a(i));      %第i个客户开始办理业务时间赋值
     if a(i)<e(i-1)
         stary(i)=b(i)-a(i);     %第i个客户的等待时长
     end
     t=normrnd(10,2);      
     if t<1
         t=1;
     end                    %第i个客户办理业务时长
     e(i)=b(i)+t;           %第i个客户办理业务结束时间
    
 end    
starysum=sum(stary);        %总的等待时长
average=starysum/i;         %每个客户平均等待时长
disp(['一天共接待的客户为:',num2str(i)]);
disp(['平均接待客户的时长为:',num2str(average)]);
%%   代码部分(问题二)
 tic
 a=zeros(100,1000);       %每个客户到达时间初始化
 b=zeros(100,1000);       %每个客户开始办理业务时间初始化
 e=zeros(100,1000);       %每个客户办理业务结束时间初始化
 stary=zeros(100,1000);       %每个客户等待时间初始化
 people=zeros(1,100);
 for day=1:10000            %第i天
      i=1;      %接待客户数
      a(day,i)=exprnd(10);     %第一个客户到达时间赋值
      b(day,1)=exprnd(10);     %第一个客户开始办理业务时间赋值
      t=normrnd(10,2);     %办理业务的时长
      if t<1
          t=1;
      end
      e(day,i)=t;              %第一个客户办理业务结束时间赋值
      while (e(day,i)<=480)      %限制为一天,8个工作时长
      i=i+1;             %总客户加一
      a(day,i)=a(day,i-1)+exprnd(10);     %第i个客户到达时间赋值
      b(day,i)=max(e(day,i-1),a(day,i));      %第i个客户开始办理业务时间赋值
      if a(day,i)<e(day,i-1)
         stary(day,i)=b(day,i)-a(day,i);     %第i个客户的等待时长
      end
      t=normrnd(10,2);      
      if t<1
         t=1;
      end                    %第i个客户办理业务时长
      e(day,i)=b(day,i)+t;           %第i个客户办理业务结束时间
      end
      people(1,day)=i;      %第day天办理业务总的客户人数
 end  
daypeople=mean(people);     %平均每天办理客户人数
starysum=sum(stary,2);      %每天客户等待时间总长
averagepeople=starysum./people';     %每天客户等待平均时长
w=mean(averagepeople);      %平均每天客户等待时长
disp(['每天平均接待客户人数:',num2str(daypeople)]);
disp(['每天平均客户等待时间:',num2str(w)]);
toc   %tic与toc中间代码运行总时长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值