viernes, 23 de mayo de 2014

SIMULACIONES POR EL METODO MONTE CARLO Y GENERADORES DE NUMEROS PSEUDO-ALEATORIOS

El Método de Montecarlo es un método probabilístico, en contraposición de los métodos determinísticos ya que incorpora múltiples simulaciones de resultados con la variabilidad de elementos individuales para producir una distribución de resultados potenciales. Para cada simulación, la herramienta de simulación Montecarlo escoge al azar un valor para cada evento de riesgo dentro de su rango de valores posibles, pero de acuerdo con la probabilidad de ocurrencia de cada uno de éstos. Luego se combinan los valores escogidos al azar para generar un solo resultado para una simulación. Este proceso se repite un cierto número de veces (típicamente más de 1,000 iteraciones), y se produce un rango de resultados potenciales igualmente probables. 


La invención del método de Monte Carlo se asigna a 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. “La idea consistía en probar con experimentos mentales las miles de posibilidades, y en cada etapa, determinar por casualidad, por un número aleatorio distribuido según las probabilidades, qué sucedería y totalizar todas las posibilidades y tener una idea de la conducta del proceso físico”.

Stalislaw Ulan, Richard Feynman y Jonh von Newman en los Alamos
Durante una de las visitas de von Neumann a Los Álamos en 1946, Ulam le mencionó el método. Después de cierto escepticismo inicial, von Neumann se entusiasmó con la idea y pronto comenzó a desarrollar sus posibilidades en un procedimiento sistemático. Ulam expresó que Monte Carlo “comenzó a tener forma concreta y empezó a desarrollarse con todas sus fallas de teoría rudimentaria después de que se lo propuse a Johnny”.
A principios de 1947 Von Neumann envió una carta a Richtmyer a Los Álamos en la que expuso de modo influyente tal vez el primer informe por escrito del método de Monte Carlo. Su carta fue encuadernada junto con la respuesta de Richtmyer como un informe de Los Álamos y distribuida entre los miembros del laboratorio. Von Neumann sugería aplicar el método para rastrear la generación isótropa de neutrones desde una composición variable de material activo a lo largo del radio de una esfera. Sostenía que el problema era adecuado para el ENIAC y estimaba que llevaría 5 horas calcular la acción de 100 neutrones a través de un curso de 100 colisiones cada uno.

http://en.wikipedia.org/wiki/Manhattan_Project

¿Quién usa la simulación Monte Carlo?
Muchas empresas utilizan la simulación de Monte Carlo como una herramienta importante para la toma de decisiones. He aquí algunos ejemplos .
General Motors, Procter and Gamble y Eli Lilly usan la simulación para estimar tanto la rentabilidad media y el grado de riesgo de nuevos productos. En GM , esta información es utilizada por el CEO Rick Waggoner para determinar los productos que llegan al mercado .
GM utiliza la simulación para actividades tales como la previsión de los ingresos netos de la corporación , la predicción de los costes de estructura y los costos de compra , la determinación de su susceptibilidad a diferentes tipos de riesgo (por ejemplo, cambios en las tasas de interés y las fluctuaciones del tipo de cambio).
Lilly utiliza la simulación para determinar la capacidad óptima de la planta que debe ser construida para cada fármaco.
Firmas de Wall Street utilizan la simulación de precios derivados financieros complejos y determinar el valor en riesgo (VAR) de sus carteras de inversión.


Los cuatro pasos del método de Monte Carlo :Dependiendo del número de factores implicados, las simulaciones pueden ser muy complejas. Pero en un nivel básico, todas las simulaciones de Monte Carlo tienen cuatro sencillos pasos.

1 Identificar la función de transferencia:
Para hacer una simulación de Monte Carlo, se necesita un modelo cuantitativo de la actividad empresarial, plan o proceso que desea explorar. La expresión matemática de su proceso se llama la “función de transferencia." Esta puede ser una función de ingeniería o fórmula de negocio, o puede basarse en un modelo creado a partir de un experimento diseñado (DOE) o a partir de análisis de regresión.

Cualquier sistema físico puede ser representado como un conjunto de entradas y salidas. Ante una excitación en la entrada existirá una reacción de la salida.
2 Definir los parámetros de entrada:
Para cada factor en la ecuación de transferencia, determinar cómo se distribuyen los datos. Algunas entradas pueden seguir una distribución normal, mientras que otros siguen una distribución triangular o uniforme. A continuación, deberá determinar la distribución de los parámetros para cada entrada. Por ejemplo, tendremos que especificar la media y la desviación estándar para las entradas que siguen una distribución normal.

3. Crear datos aleatorios: 
Para hacer la simulación válida, es necesario crear un conjunto muy grande de datos aleatorios para cada entrada,  del orden de 100 000 datos. Estos puntos de datos aleatorios simulan los valores que se vería a lo largo de un largo período de tiempo para cada entrada.



