Simulación Montecarlo

El método de Montecarlo es un método no determinista o estadístico numérico, usado para aproximar expresiones matemáticas complejas y costosas de evaluar con exactitud. El método se llamó así en referencia al Casino de Montecarlo (Mónaco) por ser “la capital del juego de azar”, al ser la ruleta un generador simple de números aleatorios. El nombre y el desarrollo sistemático de los métodos de Montecarlo datan aproximadamente de 1944 y se mejoraron enormemente con el desarrollo de la computadora.

Referencia:


1. Introducción

  • Inventado por Stanislaw Ulam y a John von Neumann. Ulam ha explicado cómo se le ocurrió la idea mientras jugaba un solitario durante una enfermedad en 1946.
  • Advirtió que resulta mucho más simple tener una idea del resultado general del solitario haciendo pruebas múltiples con las cartas y contando las proporciones de los resultados que computar todas las posibilidades de combinación formalmente.
  • Se le ocurrió que esta misma observación debía aplicarse a su trabajo de Los Álamos sobre difusión de neutrones, para la cual resulta prácticamente imposible solucionar las ecuaciones íntegro-diferenciales que gobiernan la dispersión, la absorción y la fisión.
  • Dado que ya empezaban a estar disponibles máquinas de computación para efectuar las pruebas numéricas, el método cobró mucha fuerza.
  • El método de Montecarlo proporciona soluciones aproximadas a una gran variedad de problemas matemáticos posibilitando la realización de experimentos con muestreos de números pseudoaleatorios en una computadora. El método es aplicable a cualquier tipo de problema, ya sea estocástico o determinista.
  • El método de Montecarlo tiene un error absoluto de la estimación que decrece como $\frac{1}{\sqrt{N}}$ en virtud del teorema del límite central.

Ejemplo

Todos alguna vez hemos aplicado el método Montecarlo (inconscientemente). Como ejemplo, consideremos el juego de Astucia Naval.

Normalmente, primero se realizan una serie de tiros a puntos aleatorios. Una vez se impacta en un barco, se puede utilizar un algoritmo determinista para identificar la posición del barco y así terminar de derrumbarlo.


2. Caminata aleatoria

Una caminata aleatoria (random walk en inglés) es ua formalización matemática de la trayectoria que resulta al hacer pasos sucesivos aleatorios. Un ejemplo elemental de caminata aleatoria es la caminata aleatoria en la línea de números enteros $\mathbb{Z}$, la cual comienza en $0$ y en cada paso se mueve $+1$ o $-1$ con igual probabilidad.

Otros ejemplos:

  • Trayectoria de una molécula al viajar en un fluido (líquido o gas).
  • El camino que sigue un animal en su búsqueda de comida.
  • El precio fluctuante de una acción.
  • La situación de un apostador en un juego de azar.

Todos pueden ser aproximados por caminatas aleatorias, aunque no sean en verdad procesos aleatorios.

Caminata aleatoria en una dimensión

Como dijimos, un ejemplo elemental de caminata aleatoria es la caminata aleatoria en la línea de números enteros $\mathbb{Z}$, la cual comienza en $0$ y a cada paso se mueve , which starts at 0 and at each step moves $+1$ o $-1$ con igual probabilidad.

Esta caminata se puede ilustrar como sigue:

  • Se posiciona en $0$ en la línea de números enteros y una moneda justa se tira.
  • Si cae en sol nos moveremos una unidad a la derecha.
  • Si cae en águila nos moveremos una unidad a la izquierda.

Notemos que después de $5$ pasos podremos estar en 1, −1, 3, −3, 5, or −5. Las posibilidades son las siguientes:

Referencia:

Importante: librería random.

Referencia:


In [1]:
import random

In [13]:
def random_walk(n):
    # Devuelve posición después de n pasos
    x = 0
    for i in range(n):
        paso = random.choice([-1, 1])
        x += paso
    return x

In [15]:
def random_walk1(n):
    # Devuelve secuencia de posiciones
    x = 0
    xx = [x]
    for i in range(n):
        paso = random.choice([-1, 1])
        x += paso
        xx.append(x)
    return xx

Actividad. Graficar, en una misma ventana de gráficos, al menos ocho caminatas aleatorias de 100 pasos.


In [ ]:
# Solucionar acá

Y lo anterior, ¿para qué sirve?

Veremos lo siguiente con calma en la siguiente clase. Por ahora veámoslo como introducción (motivación)...

https://pythonprogramming.net/monte-carlo-simulator-python/

Created with Jupyter by Esteban Jiménez Rodríguez.