Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda O Que São Métodos de Monte Carlo? | Métodos de Monte Carlo
Introdução ao Aprendizado por Reforço
course content

Conteúdo do Curso

Introdução ao Aprendizado por Reforço

Introdução ao Aprendizado por Reforço

1. Teoria Central de RL
2. Problema do Bandido de Múltiplos Braços
3. Programação Dinâmica
4. Métodos de Monte Carlo
5. Aprendizado por Diferença Temporal

book
O Que São Métodos de Monte Carlo?

Note
Definição

Métodos de Monte Carlo (MC) são uma classe de algoritmos computacionais que dependem de amostragem aleatória para estimar resultados numéricos.

Métodos de Monte Carlo são utilizados quando soluções determinísticas são difíceis ou impossíveis de obter. Eles substituem cálculos exatos por aproximações que melhoram com o aumento do número de amostras aleatórias.

Como funcionam?

Métodos de Monte Carlo podem variar de uma tarefa para outra, mas todos tendem a seguir um único padrão:

  1. Definir um domínio de possíveis entradas;
  2. Gerar entradas aleatórias a partir de uma distribuição de probabilidade;
  3. Avaliar uma função nessas entradas;
  4. Agregar os resultados para produzir uma estimativa.

Exemplos

Embora o padrão descrito acima possa parecer complexo, estes exemplos devem ajudar a esclarecer a ideia por trás dele.

Cálculo de Integrais

O cálculo de integrais é uma tarefa não trivial que geralmente exige a aplicação de diversas técnicas para se obter o resultado correto.

Vamos tentar aplicar o método de Monte Carlo para resolver esta integral:

010111+(x+y)2dxdy\int_0^1 \int_0^1 \frac{1}{1 + (x + y)^2} \, dx \, dy
  1. Domínio de entrada: esta integral dupla possui duas variáveis, x[0,1]x \in [0, 1] e y[0,1]y \in [0, 1];
  2. Geração: ambas as variáveis são independentes entre si e distribuídas uniformemente;
  3. Avaliação: para obter um valor pontual, pode-se utilizar a função sob o sinal de integração;
  4. Agregação: o valor desta integral pode ser definido como o volume sob a curva. O volume pode ser calculado como o produto da área da base pelo valor médio da altura. A área da base é 1 (quadrado unitário) e a altura média é a média dos resultados obtidos na etapa anterior.
12345678910111213141516
import numpy as np result = 0 # Many samples are required for estimates to be precise for i in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Computation of point value value = 1 / (1 + (x + y) ** 2) # Mean aggregation result += (value - result) / (i + 1) # Closed-form solution of this integral true_result = 2*np.arctan(2) - np.pi/2 - (1/2)*np.log(5) + np.log(2) print(f"Approximated result: {result}") print(f"True result: {true_result}")
copy

Aproximação de π\Large\pi

A aproximação de π\pi é um dos usos mais emblemáticos do método de Monte Carlo. Este exemplo ilustra como a amostragem aleatória pode resolver um problema geométrico sem a necessidade de cálculo avançado.

Considere um quadrado unitário com um quarto de círculo inscrito:

  • O quadrado abrange [0,1]×[0,1][0, 1] \times [0, 1];
  • O quarto de círculo possui raio 1 e está centrado na origem.

A área do quarto de círculo é πr24\displaystyle\frac{\pi r^2}{4} ou π4\displaystyle\frac{\pi}{4}, e a área do quadrado é 1. Agora, vamos amostrar pontos aleatórios dentro do quadrado. Com um tamanho de amostra suficientemente grande:

Points inside the quarter circleTotal pointsπ4\frac{\text{Points inside the quarter circle}}{\text{Total points}} \approx \frac\pi4

Assim, o valor de π\pi pode ser calculado como

