Passeio Aleatório
Ruína do Jogador

Caio VAOS

2025.1

Introdução

O que é um Passeio Aleatório?

Passeios aleatórios são processos estocásticos nos quais uma variável muda seu valor de forma aleatória ao longo do tempo, conforme certas probabilidades.

Em sua forma mais simples, trata-se de uma sequência de passos em que, a cada instante, o valor atual é somado ou subtraído de uma constante (geralmente 1), com base em uma probabilidade fixa.

Esses modelos são amplamente utilizados para representar fenômenos como movimentos no mercado financeiro, variações em populações biológicas e, neste caso, o saldo de um jogador em um jogo de apostas.


Ruina do Jogador

A ruína do jogador é um problema clássico envolvendo passeios aleatórios com barreiras: uma inferior (a ruína, onde o saldo do jogador chega a zero) e uma superior (o objetivo ou limite de ganho).

O jogador começa com uma quantia inicial \(a\) e, a cada rodada, ganha $1 com probabilidade \(p\) ou perde $1 com probabilidade \(1 - p\).

O jogo continua até que o saldo atinja $0 (ruína) ou um valor máximo \(b\).


Metodologia - Descrição do Experimento

Nesse relatório, serão utilizados os seguintes parâmetros:

  • Quantia inicial: \(a=30\)

  • Probabilidade de ganhar $1 na rodada: \(p=0,4\)

  • Limite superior: \(b=60\)

  • Repetições : \(r=1000\)

O número de repetições corresponde à quantidade de simulações realizadas. Quanto maior esse número, mais precisa se torna a análise.

Para garantir a reprodutibilidade dos resultados, todas as simulações foram realizadas com a semente fixa set.seed(123).


Número Médio de Rodadas

Parâmetros da Simulação

Defino os valores constantes utilizados ao longo da simulação:

a <- 30
b <- 60
r <- 1000
p <- 0.4

Núcleo do Processo

O jogador inicia com um saldo de \(a\), e o número de rodadas começa em zero.

A cada rodada, o saldo é atualizado com +1 ou -1, de acordo com a probabilidade especificada.

O processo se repete até que o jogador atinja uma das barreiras.

set.seed(123)

saldo <- a
rodadas <- 0

while (saldo > 0 && saldo < b) {
  passo <- sample(c(-1, 1), size = 1, prob = c(1 - p, p))
  saldo <- saldo + passo
  rodadas <- rodadas + 1
}

rodadas
## [1] 154

Para obter uma estimativa confiável, repetimos o experimento \(r\) vezes, armazenando o número total de rodadas de cada repetição.

set.seed(123)

rodadas_por_repeticao <- c()

for (i in 1:r) {
  saldo <- a
  rodadas <- 0
  
  while (saldo > 0 && saldo < b) {
    passo <- sample(c(-1, 1), size = 1, prob = c(1 - p, p))
    saldo <- saldo + passo
    rodadas <- rodadas + 1
  }
  
  rodadas_por_repeticao <- c(rodadas_por_repeticao, rodadas)
}

# Os dez primeiros valores
head(rodadas_por_repeticao, 10)
##  [1] 154 116 136 106 188 120 160  66 126 124

Resultado

Por fim, calculamos a média do número de rodadas entre todas as repetições:

mean(rodadas_por_repeticao)
## [1] 150.334


Função

Para melhorar a escalabilidade e facilitar a realização de novos testes com diferentes parâmetros, encapsulamos o processo de simulação em uma função chamada num_rodadas(), retornando um vetor com o número de rodadas em cada simulação.

num_rodadas <- function(a, b, r = 1000, p = 0.4) {
  rodadas_por_repeticao <- c()
  
  for (i in 1:r) {
    saldo <- a
    rodadas <- 0
    
    # Enquanto o saldo estiver entre 0 e b, o jogo continua
    while (saldo > 0 && saldo < b) {
      passo <- sample(c(-1, 1), size = 1, prob = c(1 - p, p))
      saldo <- saldo + passo
      rodadas <- rodadas + 1
    }
    
    rodadas_por_repeticao <- c(rodadas_por_repeticao, rodadas)
  }
  
  return(rodadas_por_repeticao)
}

