Exercício 27 (ADS E BECA). Simule o experimento de Monty Hall usando um número arbitrário de portas. Verifique empiricamente que a probabilidade de ganhar o carro na troca de portas é dada por (n-1) / n, onde n é a quantidade de portas.

Passo 1

O que o enunciado pede e quais informações ele dá.
  • Pede: simular o experimento de Monty Hall com um número arbitrário de portas e verificar empiricamente que a probabilidade de ganhar ao trocar de porta é \dfrac{n-1}{n}, onde n é a quantidade de portas.
  • Dados implícitos que vamos usar:
    • n portas numeradas de 1 a n.
    • Atrás de exatamente uma porta está o carro (prêmio); atrás das outras n-1 portas estão cabras (perdas).
    • O jogador escolhe uma porta inicialmente, uniformemente ao acaso.
    • O apresentador sabe onde está o carro e sempre abre n-2 portas que mostram cabras, nunca abrindo a porta escolhida pelo jogador nem a porta com o carro.
    • Após o apresentador abrir n-2 portas, restam exatamente duas portas fechadas: a porta escolhida inicialmente e mais uma porta restante. O jogador pode manter a escolha inicial ou trocar para a outra porta fechada.
  • Objetivo da simulação: repetir muitas vezes o experimento para estimar a probabilidade empírica de vitória quando o jogador troca de porta, e comparar com o valor teórico \dfrac{n-1}{n}.

Passo 2

Intuição e demonstração teórica (a “aula” para entender por que o resultado é \dfrac{n-1}{n}).
Vou explicar passo a passo e com cuidado, sem pular etapas.
  1. Probabilidade da escolha inicial ser correta.
    • Ao escolher uma porta aleatoriamente entre n, a probabilidade de ter escolhido a porta com o carro é
    \frac{1}{n}.
    • Isso significa que, com probabilidade \dfrac{1}{n}, o jogador já pegou o carro na primeira escolha.
  2. Probabilidade da escolha inicial ser errada.
    • Complementando, a probabilidade de a escolha inicial NÃO ser a porta com o carro é
    1 - \frac{1}{n} = \frac{n-1}{n}.
    • Nessas situações (quando a escolha inicial é errada), o carro está em uma das outras n-1 portas.
  3. A ação do apresentador (crucial).
    • O apresentador sabe onde está o carro. Ele abre n-2 portas entre as n-1 portas que não foram escolhidas pelo jogador, mas ele sempre evita abrir a porta com o carro. Logo, depois que o apresentador abre n-2 portas, sobra exatamente uma porta não escolhida pelo jogador e não aberta pelo apresentador — e essa porta é:
      • se a escolha inicial foi correta, essa outra porta restante é uma cabra;
      • se a escolha inicial foi errada (portanto o carro está entre as outras n-1 portas), o apresentador pode (e vai) abrir todas as cabras entre essas n-1 portas exceto a porta com o carro; assim a outra porta restante é precisamente a porta com o carro.
  4. Consequência para a estratégia de trocar:
    • Se a escolha inicial foi correta (probabilidade \dfrac{1}{n}), trocar faz o jogador perder.
    • Se a escolha inicial foi errada (probabilidade \dfrac{n-1}{n}), trocar faz o jogador ganhar, porque a outra porta restante contém o carro.
    • Logo, a probabilidade de ganhar ao trocar é exatamente a probabilidade de ter escolhido errado no começo:
    P(\text{ganhar trocando}) = \frac{n-1}{n}.
  5. Exemplo concreto para fixar a ideia (caso n=3, o clássico):
    • P(\text{escolha correta inicialmente})=\dfrac{1}{3}. Trocar perde neste caso.
    • P(\text{escolha errada inicialmente})=\dfrac{2}{3}. Trocar ganha nestes casos.
    • Portanto trocar ganha com probabilidade \dfrac{2}{3}, que é \dfrac{n-1}{n} para n=3.
Resumo teórico: a razão pela qual trocar aumenta tanto a probabilidade é que a escolha inicial concentra apenas \dfrac{1}{n} de chance de sucesso; o restante da chance \dfrac{n-1}{n} é “transferida” para a outra porta que sobra quando o apresentador abre as n-2 portas de cabra.

Passo 3

Como projetar a simulação: algoritmo detalhado passo a passo (para você implementar num computador).
Variáveis que vamos usar: n = número de portas; N = número de repetições (simulações) que rodaremos; contadores para registrar vitórias quando trocar.
Algoritmo (versão descritiva, linha a linha):
  1. Fixar n (por exemplo n=3,4,10,100) e N (por exemplo N=10000 ou N=100000 para boa aproximação).
  2. Inicializar wins\_switch = 0.
  3. Repetir para i de 1 até N:
    a) Colocar o carro em uma porta escolhida uniformemente entre as n portas (por exemplo sortear índice inteiro de 1 a n). Denotar essa porta por car\_door.
    b) O jogador escolhe uma porta inicial uniformemente entre as n portas. Denotar por player\_choice.
    c) O apresentador abre n-2 portas entre as portas que não são player\_choice e que também não são car\_door. Se houver várias opções, escolher aleatoriamente quais abrir — porém sempre garantindo que portas abertas são cabras. Após abrir n-2 portas, sobrará exatamente uma porta não escolhida pelo jogador e não aberta; chamar essa porta de other\_closed.
    d) Estratégia de troca: o jogador troca sua escolha para other\_closed.
    e) Se other\_closed = car\_door, incrementar wins\_switch em 1.
  4. Ao final, estimativa empírica da probabilidade de ganhar trocando é
