用R语言模拟随机服务排队系统

简介: 用R语言模拟随机服务排队系统

M / M / c / k系统

用肯德尔的表示法,M / M / c / k系统具有指数到达(M / M / c / k),cC具有指数服务时间(M / M / c / k)和k−c的服务器(M / M / c / k)ķ-C队列中的位置(M / M / c / k)。

这是M / M / 2/3系统 的模拟。

lambda <- 3
mu <- 4

m.queue <- trajectory() %>%
  seize("server", amount=1) %>%
  timeout(function() rexp(1, mu)) %>%
  release("server", amount=1)

mm23.env <- simmer() %>%
  add_resource("server", capacity=2, queue_size=1) %>%
  add_generator("arrival", m.queue, function() rexp(1, lambda)) %>%
  run(until=2000)

队列已满时会有拒绝。

通过求解该系统的平衡方程,可以得出以下信息:


其中r=λ/μ[R=λ/μ。最后,我们可以看到模拟如何快速收敛到系统中的理论平均客户数Nñ:

服务费率

在许多实际的排队方案中,服务器的速度取决于系统的状态。在这里,我们考虑一个多服务器资源,该资源能够在到达位置之间平均分配处理能力。这意味着,例如,如果capacity=2服务器中有一个服务器到达,则服务器的服务速度将提高一倍。

  • start:到达开始最后一个timeout活动的模拟时间。
  • multiplier:分配处理能力。
  • delay:服务延迟应用于上一个timeout活动。

 

下面的主要轨迹首先抓住了服务器并初始化了这三个属性。然后,到达者需要遵循update.delay轨迹,并且必须在任何给定时间中断以重新运行它,从而重新计算剩余的服务时间。

在下文中,我们将M / M / 2与该状态相关系统进行比较。这两个系统的到达时间相同,并且可以预期,平均资源使用量显着降低。

排队网络

队列网络。有三个指数生成器 注入平均大小为100字节的指数大小的消息。有四个M / D / 1队列,确定速率等于220字节/秒。来自λ的消息有25%的概率1个λ1个 在第二个队列之前删除 。 

我们将首先设置主要常量和几个函数来设置消息大小并占用M / D / 1队列:

下一步是 设置三个连接点:

最后,我们 运行仿真环境:

  run(4000)
#> simmer environment: anonymous | now: 4000 | next: 4000.27679472528
#> { Monitor: in memory }
#> { Resource: md1_1 | monitored: TRUE | server status: 1(1) | queue status: 4(Inf) }
#> { Resource: md1_2 | monitored: TRUE | server status: 1(1) | queue status: 4(Inf) }
#> { Resource: md1_3 | monitored: TRUE | server status: 0(1) | queue status: 0(Inf) }
#> { Resource: md1_4 | monitored: TRUE | server status: 0(1) | queue status: 0(Inf) }
#> { Source: arrival1_ | monitored: 2 | n_generated: 7994 }
#> { Source: arrival3_ | monitored: 2 | n_generated: 1959 }
#> { Source: arrival4_ | monitored: 2 | n_generated: 2390 }

在分析中,我们将过滤来自生成器1的到达队列3和4的到达,并检查平均等待时间和消息总数:

aggregate(waiting_time ~ generator + resource, arr, function(x) sum(x)/length(x))
#>   generator resource waiting_time
#> 1  arrival1    md1_3    6.2313118
#> 2  arrival3    md1_3    0.7253215
#> 3  arrival1    md1_4    5.6431528
#> 4  arrival4    md1_4    0.5001096
get_n_generated(env, "arrival1_") + get_n_generated(env, "arrival4_")
#> [1] 10384
aggregate(waiting_time ~ generator + resource, arr, length)
#>   generator resource waiting_time
#> 1  arrival1    md1_3         3864
#> 2  arrival3    md1_3         1958
#> 3  arrival1    md1_4         2177
#> 4  arrival4    md1_4         2389
相关文章
|
6月前
|
数据可视化 网络架构
用R语言模拟混合制排队随机服务排队系统
用R语言模拟混合制排队随机服务排队系统
|
6月前
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
|
6月前
R语言中如何使用排队论预测等待时间?
R语言中如何使用排队论预测等待时间?
|
6月前
用R语言模拟M / M / 1随机服务排队系统
用R语言模拟M / M / 1随机服务排队系统
|
Windows Python
windows系统下R语言如何安装rPython包?
windows系统下R语言如何安装rPython包?
316 0
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
22天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
40 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化