失智鼠闖迷宮

場景

科學家探索失智老鼠行為模式,設計 3 間不同密室各自擺上不同氣味食物,觀察這隻失智老鼠在各密室活動情形,並加以記錄分析發現以下模式:

問題

(1) 此失智老鼠自【密室一】出發,在 10 步驟內分別停留在各密室機率如何?
(2) 此失智老鼠是否有固定行為模式?若有,最終分別在各密室機率為何?

解法

options(digits=4)

rm(list=ls())

Pn <- function(P, n) {
  ans <- P
  
  if (n > 1) {
    for (i in seq(2, n)) {
      # 矩陣相乘
      ans <- P %*% ans
    }
  }
  
  ans
}

P <- matrix(c(1/2, 1/4, 1/4, 0, 1/3, 2/3, 1/2, 1/2, 0), byrow=TRUE, nrow=3, ncol=3)
P0 <- matrix(c(1, 0, 0), byrow=TRUE, nrow=1, ncol=3)

# 移轉機率結果矩陣
A <- matrix(0, nrow=10, ncol=3)

for (i in 1:10) {
  # 矩陣相乘
  ans <- P0 %*% Pn(P, i)
  A[i,] <- c(ans[1], ans[2], ans[3])
  print(sprintf("%02d) 密室一:%.4f 密室二:%.4f 密室三:%.4f", i, ans[1], ans[2], ans[3]))
}

# 移轉機率結果矩陣欄位名稱
colnames(A) <- c('密室一', '密室二', '密室三')

# 繪製移轉機率結果矩陣立體觀點圖
persp(A, xlab='密室一', ylab='密室二', zlab='密室三', main='機率趨勢平面圖', 
      theta=30, phi=30, expand=0.5, col="lightblue",
      ltheta= 120, shade=0.75, ticktype="detailed")

# 狀態關係: 轉置矩陣 - 單位矩陣
W <- t(P) - diag(nrow=3, ncol=3)

# 各狀態機率和 = 1
W2 <- rbind(W, c(1, 1, 1))

# 解穩態方程式: 移除首列多餘關係式
ans <- solve(W2[2:4, ], c(0, 0, 1))

#穩態機率
print(sprintf("<穩態> 密室一:%.4f 密室二:%.4f 密室三:%.4f", ans[1], ans[2], ans[3]))

#期望再現時間
print(sprintf("<穩態需要移轉次數> 密室一:%.4f 密室二:%.4f 密室三:%.4f", 1/ans[1], 1/ans[2], 1/ans[3]))

答案

01) 密室一:0.5000 密室二:0.2500 密室三:0.2500
02) 密室一:0.3750 密室二:0.3333 密室三:0.2917
03) 密室一:0.3333 密室二:0.3507 密室三:0.3160
04) 密室一:0.3247 密室二:0.3582 密室三:0.3171
05) 密室一:0.3209 密室二:0.3591 密室三:0.3200
06) 密室一:0.3204 密室二:0.3599 密室三:0.3196
07) 密室一:0.3200 密室二:0.3599 密室三:0.3201
08) 密室一:0.3200 密室二:0.3600 密室三:0.3199
09) 密室一:0.3200 密室二:0.3600 密室三:0.3200
10) 密室一:0.3200 密室二:0.3600 密室三:0.3200

<穩態> 密室一:0.3200 密室二:0.3600 密室三:0.3200
<穩態需要移轉次數> 密室一:3.125 密室二:2.7778 密室三:3.125

由右圖脊線走向可知,移轉機率朝向穩態發展。
ċ
Markov-Chain-Mace.R
(1k)
李智,
2013年9月7日 上午2:52