Neste post, a ideia é apresentar o método de Monte Carlo e algumas de suas aplicações de forma prática. Vou mostrar exemplos simples, incluindo scripts em Python, que ilustram como o método funciona na prática. Ao longo do texto, também discuto algumas propriedades matemáticas que dão sustentação ao método — mas, se esse não for o seu foco, você pode tranquilamente pular essa parte e considerar somente os exemplos.
Por que “Monte Carlo”?
O nome foi popularizado nos anos 1940 por Stanislaw Ulam e John von Neumann, no Projeto Manhattan em Los Alamos. Na época, cálculos de probabilidades e integrais em física nuclear eram considerados intratáveis por métodos analíticos.
Em recuperação de uma cirurgia, Ulam refletiu sobre jogos de paciência: qual a chance de uma partida dar certo? Em vez de derivar uma fórmula, percebeu que poderia simular muitas partidas e estimar a probabilidade pela frequência observada. Nascia a ideia de usar amostragem aleatória para resolver problemas numéricos.
O nome Monte Carlo faz alusão ao cassino de Mônaco — uma metáfora para o uso de “sorteios” controlados. Desde então, o método expandiu-se da física para estatística, finanças, engenharia e IA.
Cassino de Monte Carlo em Mônaco
O filme O Matemático retrata parte dessa história e o papel das simulações na ciência moderna.
A ideia central é simples: usar amostragem aleatória para estimar quantidades numéricas difíceis de calcular analiticamente. A sacada é que, com simulações suficientes, a frequência observada (quantas partidas deram certo) se aproxima da probabilidade real. Este princípio, conhecido como a Lei dos Grandes Números, é o que faz o método de Monte Carlo funcionar.
1940s – Projeto Manhattan Ulam e von Neumann desenvolvem a ideia em Los Alamos.
1946 – Inspiração no jogo de paciência Ulam imagina simular partidas para estimar probabilidades.
1947 – Nome “Monte Carlo” Escolhido em referência ao cassino de Mônaco.
1950–1960 Método se espalha para física, estatística e pesquisa operacional.
1970+ Com computadores mais potentes, o método ganhou ampla difusão e passou a ser aplicado em muitas áreas.
Hoje Aplicações vão de finanças a IA e modelagem científica.
A estratégia de Monte Carlo se baseia em três pilares simples:
Aleatoriedade: usamos sorteios controlados para explorar um problema. Em vez de calcular uma resposta exata, nós a descobrimos através de amostragem.
Lei dos Grandes Números: A solução acontece na repetição. Uma única amostra não diz muito, mas milhares (ou milhões) delas revelam um padrão confiável. Esse é o princípio da consistência: a média amostral converge para a média verdadeira do sistema.
Computação intensiva: O método se tornou prático com o advento dos computadores, que conseguem realizar milhões de “experimentos” aleatórios em segundos.
Exemplo 1 — Estimando π pelo “jogo de dardos”
Considere o quadrado e o quarto de círculo de raio 1 definido por .
A área do quadrado é .
A área do quarto de círculo é , pois .
Assim, a razão entre as áreas é exatamente:
áíá
Agora, se lançarmos pontos uniformemente no quadrado, a proporção de pontos que cai dentro do quarto de círculo aproxima essa razão. Multiplicando por 4, obtemos uma estimativa de :
Quanto maior o número de pontos , menor a variabilidade da estimativa. Pela Lei dos Grandes Números, converge para o valor verdadeiro de .
O GIF abaixo mostra esse processo como um jogo de dardos: a cada ponto lançado, verificamos se caiu dentro do quarto de círculo (em vermelho) ou fora (em azul). A cada quadro, a estimativa vai ficando mais estável.
Observe no GIF como a estimativa de varia bastante no início, mas gradualmente se estabiliza perto do valor verdadeiro de 3.14159… à medida que mais pontos são lançados. Essa é a Lei dos Grandes Números.
O código abaixo implementa essa técnica para a estimativa de .
import randomdef estima_pi(n_sim =100_000, seed =42): random.seed(seed) dentro =0for _ inrange(n_sim): x, y = random.random(), random.random()if x**2+ y**2<=1.0: dentro +=1return4.0* dentro / n_simfor n in (1000, 10000, 100000):print(f"n={n:>7} → pi ≈ {estima_pi(n):.6f}")
n= 1000 → pi ≈ 3.128000
n= 10000 → pi ≈ 3.126000
n= 100000 → pi ≈ 3.137280
Exemplo 2 — Integral por Monte Carlo
O truque de ‘atirar dardos’ para medir uma área é poderoso, mas como aplicamos essa ideia a problemas mais abstratos, como calcular uma integral? A resposta está em reformular o problema em termos de um valor esperado, que podemos estimar com uma média amostral.
Queremos calcular
O estimador de Monte Carlo
Se gerarmos , um estimador natural é
Esse é o estimador por média simples, também chamado plain Monte Carlo.
Exemplo
Vamos calcular a integral de em .
import math, randomfrom statistics import mean, stdevrandom.seed(123)def integral_mc(g, a, b, n=100_000): xs = [random.uniform(a, b) for _ inrange(n)] gx = [g(x) for x in xs] Ihat = (b - a) * mean(gx)# EP por CLT (amostral): (b-a)*sd(f(X))/sqrt(n) ep = (b - a) * (stdev(gx) / math.sqrt(n))return Ihat, epg =lambda x: math.exp(-x**2)Ihat, ep = integral_mc(g, 0.0, 1.0, n=100_000)lo, hi = Ihat -1.96*ep, Ihat +1.96*epprint(f"Î ≈ {Ihat:.6f} EP ≈ {ep:.6f} IC95% ≈ [{lo:.6f}, {hi:.6f}]")
Î ≈ 0.746341 EP ≈ 0.000637 IC95% ≈ [0.745093, 0.747588]
A seguir, listamos três propriedades fundamentais que explicam por que esse método funciona:
Temos que . Em termos estatísticos, dizemos que o estimador é não viesado. A seguir demonstramos essa propriedade.
Além disso,
Pela Lei dos Grandes Números, quando .
Incerteza (Teorema do Limite Central). A partir do que vimos antes, temos que
Ou seja,
Portanto, podemos estimar o erro padrão por
Em outras palavras, o TCL nos diz que a distribuição do nosso estimador se aproxima de uma Normal centrada no valor verdadeiro. Essa aproximação Normal é o que nos permite construir intervalos de confiança para , quantificando a incerteza da nossa estimativa.
Observação: este é o estimador por média (também chamado plain Monte Carlo). É diferente do “hit-or-miss”, que amostra no retângulo e conta proporções abaixo da curva; o estimador por média costuma ter variância menor e é o padrão para integrais.
💡 Essência do Método de Monte Carlo:
Monte Carlo = transformar problema em valor esperado → gerar amostras → calcular sua média
A Lei dos Grandes Números
A Lei dos Grandes Números (LGN) é a garantia de que o método funciona. Ela garante que a média de uma amostra aleatória grande converge para a “média verdadeira” do sistema que investigamos.
Em Monte Carlo, a estratégia é reformular um problema complexo de modo que sua resposta seja uma média teórica (um valor esperado). Em seguida, usamos o computador para gerar muitas amostras aleatórias e simplesmente calcular sua média. A LGN garante que essa média amostral se aproxima do resultado que buscamos.
Veja como essa ideia se relaciona com os nossos dois exemplos:
Para estimar: A “média teórica” que queremos descobrir é a probabilidade de um ponto cair no quarto de círculo, que vale . A “média amostral” que calculamos é a proporção de pontos que, de fato, caíram dentro. A LGN nos assegura que:
ééó
Para calcular a integral: A “média teórica” é o valor esperado da função, . A “média amostral” que calculamos é a média dos valores da função aplicados aos nossos números sorteados. A LGN garante que:
ééó
Em resumo, o método de Monte Carlo consiste em transformar um problema complexo em um valor esperado, gerar amostras aleatórias e calcular sua média. A Lei dos Grandes Números garante que essa média amostral converge para a média teórica, tornando a estratégia viável.
Conclusão
A história de Monte Carlo revela como uma ideia simples pode ter grande impacto: usar sorteios para resolver cálculos complexos. O que nasceu em jogos de paciência e nos desafios da física nuclear hoje é um dos métodos mais versáteis e aplicados da estatística moderna.