lunes, 25 de marzo de 2013

Simulación por el método de Monte Carlo


El método de Montecarlo permite resolver problemas matemáticos mediante la simulación de variables aleatorias.

John Von Neumann, en los años 40 y con los primeros ordenadores, aplica la simulación para resolver problemas complejos que no podían ser resueltos de forma analítica.

Montecarlo y su casino están relacionados con la simulación  La ruleta, juego estrella de los casinos, es uno de los aparatos mecánicos mas sencillos que nos permiten obtener números aleatorios para simular variables aleatorias.



Hoy en día el método de Montecarlo se aplica en muchos campos; en ingeniería de fiabilidad, en física y química, y en el campo de las finanzas para la evaluación de inversiones y riesgos, etc.


El método consta de cuatro pasos; (1) la definición de un dominio para los inputs, (2) la generación de inputs aleatorios sobre el dominio, (3) la realización de un cálculo determinista sobre los inputs aleatorios, (4) la agregación de los resultados mediante una función de transferencia

Para verlo de una forma más gráfica, vamos a realizar un experimento real para el calculo de Pi mediante el método de Montecarlo:

Primer Paso: la definición de un dominio para los inputs


Tomamos como dominio (campo de simulación) el cuadrante superior derecho....

Segundo paso: generamos los inputs aleatorios sobre el dominio


dejamos caer aleatoriamente perdigones sobre el cuadrante superior derecho (dominio).....

Tercer paso: la realización de un cálculo determinista sobre los inputs aleatorios


contamos los perdigones que están dentro del arco y los que están fuera del arco: dentro del arco hay 44 perdigones, fuera del arco hay 13 perdigones

Cuarto paso: la agregación de resultados mediante una función de transferencia

El ratio de los valores anteriores es un estimado del ratio de las dos áreas que es igual a Pi/4 por lo que solo hay que multiplicar por cuatro para obtener el valor de Pi....

Valor estimado de Pi  = 4*44/(44+13) = 3.08772
Diferencia respecto de Pi = 3.141592 - 3.08772 = 0.05387

Confirmación del experimento; realizamos otro experimento en las mismas condiciones......



Valor estimado de Pi  = 4*34/(34+) = 3.16279
Diferencia respecto de Pi = 3.141592 - 3.16279 = 0,02120

Como se puede apreciar estos valores se aproximan mucho a Pi. El método de Montecarlo, bien manejado, es uno de los métodos de simulación mas fiables. Es muy recomendable usar este método en tiempos de crisis para evaluar inversiones, estimar nuestros flujos de caja etc. Aplicando este método a las finanzas mejoramos sensiblemente nuestra capacidad de decisión ya que en realidad trabajamos siempre en un entorno de variabilidad aleatoria combinada (incertidumbre de los mercados).


Estamos acostumbrados a usar nuestra experiencia pasada y los valores promedio para realizar estimaciones y tomar decisiones. La simulación mediante valores aleatorios es una herramienta mucho mejor para experimentar entender la incertidumbre, y así poder tomar mejores decisiones.

jueves, 14 de marzo de 2013

La función RND

La función RND genera números estadisticamente dispersos (con poca correlación entre si) a los que llamamos aleatorios (random).

Los números aleatorios generados por ordenador utilizando las funciones habituales de los distintos lenguajes de programación, son en realidad pseudo-aleatorios.

El debate sobre la pseudo-aleatoriedad nos es nada trivial ya que el uso de funciones pseudo aleatorias puede dar lugar a problemas de seguridad serios o bien a simulaciones poco rigurosas, que tienden a repetir el mismo resultado una y otra vez, por ejemplo cuando se usa el método de Monte Carlo para calcular el valor de Pí. 

Por otra parte esta el debate filosófico de si realmente existen los fenómenos aleatorios, aunque siempre queda la opción de usar un generador cuántico de números aleatorios.

Siendo rigurosos.... volvamos a 1968, 1979 y 1984 para hacer algunas comprobaciones:


En la página 43 del Manual de BASIC explica que cada "run" de números aleatorios produce el mismo resultado, aceptando de forma explicita que no existe la aleatoriedad entre cada run.


El programa del Manual de Darmouth Basic escrito y ejecutado en un MSX confirma lo que se dice en la página 43 del Manual ya que los resultados de diferentes "run" del programa arrojan exactamente los mismos resultados. ¿pero esto es realmente así?.....


el mismo programa ejecutado en Commodore PET 2001 de 1979... sorpresa!!! en este caso cada "run" produce números aleatorios distintos en cada caso.

Si alguien tiene una buena explicación a este asunto, me agradaría escucharla.

domingo, 10 de marzo de 2013

Commodore PET 2001 - Programas de una sola linea

El PET 2001 no es un ordenador con capacidad gráfica "per se", dispone de caracteres gráficos que bien usado pueden conseguir resultados limitados pero suficientes.



estos gráficos han sido construidos a base de la combinación de caracteres característica del PET 2001....





este es el teclado del PET 2001 donde podéis ver las teclas y los caracteres asociados a cada tecla y combinación de teclas. Con un juego de caracteres así, es laborioso, mejor dicho, es imposible desarrollar programas con gráficos llamativos. Aunque si se pueden conseguir efectos llamativos incluso con programas de una sola linea...



el programa es una repetición aleatoria del carácter 205.5......



que forma un laberinto.