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
, onde
é 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 é
, onde é a quantidade de portas. - Dados implícitos que vamos usar:
- Há
portas numeradas de 1 a . - Atrás de exatamente uma porta está o carro (prêmio); atrás das outras
portas estão cabras (perdas). - O jogador escolhe uma porta inicialmente, uniformemente ao acaso.
- O apresentador sabe onde está o carro e sempre abre
portas que mostram cabras, nunca abrindo a porta escolhida pelo jogador nem a porta com o carro. - Após o apresentador abrir
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.
- Há
- 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
.
Passo 2
Intuição e demonstração teórica (a “aula” para entender por que o resultado é
).
Vou explicar passo a passo e com cuidado, sem pular etapas.
-
Probabilidade da escolha inicial ser correta.
- Ao escolher uma porta aleatoriamente entre
, a probabilidade de ter escolhido a porta com o carro é
- Isso significa que, com probabilidade
, o jogador já pegou o carro na primeira escolha.
- Ao escolher uma porta aleatoriamente entre
-
Probabilidade da escolha inicial ser errada.
- Complementando, a probabilidade de a escolha inicial NÃO ser a porta com o carro é
- Nessas situações (quando a escolha inicial é errada), o carro está em uma das outras
portas.
-
A ação do apresentador (crucial).
- O apresentador sabe onde está o carro. Ele abre
portas entre as portas que não foram escolhidas pelo jogador, mas ele sempre evita abrir a porta com o carro. Logo, depois que o apresentador abre 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
portas), o apresentador pode (e vai) abrir todas as cabras entre essas portas exceto a porta com o carro; assim a outra porta restante é precisamente a porta com o carro.
- O apresentador sabe onde está o carro. Ele abre
-
Consequência para a estratégia de trocar:
- Se a escolha inicial foi correta (probabilidade
), trocar faz o jogador perder. - Se a escolha inicial foi errada (probabilidade
), 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:
- Se a escolha inicial foi correta (probabilidade
-
Exemplo concreto para fixar a ideia (caso
, o clássico): -
. Trocar perde neste caso. -
. Trocar ganha nestes casos. - Portanto trocar ganha com probabilidade
, que é para .
-
Resumo teórico: a razão pela qual trocar aumenta tanto a probabilidade é que a escolha inicial concentra apenas
de chance de sucesso; o restante da chance
é “transferida” para a outra porta que sobra quando o apresentador abre as
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úmero de portas;
= número de repetições (simulações) que rodaremos; contadores para registrar vitórias quando trocar.
Algoritmo (versão descritiva, linha a linha):
- Fixar
(por exemplo ) e (por exemplo ou para boa aproximação). - Inicializar
. - Repetir para
de até :
a) Colocar o carro em uma porta escolhida uniformemente entre asportas (por exemplo sortear índice inteiro de 1 a ). Denotar essa porta por .
b) O jogador escolhe uma porta inicial uniformemente entre asportas. Denotar por .
c) O apresentador abreportas entre as portas que não são e que também não são . Se houver várias opções, escolher aleatoriamente quais abrir — porém sempre garantindo que portas abertas são cabras. Após abrir portas, sobrará exatamente uma porta não escolhida pelo jogador e não aberta; chamar essa porta de .
d) Estratégia de troca: o jogador troca sua escolha para.
e) Se, incrementar em 1. - Ao final, estimativa empírica da probabilidade de ganhar trocando é
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
e exceto , e então sortear portas dessa lista para abrir. - Depois de abrir, a lista de portas fechadas será
. Identificar explicitamente qual é a outra porta para trocar. - Use um gerador de números aleatórios confiável; com
suficientemente grande, ficará próximo de .
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 entre0en-1uniformemente. 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
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
delas (aleatoriamente se houver mais de 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
, ao rodar com grande, a estimativa empírica deve se aproximar do valor teórico . - Exemplos teóricos:
- Para
: . - Para
: . - Para
: . - Para
: .
- Para
- Com
ou mais, a estimativa normalmente ficará bem próxima desses valores (variabilidade decresce quando 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
: situação trivial e sem sentido prático (não há escolha). A fórmula daria — trocar não existe. - Caso
: o apresentador abriria portas (já que ), sobrariam as duas portas e trocar simplesmente inverte a escolha; aqui — faz sentido: escolher uma entre duas portas é 50/50. - Caso
muito grande (por exemplo ): escolher inicialmente a porta certa tem probabilidade . O apresentador abre portas de cabra; ao trocar praticamente você ficará com a porta que concentra quase toda a probabilidade — por isso trocar é muito vantajoso.