set.seed(123)
mean(num_rodadas(30, 60))
## [1] 150.334

Influência da Quantia Inicial

Nesta seção, analiso como a quantia inicial \(a\) influencia a duração esperada do jogo. Mantendo constantes os demais parâmetros (\(b=60\), \(p=0,4\), \(r=100\)).

Para isso, o jogo foi simulado para diferentes valores de \(a\), entre 1 e 59.

Função

Trata-se de uma pequena modificação da função anterior.

Nesta versão, o valor de \(a\) varia de acordo com o vetor fornecido como argumento, e para cada valor é computada a média do número de rodadas.

num_rodadas_var_a <- function(a_vals, b, r = 1000, p = 0.4) {
  rodadas_por_val_a <- c()
  
  for (a in a_vals) {
    rodadas_a <- c()
    
    for (i in 1:r) {
      saldo <- a
      rodadas <- 0
      
      while (saldo > 0 && saldo < b) {
        passo <- sample(c(-1, 1), size = 1, prob = c(1 - p, p))
        saldo <- saldo + passo
        rodadas <- rodadas + 1
      }
      
      rodadas_a <- c(rodadas_a, rodadas)
    }
    
    media_rodadas <- mean(rodadas_a)
    rodadas_por_val_a <- c(rodadas_por_val_a, media_rodadas)
  }
  
  return(rodadas_por_val_a)
}

Resuldado

set.seed(123)
a_vals <- 1:59
valores <- num_rodadas_var_a(a_vals, 60)
df <- data.frame(a = a_vals, rodadas = valores)

Observa-se que, à medida que a quantia inicial aumenta, a média de rodadas também cresce — ou seja, o jogador tende a sobreviver por mais tempo. Esse padrão se mantém até aproximadamente o ponto \(a=50\). A partir daí, como o valor inicial está mais próximo da barreira superior (\(b=60\)), alguns trajetos chegam rapidamente ao sucesso logo nas primeiras rodadas, o que reduz a média geral de duração.

Em resumo: quanto maior a quantia inicial, maior tende a ser o tempo de sobrevivência no jogo, até certo ponto. Após esse limite, o jogador passa a ter mais chance de vencer rapidamente, o que encurta a duração média das partidas.

Também vale notar que, como consequência desse comportamento, a probabilidade de vitória — ou seja, de o jogador atingir o valor 60 sem antes cair em ruína — aumenta conforme o valor inicial \(a\) cresce. Essa probabilidade parte de zero e começa a crescer de forma acentuada com \(a\) próximo a 50.


Seção Adicional

A animação a seguir mostra como o número médio de rodadas até o fim do jogo varia conforme a probabilidade de vitória por rodada \(p\) muda, mantendo fixa a barreira superior \(b=60\) e variando a quantia inicial \(a\) entre 1 e 59.

Quando a probabilidade de vitória é baixa (próxima de 0), o número médio de rodadas é pequeno, e há uma forte tendência à ruína, independentemente da quantia inicial.

À medida que \(p\) aumenta, o número médio de rodadas também cresce, especialmente para valores intermediários de \(a\), indicando maior equilíbrio entre ruína e sucesso.

Essa etapa fui analisada nesse relaorio.

Para valores de \(p\) mais próximos de 1, o jogo tende a terminar rapidamente em vitória, principalmente quando \(a\) já é elevado, o que reduz novamente o número médio de rodadas.

Vale destacar ainda o comportamento espelhado dessa evolução em relação à probabilidade: os padrões observados para \(p\) próximo de 0 se invertem à medida que \(p\) se aproxima de 1.