R語言連續(xù)時間馬爾可夫鏈模擬案例 Markov Chains
原文鏈接:http://tecdat.cn/?p=4182
原文出處:拓端數(shù)據(jù)部落公眾號
?
案例
一個加油站有一個加油樁,沒有空間供車輛等待(如果車輛到達,加油樁被占用,它就會離開)。車輛到達加油站的速率服從泊松過程λ=3/20每分鐘,其中75%是汽車,25%是摩托車。加油時間可以用一個指數(shù)隨機變量建模,平均汽車8分鐘,摩托車3分鐘,服務(wù)速率為汽車μC= 1 / 8和摩托車μ= 1 / 3 每分鐘。
因此,我們可以通過將這些概率乘以每個狀態(tài)下的車輛數(shù)量來計算系統(tǒng)中的平均車輛數(shù)量。
# 到達率
lambda <- 3/20
# 服務(wù)速率(汽車,摩托車)
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
現(xiàn)在,我們將模擬系統(tǒng)并驗證
optio<-
seize("pump", amount=1) %>%
timeout(function() rexp(1, mu[1])) %>%
release("pump", amount=1)
為了區(qū)分汽車和摩托車,我們可以在獲取資源后定義一個分支來選擇合適的服務(wù)時間。
這option.3相當(dāng)于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]))) %>
但是此選項增加了不必要的運算,因為需要額外調(diào)用R函數(shù)來選擇分支,因此會降低性能。更好的選擇是直接在timeout
函數(shù)內(nèi)部選擇服務(wù)時間。
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
于性能。但是,我們得出了相同的結(jié)果。例如,
# 使用率+理論值
plot(get_mon_resources(gas.station), "usage", "pump", items="system") +
geom_hline(yintercept=N_average_theor)
?
這些是一些表現(xiàn)的結(jié)果:
t <- 1000/lambda
tm <- microbenchmark(option.1(t),
autoplot(tm) +
scale_y_log10(breaks=function(limits) pretty(limits, 5)) +

最受歡迎的見解
1.用R語言模擬混合制排隊隨機服務(wù)排隊系統(tǒng)
2.R語言中使用排隊論預(yù)測等待時間
3.R語言中實現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機制轉(zhuǎn)換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊隨機服務(wù)排隊系統(tǒng)
7.Python基于粒子群優(yōu)化的投資組合優(yōu)化
8.R語言馬爾可夫轉(zhuǎn)換模型研究交通傷亡人數(shù)事故預(yù)測
9.用機器學(xué)習(xí)識別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用