Resolvendo Problemas com o Método de Monte Carlo

Published

August 29, 2025

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

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.

Neste documento, preparado pelo Professor Hedibert Lopes, você pode encontrar uma cronologia muito mais detalhada do método, acompanhada de diversas referências bibliográficas. Hedibert, em conjunto com o Professor Dani Gamerman, é autor do livro Markov Chain Monte Carlo: Stochastic Simulation for Bayesian Inference e uma referência internacional em estatística bayesiana.


Exemplo 1 — Estimando π pelo “jogo de dardos”

Considere o quadrado [0,1]×[0,1] e o quarto de círculo de raio 1 definido por x2+y21.

  • A área do quadrado é 1.

  • A área do quarto de círculo é πr2/4=π/4, pois r=1.

Assim, a razão entre as áreas é exatamente:

área do quarto de círculoárea do quadrado=π4

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 π:

π^=4×#dentron

Quanto maior o número de pontos n, 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 random

def estima_pi(n_sim = 100_000, seed = 42):
  
    random.seed(seed)
    dentro = 0
    
    for _ in range(n_sim):
        x, y = random.random(), random.random()
        if x**2 + y**2 <= 1.0:
            dentro += 1
    return 4.0 * dentro / n_sim

for 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

I=abg(x)dx.

O estimador de Monte Carlo

Se gerarmos X1,,XniidUnif(a,b), um estimador natural é

I^n=(ba)1ni=1ng(Xi)

Esse é o estimador por média simples, também chamado plain Monte Carlo.

Exemplo

Vamos calcular a integral de f(x)=ex2 em [0,1].

import math, random
from statistics import mean, stdev

random.seed(123)

def integral_mc(g, a, b, n=100_000):
    xs = [random.uniform(a, b) for _ in range(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, ep

g = 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*ep

print(f"Î ≈ {Ihat:.6f}  EP ≈ {ep:.6f}  IC95% ≈ [{lo:.6f}, {hi:.6f}]")
Î ≈ 0.746341  EP ≈ 0.000637  IC95% ≈ [0.745093, 0.747588]
print(f"Valor verdadeiro ≈ {0.5*math.sqrt(math.pi)*math.erf(1.0):.6f}")
Valor verdadeiro ≈ 0.746824

Por que funciona?

Se XUnif(a,b), a densidade é f(x)=1ba. Logo,

E[g(X)]=abg(x)f(x)dx=1(ba)abg(x)dx

Portanto,

I=(ba)E[g(X)].

A seguir, listamos três propriedades fundamentais que explicam por que esse método funciona:

  1. Temos que E[I^n]=I. Em termos estatísticos, dizemos que o estimador I^n é não viesado. A seguir demonstramos essa propriedade.

E[I^n]=E[(ba)1ni=1ng(Xi)]=(ba)ni=1nE[g(Xi)]=(ba)ni=1nabg(x)1(ba)dx=(ba)n1(ba)i=1nabg(x)dx=(ba)n1(ba)i=1nI=(ba)n1(ba)nI=I.

Além disso,

Var[I^n]=Var[(ba)1ni=1ng(Xi)]=(ba)2n2i=1nVar[g(Xi)]=(ba)2n2nVar[g(Xi)]=(ba)2nVar[g(Xi)].

  1. Pela Lei dos Grandes Números, I^nq.c.I quando n.

  2. Incerteza (Teorema do Limite Central). A partir do que vimos antes, temos que

n(I^nI)dN(0,(ba)2Var[g(X)]).

Ou seja,

I^nN(I,(ba)2nVar[g(X)]).

Portanto, podemos estimar o erro padrão por

EP(I^n)(ba)Var^[g(X)]n.

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 I^n, 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 [a,b]×[0,M] 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 esperadogerar amostrascalcular 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 π/4. A “média amostral” que calculamos é a proporção de pontos que, de fato, caíram dentro. A LGN nos assegura que:

#dentronMédia Amostralnπ4Média Teórica

  • Para calcular a integral: A “média teórica” é o valor esperado da função, E[g(X)]. A “média amostral” que calculamos é a média dos valores da função aplicados aos nossos números sorteados. A LGN garante que:

1ni=1ng(Xi)Média AmostralnE[g(X)]Média Teórica

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.