随机服务系统模拟—R实现(三)
M/M/c随机服务系统的模拟
M/M/1服务系统:(1)队列长度没有限制;(2)顾客到达的时间间隔和服务时间均服从指数分布;(3)服务台数量为c。
一、M/M/c随机服务系统的模拟
在M/M/c排队系统中,服务台为c个。设系统的到达率为λ,每个用户的服务率为μ。当系统的用户数n>c时,用户离开的速率为cμ,(因为只有c个服务员),当n≤c时,用户离开速率为nμ(因为顾客数小于服务员数)。此时的系统状态(既系统中的用户数)转移图如下图所示。
1. 系统的理论绩效指标
模型参数符号说明
参数 | 平均到达率 | 平均服务率 | 系统服务强度 | 系统空闲概率 | 系统平均顾客数 | 队列平均人数 | 平均逗留时间 | 平均等待时间 |
---|---|---|---|---|---|---|---|---|
符号 | \(\lambda\) | \(\mu\) | \(\frac {\lambda}{c\times\mu}\) | \(P_0\) | \(L_s\) | \(L_q\) | \(W_s\) | \(W_q\) |
R计算程序
Lambda <-9
Mue <-4
c=3
Rho <- Lambda / Mue
P0inv <- Rho^c /(factorial(c)*(1-(Rho/c)))
for (i in 0:(c-1)) {
P0inv = P0inv +(Rho^i)/ factorial(i)
}
P0 =1/P0inv
Lq=P0*(Rho^c*Rho/c)/(factorial(c)*(1-(Rho/c))^2)
Wq =Lq/Lambda
Ls <- Lq+Rho
Ws <- Ls/Lambda
R计算结果
参数 | 平均到达率 | 平均服务率 | 系统服务强度 | 系统空闲概率 | 系统平均顾客数 | 队列平均人数 | 平均逗留时间 | 平均等待时间 |
---|---|---|---|---|---|---|---|---|
符号 | \(\lambda\) | \(\mu\) | \(\frac {\lambda}{c\times\mu}\) | \(P_0\) | \(L_s\) | \(L_q\) | \(W_s\) | \(W_q\) |
理论值 | 9 | 4 | 0.75 | 0.0748 | 3.9533 | 1.7033 | 0.4393 | 0.1893 |
2. 系统的R模拟仿真
R模型构建
library(dplyr)
library(simmer)
library(simmer.plot)
T0=10
T1=10000
lambda=9
mu=4
c=3
set.seed(1234)
## 建立模拟环境
bank <- simmer("bank")
## 用trajectory()建立顾客,并指定顾客的一系列活动
## seize()获取柜台服务资源,如果正在忙,就进入排队
## 服务时间用timeout指定,为了生成多个随机服务时间,
## timeout的参数是返回随机服务时间的而函数而不是时间值本身
customer <-
trajectory("顾客") %>%
seize("柜台") %>%
timeout( function() rexp(1, mu)) %>%
release("柜台")
## 用add_resource生成柜台资源
## 用add_generator()生成顾客到来列
bank %>%
add_resource("柜台",capacity=c) %>%
add_generator("顾客", customer, function() {rexp(1, lambda)} )
## 用run()执行模拟到指定结束时刻
bank %>%
run(until=T1)
R计算程序
## 用get_mon_arrivals()获取各个顾客到来的时间、离开时间、活动时间等,结果是数据框
## 用dplyr::mutate()对数据框增加新变量
resd <- bank %>%
get_mon_arrivals() %>%
dplyr::mutate(waiting_time = end_time - start_time - activity_time,
stay_time = end_time - start_time)
stay_times <- resd %>%
dplyr::filter(start_time >= T0, end_time < T1) %>%
dplyr::select(stay_time)
ER <- mean(stay_times[[1]])
ER.true <- 0.4393
cat('模拟的平均逗留时间ER=', ER,
' 期望值=', ER.true, '\n')
R计算结果
cat('模拟的平均逗留时间ER=', ER,' 期望值=', ER.true, '\n')
模拟的平均逗留时间ER= 0.4537 期望值= 0.4393
3. R模拟可视化
mon1=get_mon_arrivals(bank)
head(mon1,6)
name start_time end_time activity_time finished replication
1 顾客0 0.2779732 0.2796187 0.001645489 TRUE 1
2 顾客1 0.3053908 0.4021865 0.096795646 TRUE 1
3 顾客2 0.4990293 0.7050497 0.206020379 TRUE 1
4 顾客3 0.5090237 0.7185338 0.209510080 TRUE 1
5 顾客4 0.5315368 1.0015560 0.470019170 TRUE 1
6 顾客5 0.6160291 1.1197153 0.414665596 TRUE 1
mon = get_mon_resources(bank)
aggregate(cbind(server, queue) ~ resource, mon, mean)
library(ggplot2)
ggplot(mon, aes(x=server, fill=resource)) +
geom_histogram(binwidth = 0.5) +
facet_grid(.~resource, scales = 'free')
二、模拟仿真总结
随机服务系统在我们日常生活、工业生产、科学技术、军事领域中是经常遇到的随机模型,涉及到泊松过程与指数分布在排队模型中的应用,文中详细地从理论上计算了马尔可夫过程的M/M/c模型绩效指标,又通过随机模拟给出了这个系统绩效指标且作了对比,读者可以大致掌握排队论的应用范围与方法。对于如非指数分布,混线,排队网络,队列数量限制等,不再赘述,感兴趣地读者可以翻阅相关参考资料。
参考文献
1.(Simmer 2019带你飞 )[https://www.sohu.com/a/344940911_100040805]
2.(Simmer仿真平台高级使用技巧)[https://segmentfault.com/a/1190000019820794]
随机服务系统模拟—R实现(三)的更多相关文章
- 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr
目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...
- 电脑开机失败提示"用户配置文件服务登录失败"的三种解决办法
最近遇到这样一个怪现象,就是每次打开电脑输入密码,突然提示"User Profile Service 服务未能登录,无法加载用户配置文件",然后就没办法正常开机了,为什么会这样呢? ...
- SpringCloud开发学习总结(七)—— 声明式服务调用Feign(三)
Feign中的Ribbon配置 由于Spring Cloud Feign的客户端负载均衡是通过Spring Cloud Ribbon实现的,所以我们可以直接通过配置Ribbon客户端的方式来自定义各个 ...
- SpringCloud的服务注册中心(三) - 进一步了解 Eureka
一.服务治理参与者 服务注册中心: eureka-server 服务提供者:HELLO-SERVICE 服务消费者 :HELLO-CONSUMER 很多时候,客户端既是服务提供者又是服务消费者,-&g ...
- Stochastic Gradient Descent 随机梯度下降法-R实现
随机梯度下降法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 批量梯度下降法在权值更新前对所有样本汇总 ...
- (原创)OpenStack服务如何使用Keystone(三)---详细配置Keystone中间件
(一)Keystone端的操作 (二)如何在OpenStack服务上部署Keystone中间件 (三)详细配置keystonemiddleware 前文我们介绍了如何部署Keystone中间件以及中间 ...
- SOA 面向服务架构 阅读笔记(三)
7 SOA的主要组件 7.1企业服务总线ESB ESB负责SOA组件之间的互相通信;SOA注册中心的资源库包含表示SOA组件的位置的重要的引用信息: 业务流程编排管理器提供人与人,人与流程,以及流程的 ...
- SpringCloud2.0 Eureka Client 服务注册 基础教程(三)
1.创建[服务提供者],即 Eureka Client 1.1.新建 Spring Boot 工程,工程名称:springcloud-eureka-client 1.2.工程 pom.xml 文件添加 ...
- c++ Socket客户端和服务端示例版本三(多线程版本)
客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/soc ...
- R语言-三种方法绘制单位圆
与一般开发语言不同,R以数据统计分析和绘图可视化为主要卖点.本文是第一篇博客,解决一个简单的绘图问题,以练手为目的. 以下直接给出三种单位圆的画法: 方法1 f=seq(,*pi,0.001) x=s ...
随机推荐
- 【Appium_python】多进程启动时,没有设置间隔导致连接关闭,以及等待时间,导致用例未执行完成,服务提早关闭。
多进程启动多设备时,没有设置间隔时间,appium服务器以为受到远程攻击,就自动关闭连接,导致服务启动失败, 解决方法:用time.sleep设置时间间隔 也需要增加等待时间,等待其他设备用例都执行完 ...
- h5移动端识别二维码信息
jsqr插件 图片跨域时不允许绘制到canvas,所以先转blob在画到canvas上面就可以,如果不跨域直接画就行 function getImageBlob (url) { ...
- Deformable DETR (ICLR2021)
Pre-Trained Image Processing Transformer paper:https://arxiv.org/abs/2010.04159 code:https://github. ...
- MySQL核心知识
MySQL常用的命令 启动:net start mySql; 进入:mysql -u root -p/mysql -h localhost -u root -p databaseName; 列出数据库 ...
- ReSharp的安装和使用教程
1.ReSharp的安装及破解: (1)不多说,直接上下载链接: 链接:https://pan.baidu.com/s/1cJmTQxDS-OHmHs46Q_hbMg 提取码:shiz (2)下载好解 ...
- 熟悉Hadoop及其操作 3
启动hdfs 查看与创建hadoop用户目录. 在用户目录下创建与查看input目录. 将hadoop的配置文件上传到hdfs上的input目录下.运行MapReduce示例作业,输出结果放在ou ...
- PC端钉钉扫码登录,报错情况合集
"对不起 你无权限查看该页面 redirect_url不能为空" 原因: 1. 只对redirect_url编码,而生成二维码时需要对整个gotoUrl进行编码 2. appid参 ...
- 运行python脚本报错SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
运行python脚本报错 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: ...
- 【Rust入门】(一)构建自己的第一个Rust项目
安装Rust 参考文档,指定安装目录和镜像配置. rustc --version 检查是否安装成功. 构建程序 使用rustc编译运行 rustc 编译:rustc main.js 运行: Windo ...
- 解决VUE中document.documentElement.scrollTop为0(转)
原文地址:https://blog.csdn.net/WDCCSDN/article/details/82107374 Vue中document.documentElement.scrollTop的值 ...