π4Points insideTotal points\pi \approx 4 \cdot \frac{\text{Points inside}}{\text{Total points}}
1234567891011121314151617181920212223242526272829
import numpy as np import matplotlib.pyplot as plt # Lists for coordinates inside = [] outside = [] # Many samples are required for estimates to be precise for _ in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Splitting points inside and outside of the circle if x**2 + y**2 <= 1: inside.append((x, y)) else: outside.append((x, y)) # Plotting points plt.figure(figsize=(6,6)) plt.scatter(*zip(*inside), color="blue", s=1, label="Inside") plt.scatter(*zip(*outside), color="red", s=1, label="Outside") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show() estimate = 4 * len(inside) / (len(inside) + len(outside)) print(f"Estimated value of pi: {estimate}") print(f"True value of pi: {np.pi}")
copy

Bandidos de Múltiplos Braços

No contexto dos bandidos de múltiplos braços, um objetivo fundamental é estimar o valor da ação para cada braço — ou seja, a recompensa esperada ao escolher uma determinada ação. Uma estratégia comum é estimar esses valores por meio da média das recompensas observadas obtidas ao acionar cada braço ao longo do tempo. Essa técnica é, na verdade, um método de Monte Carlo.

Métodos de Monte Carlo para MDPs

Ao contrário dos métodos de programação dinâmica, que dependem de um modelo completo e preciso das dinâmicas do ambiente, os métodos de Monte Carlo aprendem exclusivamente a partir da experiência — ou seja, de sequências reais ou simuladas de estados, ações e recompensas.

Isso torna as abordagens de Monte Carlo especialmente poderosas: elas não exigem nenhum conhecimento prévio sobre como o ambiente funciona. Em vez disso, extraem estimativas de valor diretamente do que ocorre durante a interação. Em muitos cenários do mundo real, onde modelar o ambiente é impraticável ou impossível, essa capacidade de aprender a partir da experiência bruta é uma grande vantagem.

Quando a interação direta com o ambiente é custosa, arriscada ou lenta, os métodos de Monte Carlo também podem aprender a partir de experiências simuladas, desde que exista uma simulação confiável. Isso permite exploração e aprendizado em um ambiente controlado e repetível — embora pressuponha acesso a um modelo capaz de gerar transições plausíveis.

question mark

Qual é uma vantagem principal de usar métodos de Monte Carlo em relação aos métodos de programação dinâmica na resolução de MDPs?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

Introdução ao Aprendizado por Reforço

Introdução ao Aprendizado por Reforço

1. Teoria Central de RL
2. Problema do Bandido de Múltiplos Braços
3. Programação Dinâmica
4. Métodos de Monte Carlo
5. Aprendizado por Diferença Temporal

book
O Que São Métodos de Monte Carlo?

Note
Definição

Métodos de Monte Carlo (MC) são uma classe de algoritmos computacionais que dependem de amostragem aleatória para estimar resultados numéricos.

Métodos de Monte Carlo são utilizados quando soluções determinísticas são difíceis ou impossíveis de obter. Eles substituem cálculos exatos por aproximações que melhoram com o aumento do número de amostras aleatórias.

Como funcionam?

Métodos de Monte Carlo podem variar de uma tarefa para outra, mas todos tendem a seguir um único padrão:

  1. Definir um domínio de possíveis entradas;
  2. Gerar entradas aleatórias a partir de uma distribuição de probabilidade;
  3. Avaliar uma função nessas entradas;
  4. Agregar os resultados para produzir uma estimativa.

Exemplos

Embora o padrão descrito acima possa parecer complexo, estes exemplos devem ajudar a esclarecer a ideia por trás dele.

Cálculo de Integrais

O cálculo de integrais é uma tarefa não trivial que geralmente exige a aplicação de diversas técnicas para se obter o resultado correto.

Vamos tentar aplicar o método de Monte Carlo para resolver esta integral:

010111+(x+y)2dxdy\int_0^1 \int_0^1 \frac{1}{1 + (x + y)^2} \, dx \, dy
  1. Domínio de entrada: esta integral dupla possui duas variáveis, x[0,1]x \in [0, 1] e y[0,1]y \in [0, 1];
  2. Geração: ambas as variáveis são independentes entre si e distribuídas uniformemente;
  3. Avaliação: para obter um valor pontual, pode-se utilizar a função sob o sinal de integração;
  4. Agregação: o valor desta integral pode ser definido como o volume sob a curva. O volume pode ser calculado como o produto da área da base pelo valor médio da altura. A área da base é 1 (quadrado unitário) e a altura média é a média dos resultados obtidos na etapa anterior.
