Método de Monte Carlo em Python

O método de Monte Carlo foi um método que aprendi na época de faculdade para resolver problemas estocásticos. O método de monte Carlo pode ser utilizado em inumerados problemas, mas basicamente ele pode ser uma enorme mão na roda para resolver problemas em que o uso de integral seja complexo ou não seja utilizado, então ele pode ser muito bom para se estimar o valor esperado da integral.

Agora um pouco de história, o Método de Monte Carlo, foi desenvolvido na época da segunda Guerra Mundial junto com o Projeto Manhattan (o projeto da bomba atômica), coincidentemente por Von Neumann e Fermi, Von Neumann também foi quem desenvolveu a idéia de geração de números pseudo-aleatórios baseados em números semente e acabou aplicando seu algoritmo para ser utilizado na geração de números pseudo-aleatórios no método de Monte Carlo.

Agora a pergunta, por que se chama Monte Carlo? Pelo que se sabe, vem da febre dos cassinos, Monte Carlo é uma região com muitos cassinos e esse método pode ser utilizado para se vencer o Black Jack ou famoso 21, como não se sabe as cartas que o Dealer tem a mão, o jogador pode apenas presumir e inferir quais cartas deixaram o baralho. Apenas com essa informação, o jogador consegue prever qual mão ele consegue bater.

Os cassinos para se prevenirem disso, aplicam algumas metodologias para se evitar a contagem das cartas. Este é um assunto que geralmente vem a tona em noticiários falando de universitários de matemática e estatística que conseguiram “quebrar a banca”, tanto que existe um filme com o nome Quebrando a Banca contando essa história.

Então resolvi criar um exemplo do uso do método de Monte Carlo, para estimar o número PI, atentem-se que para se chegar cada vez mais próximo do valor real de Pi, devemos ter o maior número de iterações:


import random

n=1000000 #limite de iterações
sucessos = 0
tentativas = 0

for i in range (1, n):
tentativas += 1 #tentativas de calcular, que basicamente vai ser n-1
x, y = random.random(), random.random() #sorteia dois numeros aleatorios de 0 a 1 e atribui pra x e y
if (x*x + y*y) <= 1.0: # se a soma dos quadrados for menor ou igual que 1, equação do circulo (x^2 + y^2 ≤ 1^2) sucessos += 1.0 #houve sucesso pi = (sucessos / tentativas) * 4 print “Pi = %s” %(pi) print “Pi/4 = %s” %(sucessos / tentativas) [/python]

Vinicius Viana

Sobre o Autor

Analista Front-end / Web Analytics na Wunderman. Já atuei no desenvolvimento de vários sites e e-commerces, atuando sempre na área de marketing digital (SEO, Web Analytics e Links Patrocinados). Certificado em Google Analytics - GAIQ

Deixe um Comentário