R语言连续时间马尔可夫链模拟案例 Markov Chains

一个加油站有一个加油桩,没有空间供车辆等待(如果车辆到达,加油桩被占用,它就会离开)。

由Kaizong Ye,Coin Ge撰写

车辆到达加油站的速率服从泊松过程λ=3/20每分钟,其中75%是汽车,25%是摩托车。加油时间可以用一个指数随机变量建模,平均汽车8分钟,摩托车3分钟,服务速率为汽车μC= 1 / 8和摩托车μ= 1 / 3 每分钟。

因此,我们可以通过将这些概率乘以每个状态下的车辆数量来计算系统中的平均车辆数量。

# 到达率
lambda <- 3/20
# 服务速率(汽车,摩托车)
mu <- c(1/8, 1/3)
# 汽车的概率
p <- 0.75
 
#理论解析
A <- matrix(c(1,   mu[1],            0,
              1, -lambda, (1-p)*lambda,
         
N_average_theor 
#> [1] 0.5031056

现在,我们将模拟系统并验证

为了区分汽车和摩托车,我们可以在获取资源后定义一个分支来选择合适的服务时间。

optio<-
 
    seize("pump", amount=1) %>%
    timeout(function() rexp(1, mu[1])) %>%
    release("pump", amount=1)
  


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

这option.3相当于option.1性能。 例如,

opti2 <- function(t) {
  
    seize("pump", amount=1) %>%
    branch(function() sample(c(1, 2), 1, prob=c(p, 1-p)), c(T, T), 
           trajectory("car") 
             timeout(function() rexp(1, mu[2]))) %>

但是此选项增加了不必要的运算,因为需要额外调用R函数来选择分支,因此会降低性能。更好的选择是直接在timeout函数内部选择服务时间。

optio3 <- function(t) {
  vehicle <- trajectory() %>%
    seize("pump", amount=1) %>%
      if (runif(1) < p) rexp(1, mu[1])  # 汽车
      else rexp(1, mu[2])               # 摩托车
    }) %>%

option.3等效option.1于性能。但是,我们得出了相同的结果。例如,

 
# 使用率+理论值
plot(get_mon_resources(gas.station), "usage", "pump", items="system") +
  geom_hline(yintercept=N_average_theor)


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds