排队论模型的monteCarlo法仿真

  • 一.问题的提出
  • 二.问题的分析
  • 三.代码实现
  • 四.结果

在我们的生活中,排队的现象几乎处处可见。看似毫无规则的排队模型其实里面蕴藏者很大的学问。比如说在一般的排队问题中,人们到达某个地方的时间间隔近似服从指数分布。而这篇博文的目的就是为了找出蕴藏在排队论中的一般规律,用monteCarlo法找到我们想要的结果。

一.问题的提出

​ 在某个银行的窗口只有一个服务窗口,工作人员逐个接待顾客。当顾客的数目比较多的时候需要排队等待。此时我们可以假设第iii个顾客和第i−1i-1i−1个顾客到来的间隔时间xi∼E(0.1)x_i \sim E(0.1)xi​∼E(0.1),即是服从参数为0.10.10.1的指数分布。而第iii个顾客的服务时间服yiy_iyi​从均值为101010,方差为222的正态分布(单位为minminmin,少于1minminmin按1minminmin算。)排队依靠先到先得的原则,不限制队伍长度,每天的工作时间为888小时(480min480min480min)。模拟求出一年内平均的日接待客户的个数和日平均等待时间。

二.问题的分析

​ 让我门对一天之内的排队过程进行一个细致的分析。做出以下的符号假设:

​ 若设CiC_iCi​:第iii个顾客的到达时刻,那么任意两个顾客之间的到达时间间隔就服从泊松分布:
Ci=Ci−1+xix∼E(0.1)C_i = C_{i-1}+x_i\\ x\sim E(0.1) Ci​=Ci−1​+xi​x∼E(0.1)
​ 其中第一个顾客到来之前没有人来,所以C0=0C_0 = 0C0​=0。

​ 再设BiB_iBi​:第iii个顾客来办理业务的时刻,注意因为可能需要排队,所以BiB_iBi​可能不等于CiC_iCi​。

​ 然后再设EiE_iEi​:第iii个顾客办理完业务的时刻。所以有:
Ei=Bi+yiyi∼N(10,2)(yi=1,ifyi≤1)E_i = B_i+y_i\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \qquad y_i \sim N(10,2)(y_i = 1,\ if \quad y_i \leq 1) Ei​=Bi​+yi​                       yi​∼N(10,2)(yi​=1, ifyi​≤1)
​ 其中第iii个顾客办理业务必须得在自己来了之后等上一个人弄完,否则就无法办理业务。说明:
Bi=max{Ei−1,Ci}B_i = max\{E_{i-1},C_i\} Bi​=max{Ei−1​,Ci​}
​ 对于第一个人来说到了就可以马上办理业务:B1=C1B_1 = C_1B1​=C1​。

​ 执行以上的迭代知到Bi≥480B_i\geq480Bi​≥480为止。求出此时的iii作为平均等待人数。

​ 此时的平均等待时间为:
Ti=480miniT_i = \frac{480 min}{i} Ti​=i480min​

​ 因此我们可以仿真365天每天的结果用monteCarlo方法求出平均等待时间和平均等待人数。
T‾=1365∑j=1365Tji‾=1365∑j=1365ij\overline T = \frac{1}{365}\sum_{j = 1}^{365}T_j\\ \overline i = \frac{1}{365}\sum_{j = 1}^{365}i_j T=3651​j=1∑365​Tj​i=3651​j=1∑365​ij​

三.代码实现

%基于排队论模型的montecarlo方法应用
clc,clear;
days = 365;%一年有365天
peopleNumbers = zeros(1,days);
waitTime = zeros(1,days);
for j = 1:daysx(1) = exprnd(10);%x(i):第i-1个顾客和第i个顾客到达时间的间隙c0 = 0;%c(i):第i个顾客到达的时间c(1) = c0+x(1);b(1) = c(1);%b(i):第i个顾客开始服务的时间y(1) = normrnd(10,2);%y(i):第i个顾客持续服务的时间e(1) = b(1)+y(1);%e(i):第i个顾客结束服务的时间i = 1;while b(i)<=480%一天工作8小时i = i+1;x(i) = exprnd(10);y(i) = normrnd(10,2);if y(i) <= 1y(i) = 1;endc(i) = c(i-1)+x(i);b(i) = max(c(i),e(i-1));e(i) = y(i) + b(i);endpeopleNumbers(j) = i - 1;waitTime(j) = 480/peopleNumbers(j);
end
hold on
grid on
for j = 1:dayspeopleNumbersAll(j) = sum(peopleNumbers(1:j))/j;waitTimeAll(j) = sum(waitTime(1:j))/j;
end
plot(1:days,peopleNumbersAll,'r-');
plot(1:days,waitTimeAll,'b-');
xlabel('时间/天');
ylabel('日均等待时间/等待人数');
legend('日均等待人数','日均等待时间');
disp('这一年内的平均等待人数:');
disp(sum(peopleNumbers)/days);
disp('这一年内人们的平均等待时间:');
disp(sum(waitTime)/days);
hold off