4. Simular y analizar el proceso de salida:
Con la simulación de datos en su lugar, utilizaremos la ecuación de transferencia para calcular los resultados simulados. La ejecución de una gran cantidad de datos de entrada simuladas a través del modelo nos dará una indicación fiable de lo que será el proceso de salida con el tiempo, dada la variación esperada en las entradas.



Un generador de números aleatorios es un dispositivo informático o físico diseñado para producir secuencias de números sin un orden aparente. Los algoritmos para la generación de valores uniformemente distribuidos están presentes en todas las calculadoras y lenguajes de programación, y suelen estar basados en congruencias numéricas del tipo:

x_{n+1} \equiv (ax_n+c)\pmod m

El éxito de este tipo de generadores de valores de una variable aleatoria depende de la elección de los cuatro parámetros que intervienen inicialmente en la expresión anterior:

El valor inicial o semilla: x_0
La constante multiplicativa: a
La constante aditiva: c
El número m respecto al cual se calculan los restos

Estos cuatro valores deben ser números enteros no negativos y que cumplan la siguiente condición: x_0 , a , c < m.

La mayor parte de los generadores de números aleatorios son, en realidad, pseudoaleatorios; se calcula (o introduce internamente) un valor x0, que llamaremos semilla, y, a partir de él, se van generando x1, x2, x3, ... Siempre que se parta de la misma semilla, se obtendrá la misma secuencia de valores.

EL MÉTODO MERSENNE TWISTER O MT19937 Y MT19937-64: Este es un algoritmo propuesto en 1997 por Makoto Matsumoto y Takuji Nishimura. Este generador de números pseudoaleatorios se ensambla muy bien a cualquier aplicación creada en lenguaje de programación C, y tiene dos versiones: una conocida como mt19937 que se emplea en aplicaciones informáticas que trabajan con 32 bits, y otra versión conocida como mt19937−64 que se emplea en aplicaciones que funcionan con 64 bits.
El algoritmo para operar no utiliza multiplicaciones ni divisiones, sino operaciones aritméticas muy sencillas (sumas y restas), que rápidamente son calculadas por cualquier equipo de cómputo moderno. Para lograr sus resultados el Mersenne Twister emplea 4.357 números iniciales (números−semilla), que son organizados dentro de una matriz lineal con un finito campo binario para dar arranque al algoritmo, generando así números pseudoaleatorios debidamente equidistribuidos.


CRYPTOGENRANDOM: Excel utiliza un algoritmo especialmente diseñado para el sistema operativo Windows conocido como «CryptGenRandom», el cual está presente no sólo en esta función de Excel sino también en el funcionamiento de otras utilidades y accesorios del sistema operativo Windows. Se sabe que el CryptGenRandom en verdad emplea un algoritmo muy sencillo para funcionar, pero la verdadera incertidumbre sobre los resultados pseudoaleatorios que generará se basa en que en cada ocasión emplea como números−semilla la medición de ciertos inputs introducidos por el usuario desde el teclado o desde el mouse, es decir, se trata de un Physical RNG que toma sus valores iniciales de la medición de un fenómeno físico muy fluctuante basado en la conducta del usuario.



BULL MOUNTAIN: es el nombre en clave de la nueva tecnología de generación de números aleatorios de Intel. ¿Por qué es tan importante? Los números aleatorios son necesarios para el cifrado eficaz y generadores de números aleatorios débiles son el talón de Aquiles de la seguridad de los datos.
El cifrado es un elemento crucial de la seguridad informática y de red. Los datos se cifran para evitar que se accede o vistos por usuarios no autorizados. El tráfico entre un PC y un sitio web se codifica para garantizar la información sensible como contraseñas o información de tarjetas de crédito no son interceptados en tránsito.
El error fatal de cifrado es que se basa en el azar para generar las claves de cifrado fuertes, pero las computadoras no son al azar. Los unos y ceros que rebotan alrededor del PC y de Internet son fundamentalmente predecibles. 



Conclusiónes: la actual potencia de cómputo permite que incluso los algoritmos más complejos empleados en los randomizer funcionen a velocidades inimaginables dentro de un PC, pero sin que los resultados pseudoaleatorios generados se vuelvan predecibles. Basta tener en cuenta que un PC con un procesador Multi-Core que funcione a 3 GHz puede procesar cerca de diez mil millones de operaciones de punto flotante por segundo (10 Gigaflops), y si el algoritmo de un modesto randomizer está diseñado para tener un Loop o periodo que se reinicia y se repite después de que han aparecido 1020 resultados pseudoaleatorios, entonces se necesita que ese PC esté funcionando 24 horas al día durante 317 años continuos para poder completar el Loop repetitivo y volver a reiniciarlo.

Excel, al tener implementada la función CryptGenRandom, parece ser la mejor opción disponible para estructurar y ejecutar simulaciones de Monte Carlo. Es una opción barata y altamente fiable plagada de funciones estadísticas, matemáticas y de ingeniería. 

La parte mas compleja, y la que requieren profundos conocimientos específicos, es el describir bien las funciones de transferencia que definen con la mayor precisión posible a nuestro modelo. El resto es relativamente simple y accesible.