\hat{P} = \frac{wins\_switch}{N}.
Observações de implementação importantes (pra não cair em armadilhas):
  • Ao implementar o passo 3c, é preciso garantir que o apresentador nunca abra a porta com o carro nem a porta escolhida. Em código: construir a lista de portas possíveis para abrir como todas as portas exceto player\_choice e exceto car\_door, e então sortear n-2 portas dessa lista para abrir.
  • Depois de abrir, a lista de portas fechadas será \{player\_choice\} \cup \{ \text{ótica outra porta não aberta}\}óã. Identificar explicitamente qual é a outra porta para trocar.
  • Use um gerador de números aleatórios confiável; com N suficientemente grande, \hat{P} ficará próximo de \dfrac{n-1}{n}.

Passo 4

Exemplo de código em Python (comentado linha a linha) que você pode copiar e rodar. Explico cada parte para você entender bem o que cada linha faz.
Exemplo de implementação (não é necessário saber Python para entender a lógica; é só um roteiro executável):
  • Explicação: random.randrange(n) gera um inteiro entre 0 e n-1 uniformemente. Usar índices 0…n-1 para as portas.
Código:
import random

def simulate_monty_hall(n, N):
    wins_switch = 0
    for _ in range(N):
        car_door = random.randrange(n)           # porta com o carro
        player_choice = random.randrange(n)      # escolha inicial do jogador

        # portas que o apresentador pode abrir: todas exceto player_choice e car_door
        possible_open = [d for d in range(n) if d != player_choice and d != car_door]

        # apresentador abre n-2 portas escolhidas aleatoriamente dentre possible_open
        opened = random.sample(possible_open, n-2)

        # portas fechadas restantes (não abertas)
        closed = [d for d in range(n) if d not in opened]

        # closed deve conter exatamente 2 portas: player_choice e the other one
        # identificamos a outra porta:
        other_closed = [d for d in closed if d != player_choice][0]

        # jogador troca para other_closed
        if other_closed == car_door:
            wins_switch += 1

    return wins_switch / N

# Exemplo de uso:
for n in [3, 4, 10, 100]:
    est = simulate_monty_hall(n, 20000)
    print("n =", n, "estimativa P(trocar) ≈", est)
O que esse código faz:
  • Roda N experimentos.
  • Em cada experimento, sorteia porta do carro e escolha do jogador.
  • Constrói a lista de portas que o apresentador pode abrir (excluindo carro e escolha).
  • Abre n-2 delas (aleatoriamente se houver mais de n-2 opções).
  • Determina a outra porta fechada e verifica se ela é a porta com o carro.
  • Conta vitórias quando trocar.

Passo 5

O que você espera ver ao rodar a simulação e como interpretar os resultados.
  • Para cada n, ao rodar com N grande, a estimativa empírica \hat{P} deve se aproximar do valor teórico \dfrac{n-1}{n}.
  • Exemplos teóricos:
    • Para n=3: \dfrac{n-1}{n}=\dfrac{2}{3}\approx0{,}6667.
    • Para n=4: \dfrac{3}{4}=0{,}75.
    • Para n=10: \dfrac{9}{10}=0{,}9.
    • Para n=100: \dfrac{99}{100}=0{,}99.
  • Com N=20000 ou mais, a estimativa \hat{P} normalmente ficará bem próxima desses valores (variabilidade decresce quando N aumenta).
Dica prática: se você rodar e obtiver um valor distante do teórico, verifique se o apresentador foi implementado corretamente (lembre: não pode abrir a porta do carro nem a porta escolhida).

Passo 6

Pequena verificação mental rápida (checagem por casos extremos) para consolidar a intuição.
  • Caso n=1: situação trivial e sem sentido prático (não há escolha). A fórmula daria \dfrac{n-1}{n}=0 — trocar não existe.
  • Caso n=2: o apresentador abriria 0 portas (já que n-2=0), sobrariam as duas portas e trocar simplesmente inverte a escolha; aqui \dfrac{n-1}{n}=\dfrac{1}{2} — faz sentido: escolher uma entre duas portas é 50/50.
  • Caso n muito grande (por exemplo n=100): escolher inicialmente a porta certa tem probabilidade 1/100. O apresentador abre 98 portas de cabra; ao trocar praticamente você ficará com a porta que concentra quase toda a probabilidade (99/100) — por isso trocar é muito vantajoso.

Resposta

\dfrac{n-1}{n}

Exercícios relacionados