四.结果

%这一年内的平均等待人数:%  42.8027%这一年内人们的平均等待时间:
%   11.3253

每天的等待人数和等待时间如下:

用大数定律求得的平均等待时间的进化过程为:

排队论模型的monteCarlo法仿真相关推荐

  1. 【仿真设计】仿真技术在智能制造中的作用;智能制造难点在模型,焦点在仿真;汽车行业CAE研究

    仿真的概念 仿真从字面意思来理解,也就是模仿真实的环境.通常在仿真领域分为大概六种: 传统的CAE仿真:比如对机构受力的3D模拟,找出机构设计的可能存在的缺陷及极限 系统仿真:俗称物流仿真,是对生产等 ...

  2. SimMechanics/Second Generation倒立摆模型建立及初步仿真学习

    笔者最近捣鼓Simulink,发现MATLAB的仿真模块真的十分强大,以前只是在命令窗口敲点代码,直到不小心敲入simulink,就一发不可收拾.话说simulink的模块化建模确实方便,只要拖拽框框 ...

  3. matlab传函零极点形式,2013实验一 MATLAB 中控制系统模型的建立与仿真

    实验一 MATLAB 中控制系统模型的建立与仿真 一. 实验目的 (1)熟悉MATLAB 控制系统工具箱中线性控制系统传递函数模型的相关函数. (2)熟悉SIMULINK 模块库,能够使用SIMULI ...

  4. 散射回波仿真Matlab,基于散射中心模型的ISAR回波仿真方法

    1引言传统的成像雷达目标回波仿真采用全姿态角一维距离像建立模板库进行目标回波仿真,实时性较差,而且需要相当大的存储量.对于宽带ISAR而言,其真实回波信号包含着非常丰富的信息,仅依靠一维距离像模型进行 ...

  5. 机械臂机器人——使用Matlab Robotic ToolBox建立四轴机械臂模型并实现运动控制仿真

    文章目录 四轴机械臂实物 Robotic ToolBox机械臂建模 1.建立机械臂的D-H表 建立机械臂坐标系 根据坐标系建立D-H表 2.代码建模 机械臂运动学仿真 1.正运动学仿真 2.逆运动学仿 ...

  6. 排队论模型(七):排队系统的优化

    排队论模型(一):基本概念.输入过程与服务时间的常用概率分布 排队论模型(二):生灭过程 . M / M /s 等待制排队模型.多服务台模型 排队论模型(三):M / M / s/ s 损失制排队模型 ...

  7. 评价类模型——层次分析法

    评价类模型--层次分析法 注:以下故事纯属虚构,部分背景及人物姓名设定借用<你好,旧时光>这部剧,但与原剧基本无关,如有情节雷同,纯属巧合. Q:余周周同学遇到三位追求者,这三位候选人分别 ...

  8. Fluent常用模型介绍-流体模拟仿真ansys

    Fluent常用模型介绍-流体模拟仿真ansys FLUENT是ANSYS CFD的核心求解器,其拥有广泛的用户群.ANSYS Fluent的主要特点如下. 1.湍流和噪声模型 FLUENT的湍流模型 ...

  9. 基于matlab的电机运行分析,电机模型分析及拖动仿真:基于MATLAB的现代方法

    第1章绪论 1.1MATLAB概述 1.2Simulink平台与MATLAB工具箱 1.2.1Simulink平台 1.2.2MATLAB工具箱 1.2.3SimPowerSystems工具箱 1.3 ...

最新文章

  1. 在Win 8.1上安装配置FlashDevelop5.0.0
  2. 《Lancet》发表全球学者联合声明!
  3. 零基础Java学习之final关键字
  4. docker基础---数据卷volumes
  5. 【Matlab 控制】矩阵、图像操作基础
  6. ztree 点击重载 layui table
  7. Linux基本的网络配置
  8. SU sunmo命令学习
  9. Coolite 基本用法(3)
  10. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
  11. 如何访问docker内php,如何进入docker容器
  12. Visual Studio 2013 突然不高亮,编译报错
  13. zabbix3.0 监控mysql服务器性能实现过程
  14. linux 远程脚本批量 scopy文件
  15. 9月29日 卷积神经网络的发展历程
  16. oracle临时表怎么删除吗,删除Oracle临时表
  17. arm汇编 bic和orr指令
  18. 吴晓波:预见2021(跨年演讲 —— 02 “云上中国”初露峥嵘)
  19. 八大资管业务类型汇总
  20. IDEA不同颜色文件代表的意思

热门文章

  1. 使用Intent启动常用的应用与服务
  2. look与look like
  3. lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP
  4. mybatis+oracle批量插入报不符合协议和sql未正确结束
  5. Python黑帽编程2.7 异常处理
  6. 日期处理string 与 DateTime相互转化
  7. java B2B2C 仿淘宝电子商城系统-基于Rabbitmq实现延迟消息
  8. 理解去中心化稳定币DAI
  9. appium 环境配置
  10. Linux系统中CPU忙闲的衡量——load和idle