12345678910111213141516
import numpy as np result = 0 # Many samples are required for estimates to be precise for i in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Computation of point value value = 1 / (1 + (x + y) ** 2) # Mean aggregation result += (value - result) / (i + 1) # Closed-form solution of this integral true_result = 2*np.arctan(2) - np.pi/2 - (1/2)*np.log(5) + np.log(2) print(f"Approximated result: {result}") print(f"True result: {true_result}")
copy

Aproximação de π\Large\pi

A aproximação de π\pi é um dos usos mais emblemáticos do método de Monte Carlo. Este exemplo ilustra como a amostragem aleatória pode resolver um problema geométrico sem a necessidade de cálculo avançado.

Considere um quadrado unitário com um quarto de círculo inscrito:

  • O quadrado abrange [0,1]×[0,1][0, 1] \times [0, 1];
  • O quarto de círculo possui raio 1 e está centrado na origem.

A área do quarto de círculo é πr24\displaystyle\frac{\pi r^2}{4} ou π4\displaystyle\frac{\pi}{4}, e a área do quadrado é 1. Agora, vamos amostrar pontos aleatórios dentro do quadrado. Com um tamanho de amostra suficientemente grande:

Points inside the quarter circleTotal pointsπ4\frac{\text{Points inside the quarter circle}}{\text{Total points}} \approx \frac\pi4

Assim, o valor de π\pi pode ser calculado como

π4Points insideTotal points\pi \approx 4 \cdot \frac{\text{Points inside}}{\text{Total points}}
1234567891011121314151617181920212223242526272829
import numpy as np import matplotlib.pyplot as plt # Lists for coordinates inside = [] outside = [] # Many samples are required for estimates to be precise for _ in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Splitting points inside and outside of the circle if x**2 + y**2 <= 1: inside.append((x, y)) else: outside.append((x, y)) # Plotting points plt.figure(figsize=(6,6)) plt.scatter(*zip(*inside), color="blue", s=1, label="Inside") plt.scatter(*zip(*outside), color="red", s=1, label="Outside") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show() estimate = 4 * len(inside) / (len(inside) + len(outside)) print(f"Estimated value of pi: {estimate}") print(f"True value of pi: {np.pi}")
copy

Bandidos de Múltiplos Braços

No contexto dos bandidos de múltiplos braços, um objetivo fundamental é estimar o valor da ação para cada braço — ou seja, a recompensa esperada ao escolher uma determinada ação. Uma estratégia comum é estimar esses valores por meio da média das recompensas observadas obtidas ao acionar cada braço ao longo do tempo. Essa técnica é, na verdade, um método de Monte Carlo.

Métodos de Monte Carlo para MDPs

Ao contrário dos métodos de programação dinâmica, que dependem de um modelo completo e preciso das dinâmicas do ambiente, os métodos de Monte Carlo aprendem exclusivamente a partir da experiência — ou seja, de sequências reais ou simuladas de estados, ações e recompensas.

Isso torna as abordagens de Monte Carlo especialmente poderosas: elas não exigem nenhum conhecimento prévio sobre como o ambiente funciona. Em vez disso, extraem estimativas de valor diretamente do que ocorre durante a interação. Em muitos cenários do mundo real, onde modelar o ambiente é impraticável ou impossível, essa capacidade de aprender a partir da experiência bruta é uma grande vantagem.

Quando a interação direta com o ambiente é custosa, arriscada ou lenta, os métodos de Monte Carlo também podem aprender a partir de experiências simuladas, desde que exista uma simulação confiável. Isso permite exploração e aprendizado em um ambiente controlado e repetível — embora pressuponha acesso a um modelo capaz de gerar transições plausíveis.

question mark

Qual é uma vantagem principal de usar métodos de Monte Carlo em relação aos métodos de programação dinâmica na resolução de MDPs?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1
some-alt