O problema do sapo (quebra-cabeça no vídeo do YouTube)

8

Há um quebra-cabeça interessante no vídeo do YouTube. Você pode resolver o problema do sapo? . Vou tentar dar uma formulação equivalente aqui.

Um sapo está de um lado da lagoa e quer chegar do outro lado. Há folhas de lírio à frente em uma linha, a ésima licença que fica do outro lado da lagoa e é o destino. Qualquer que seja a posição do sapo, a qualquer momento, ele apenas seguirá em frente e a probabilidade de pousar em uma das folhas deixadas à sua frente (incluindo o destino) é uniforme. Portanto, por exemplo, se houver 10 folhas à frente, há uma probabilidade de que ele apareça em qualquer uma delas.nn110

Qual é o valor esperado para o número de saltos que o sapo levará para chegar à folha de destino? A resposta não pode ser uma expressão recursiva.

Acho que tenho uma solução, relatarei como resposta abaixo.

polettix
fonte

Respostas:

2

Este é um problema interessante, e o polettix fornece a solução para o problema imediato de encontrar o número esperado de saltos. Vou tentar analisar a questão mais ampla da distribuição do tempo que leva para chegar ao último lírio. Essa análise mais ampla nos permite encontrar as probabilidades de qualquer estado e de qualquer momento da distribuição.

Essa análise pode ser enquadrada como um problema de encontrar a distribuição do "tempo de atrito" para o estado de absorção de uma cadeia de Markov discreta. É relativamente simples programar essa cadeia de Markov em software estatístico e extrair a distribuição resultante dos tempos de execução, fornecendo assim uma solução completa para o Problema do Sapo.


Configurando o problema como uma cadeia de Markov: Para configurar o problema, usamos os estados , onde o estado é o sapo na margem do rio e os demais estados são para o sapo estar em lírios respectivamente. Deixamos é o processo aleatório no problema, com o sapo no lily-pad imediatamente após o salto . O processo é uma cadeia Markov discreta e estritamente monótona com a matriz de probabilidade de transição :x=0,1,2,...,nx=01,...,n{Xt|t=0,1,2,3,...}Xtt(n+1)×(n+1)

P=[01/n1/n1/n1/n1/n001/(n1)1/(n1)1/(n1)1/(n1)0001/(n2)1/(n2)1/(n2)00001/21/2000001000001].

O número de saltos para o último lily-pad é o tempo de acerto para o estado , que é:n

Tmin{tN|Xt=n}.

Nosso objetivo será encontrar a função de massa de probabilidade para a variável aleatória , que fornece uma solução completa para o problema do sapo (isto é, descreve completamente o comportamento do número de saltos até o último lírio).T


Encontrando a função de massa probabilística: Como o sapo progride em pelo menos um lírio em cada salto, são necessários no máximo saltos para alcançar o último lírio, portanto devemos ter . A função de distribuição cumulativa para esse momento é:n1Tn

FT(t)=P(Tt)=P(Xt=n)=[Pt]0,n.

Assim, a função de massa de probabilidade para o tempo é:

pT(t)={1/nfor t=1,[Pt]0,n[Pt1]0,nfor t>1.

Essa função de massa descreve completamente a distribuição do tempo necessário para que o sapo atinja o último lírio - e, portanto, pode ser considerada uma solução completa para o problema do sapo. Para facilitar a computação, podemos programar essa distribuição Rcomo a dfrogfunção. Esta é uma função vetorizada que gera valores a partir da função de massa de probabilidade para um vetor Te parâmetro de argumento 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; }

Podemos usar essa função para gerar e plotar a função de massa de probabilidade. O gráfico abaixo mostra a distribuição do número de saltos quando existem lírios. Como pode ser visto, o sapo geralmente leva de 3 a 4 saltos para alcançar o último lírio neste caso. n=20

insira a descrição da imagem aqui

#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)'));
Ben - Restabelecer Monica
fonte
2

Em vez de usar a relação recursiva para o número esperado , também poderíamos tentar uma abordagem mais mecanicista, calculando todos os caminhos que o sapo pode seguir e a distribuição da probabilidade da posição do sapo depois de pular.Jn=Jn1+1nk

Isso pode ser calculado rapidamente usando uma cadeia de Markov.

# stochastic Matrix
M <- pracma::Toeplitz(c(0,rep(1,10)),rep(0,11)) / c(1,1:10) 
M[1,1] <- 1                                               

# positions of frogs after k steps
V <- c(rep(0,10),1)
Vm <- sapply(0:10, FUN = function(k) V %*% (M %^% k))

# mean number of steps by computing 1-F(0)
sum(1-Vm[1,])

dando2.928968

A distribuição de massa, , para a probabilidade de estar à distância da 'folha de acabamento' na ésima etapa seria semelhante à seguinte:p(x,k)xk

insira a descrição da imagem aqui


Este método tem uma desvantagem. Não é muito fácil derivar o resultado final encantador de que o valor esperado para o número de etapas é igual ao n-ésimo número harmônico .k=1n1/k

Nos comentários, sugeri que essas distribuições seriam como funções polinomiais. No entanto, isso está errado. É mais complicado.p(x,k)

A distribuição segue a relação:

p(x,k)=y=x+1Np(y,k1)j

