これは興味深い問題であり、polettixは予想されるジャンプ数を見つけるという当面の問題に対する解決策を提供します。最後の百合に到達するのにかかる時間の分布のより広い問題を見てみましょう。この広範な分析により、あらゆる状態の確率と分布のあらゆる瞬間を見つけることができます。
この分析は、離散マルコフ連鎖の吸収状態の「ヒット時間」の分布を見つける問題として組み立てることができます。このマルコフ連鎖を統計ソフトウェアでプログラムし、結果として得られるヒット時間の分布を抽出することは比較的簡単で、カエル問題の完全なソリューションを提供します。
問題をマルコフ連鎖として設定する:問題を設定するには、状態を使用しここで、状態は川岸のカエルで、残りの状態はカエルが百合のパッドそれぞれいるためのものです。私たちは聞かせては問題のランダムプロセスであり、カエルはジャンプ直後にリリーパッドにいます。このプロセスは、遷移確率行列を持つ厳密に単調な離散マルコフチェーンです。x=0,1,2,...,nx=01,...,n{バツt| T=0、1、2、3、。。。}バツtt(n + 1 )× (n + 1 )
P =⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢000⋮0001 / n00⋮0001 / n1 /(n − 1 )0⋮000⋯⋯⋯⋱⋯⋯⋯1 / n1 /(n − 1 )1 /(n − 2 )⋮0001 / n1 /(n − 1 )1 /(n − 2 )⋮1 / 2001 / n1 /(n − 1 )1 /(n − 2 )⋮1 / 211⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥。
最後のユリパッドへのジャンプの数は、状態ヒット時間です。ん
T≡ 分{ T ∈ N |バツt= n } 。
私たちの目標は、カエル問題の完全な解決策を提供する確率変数の確率質量関数を見つけることです(つまり、最後のユリパッドへのジャンプ数の動作を完全に記述します)。T
確率質量関数の:カエルはジャンプごとに少なくとも1つのするため、最後のに到達するには最大ジャンプかかるため、です。この時間の累積分布関数は次のとおりです。ん1 ⩽ T⩽ n個
FT(t )= P(T⩽ T )= P(バツt= n )= [Pt]0 、n。
したがって、時間の確率質量関数は次のとおりです。
pT(t )= {1 / n[Pt]0 、n− [Pt − 1]0 、nため 、T = 1 、以下のための トン > 1。
この質量関数は、カエルが最後の百合に到達するのにかかる時間の分布を完全に記述しているため、カエル問題の完全な解決策と見なすことができます。計算を容易にするために、この分布を関数R
としてプログラムできdfrog
ます。これは、引数ベクトルT
とパラメーターの確率質量関数から値を生成するベクトル化された関数ですn
。
dfrog <- function(n, T = 1:n) {
#Create transition probability matrix
P <- matrix(0, nrow = n+1, ncol = n+1);
for (i in 1:n) {
for (j in i:n) {
P[i, j+1] <- 1/(n+1-i); } }
P[n+1, n+1] <- 1;
#Generate CDF and PMF vectors
PP <- P;
CDF <- rep(0, n);
for (t in 1:n) {
CDF[t] <- PP[1, n+1];
PP <- PP %*% P; }
PMF <- diff(c(0, CDF));
#Generate output vector
OUT <- rep(0, length(T));
for (i in 1:length(T)) { OUT[i] <- PMF[T[i]]; }
OUT; }
この関数を使用して、確率質量関数を生成およびプロットできます。以下のプロットは、ユリパッドがある場合のジャンプ数の分布を示しています。見られるように、この場合、カエルは通常3〜4ジャンプで最後のユリのパッドに到達します。 n = 20
#Load ggplot and set theme
library(ggplot2);
THEME <- theme(plot.title = element_text(hjust = 0.5, size = 14, face = 'bold'),
plot.subtitle = element_text(hjust = 0.5, face = 'bold'));
#Plot the PMF
n <- 20;
DATA <- data.frame(Jumps = 1:n, Probability = dfrog(n));
ggplot(aes(x = Jumps, y = Probability), data = DATA) +
geom_bar(stat = 'identity', fill = 'darkgreen') +
THEME +
ggtitle('PMF of number of jumps to last lily-pad') +
labs(subtitle = paste0('(Frog problem with n = ', n, ' lily-pads)'));