onde é uma soma das probabilidades para a posição do sapo no -ésimo passo, e é o número de folhas (generalizando de ). Para iniciar essa relação, usamos .p(x,k)(k1)NN=10p(N,0)=1

Isso pode ser expandido como

p(x,k)=1Nl1=x+1Nkl2=l1+1Nk+1...lk=lk1+1N11l1l2...lk

que é algum tipo de generalização do número harmônico.

Você poderia descrevê-lo mais compacto como

p(x,k)=1NSSk,[x,...,N1]aS1a

onde a soma é sobre todas as k-subconjuntos em , o conjunto de todos os k-subconjunto de , e o do produto é superior a todos os números no subconjunto . Por exemplo, um subconjunto representaria que o sapo saltou da posição 10 para 7 para 5 e para 3. A probabilidade de o sapo seguir esse caminho é .SSk,[x,...,N1][x,...,N1]aS{3,5,7}110753

Ainda não sei como continuar daqui para obter o resultado final ... Imagino que você possa usar alguma relação recursiva.

Sextus Empiricus
fonte
1

Vamos chamar o valor esperado para os saltos quando houver folhas à frente. Também definimos , o que é consistente com o fato de que, se o sapo não tiver folha à frente, precisará fazer exatamente saltos para chegar ao destino.JnnJ0=00

Nomearemos / numeraremos as folhas de acordo com a distância do destino. Portanto, o destino será a folha , a imediatamente antes de e assim por diante, até a folha que está na frente do sapo. Existem folhas no total e a probabilidade de pular em qualquer uma delas com um salto é acordo com as indicações do quebra-cabeça.01n1n1n

Quando o sapo der esse primeiro salto, ele pousará na folha , com e, a partir desse ponto, o valor esperado dos saltos restantes será . Considerando que esses eventos são mutuamente exclusivos, obtemos o seguinte:kk{0,...n1}Jk

Jn=k=0n11n(1+Jk)

onde o representa o primeiro salto para alcançar a posição . Como existem elementos na soma, ele pode ser reorganizado como:1kn

Jn=1+1nk=0n1Jk

o que é realmente um pouco recursivo . Com aritmética simples, podemos reorganizá-lo da seguinte maneira:

n(Jn1)=k=0n1Jk

Essa relação é genérica e também pode ser reescrita com vez de :n1n

(n1)(Jn11)=k=0n2Jk

Subtraindo as duas relações que obtemos:

n(Jn1)(n1)(Jn11)=k=0n1Jkk=0n2Jk=Jn1

isso é:

n(Jn1)=(n1)(Jn11)+Jn1=nJn1(n1)
Jn1=Jn1n1n
Jn=Jn1+1n

Ainda recursivo, mas pelo menos o ésimo elemento é expresso em termos de ésimo elemento.nn1

Agora, considerando que a relação acima pode ser reduzida para:J0=0

Jn=k=1n1k

qual é a resposta para o quebra-cabeça.

polettix
fonte
2
Você também pode raciocinar de forma mais curta e intuitiva: o sapo com folhas à sua frente tem as mesmas opções à sua frente que o sapo com à frente, mais a opção que ele primeiro precisa dar um passo extra (aterre no primeiro deixe na frente dele que o sapo na frente dele não tem) com probabilidade . Assim, pode ser raciocinado diretamente. nn11/nJn=Jn1+1/n
Sextus Empiricus
11
E agora faça o mesmo quebra-cabeça quando o sapo também puder ficar no mesmo lugar.
Sextus Empiricus
11
Quando o sapo também pode dar um passo para trás, você tem levando a
Jn=Jn1(n1)/(n+1)+(Jn+1)/(n+1)+(Jn+1+1)/(n+1)
Jn+1=nJn(n1)Jn1
Sextus Empiricus
11
A equação final deve ter no denominado em vez dekn
L. Scott Johnson
3
@whuber o fato de a expressão final exigir um processo iterativo usando não necessariamente a torna uma relação de recorrência (por exemplo, no artigo que você vinculou, a relação de recorrência é indicada explicitamente como ). Você pode decidir reorganizar os termos durante a soma como achar melhor, embora isso não seja possível aproveitando apenas a relação de recorrência. O(n)Hn+1=Hn+1n+1
polettix 16/09/19
1

Como Martijn Weterings, tentei a abordagem "calcular todas as possibilidades".

No começo, o sapo tem opções, cada uma com probabilidade . Depois disso, as opções restantes dependem da escolha inicial. Mas o conjunto das probabilidades das etapas restantes é fácil de ver: são os recíprocos do Conjunto de Potência em .n1n{1,...,n1}

Ou seja, para , as probabilidades de cada etapa são (em recíproco):n=3

{3} - um salto de 3
{3, 1} - salto de 2 (com probabilidade de 1/3) e, em seguida, salto de 1 (com probabilidade de 1/1)
{3, 2} - 1 e 2
{ 3, 2, 1} - 1 depois 1 e 1

O valor esperado destes é apenas o tamanho do conjunto dividido pelo produto dos elementos do conjunto.

Como cada conjunto sempre começa com , nós o removemos da soma.n

O número esperado de saltos para atravessar a enésima folha é:

1nxP({1,...,n1})|x|+1x

Não sei ao certo qual abordagem pode ser usada para simplesmente esse formulário no formato , mas a equivalência das duas verificações para o que tentei ( 2,3,10,20)

k=1n1k
n

L. Scott Johnson
fonte