Práctica #1: Introducción a la simulación En esta práctica realizaremos dos actividades. La primera es la simulación de un juego de dados llamado CRAPS. Esta simulación se basa en la aplicación de los conceptos de probabilidad y distribución de probabilidad. La siguiente actividad es una introducción a la simulación de Montecarlo. Como se discutió en clase, la simulación de Montecarlo es una simulación estática que representa el estado del sistema en un punto particular en el tiempo (Banks et al. 1999). Los métodos de Montecarlo permiten experimentar con un modelo por medio del muestreo estadístico y se aplican auna amplia gama de problemas que van desde la optimización de funciones complejas hasta la solución de ecuaciones integrales complicadas. Simulación de Craps Craps es un popular juego de dados en el cual un jugador lanza un par de dados hasta que gane o pierda de acuerdo con las siguientes reglas: Gana si: • Obtiene 7 u 11 en el primer lanzamiento • Obtener 4, 5, 6, 8, 9 o 10 en el primer lanzamiento y repetir lo obtenido en el primer lanzamiento antes de obtener un 7 Pierde si: • Obtener 2, 3 o 12 en el primer lanzamiento • Obtener 7 en un lanzamiento posterior, antes de obtener lo lanzado en la primera ocasión A continuación se presenta la función de distribución de probabilidad para el lanzamiento de los dados. Sea Z la suma del resultado de ambos dados, usando dos dados sin sesgo tenemos que la probabilidad de que Z = i se presenta en la tabla siguiente.
i P(Z = i)
2 1/36
3 2/36
4 3/36
5 4/36
6 5/36
7 6/36
8 5/36
9 4/36
10 3/36
11 2/36
Ahora tenemos que la probabilidad de ganar en el primer lanzamiento es: 8 = 0. 2 ( = 7) ( = 11) = 36 Ahora bien, si el jugador obtiene un 5 en el primer lanzamiento, el espacio de posibles estados estará compuesto todas las formas de sacar 5 y todas las formas de sacar 7, ya que cualquier otro resultado no me afecta el estado del juego, así tenemos que la probabilidad de ganar, obteniendo 5 en el primer lanzamiento es: 4 . 5 = 36 # ! 5 = 4 # ! 7 = 6 |#$ | = 10 4 4 16 . %& '( = ) = 10 36 360
12 1/36
Extendiendo el análisis anterior a los demás números, tenemos que: i 4 5 6 8 |#* | 9 10 11 11 Prob. ganar 9/324 16/360 25/396 25/396
9 10 16/360
10 9 9/324
Así, la probabilidad total de ganar un juego de craps será: 8 9 16 25 25 16 9 = 1 0.49 36 324 360 396 396 360 324 Ahora se procede a elaborar un modelo que permita simular un juego de craps, la herramienta que usaremos será Microsoft Excel. Comencemos por abrir Excel, se recuerda al lector que debe configurar las opciones de seguridad de su versión de Excel para permitir la ejecución de macros. Configure la primera hoja de cálculo u Hoja1 para que quede tal cual se muestra en la figura siguiente.
En esta hoja de cálculo agregue un botón. Aparecerá una venta como la siguiente
Seleccione un nombre para la macro y de click en Nuevo, entrará a la vista de código de Excel.
Será en esta ventana donde ingresaremos el código de la simulación. Para el juego de craps necesitamos simular el lanzamiento de dos dados, suponiendo que los dos dados no están sesgados, los lanzamientos seguirán una distribución de probabilidad uniforme donde la probabilidad de que se obtenga cualquier número del dado será igual a 1/6.
FDP Lanzamiento de dados 0,5 0,4 0,3 0,2 0,1 0,0 1
2
3
4
5
6
Para simular el juego de craps agregamos el siguiente código AL INTERIOR de la macro, se supone que el lector tiene un conocimiento básico de Visual Basic: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Dim Dim Dim Dim Dim Dim Dim
dado1 As Integer dado2 As Integer suma As Integer objetivo As Integer i As Long ganadas As Long perdidas As Long
If IsNumeric(Sheets(1).Cells(2, 2)) Then corridas = Round(CDbl(Sheets(1).Cells(2, 2))) ganadas = 0 perdidas = 0 objetivo = 0 For i = 1 To corridas
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
dado1 = Int(Rnd() * 5 + 1) dado2 = Int(Rnd() * 5 + 1) suma = dado1 + dado2 If suma = 7 Or suma = 11 Then ganadas = ganadas + 1 ElseIf suma = 2 Or suma = 3 Or suma = 12 Then perdidas = perdidas + 1 Else objetivo = suma Do dado1 = Int(Rnd() * 5 + 1) dado2 = Int(Rnd() * 5 + 1) suma = dado1 + dado2 If suma = objetivo Then ganadas = ganadas + 1 Exit Do ElseIf suma = 7 Then perdidas = perdidas + 1 Exit Do End If Loop End If Next i Sheets(1).Cells(3, Sheets(1).Cells(4, Sheets(1).Cells(3, Sheets(1).Cells(4, End If
2) 2) 3) 3)
= = = =
ganadas perdidas ganadas / corridas perdidas / corridas
Las líneas 1 a 7 corresponden a declaración de variables, en las líneas 11 a 13 se hace una inicialización de las variables, en la línea 15 comienza el ciclo que se ejecutará tantas veces como corridas haya ingresado el usuario, en las líneas 17 a 19 se simula un lanzamiento de dados, en las líneas 21 a 24 se determina si se gana o se pierde en el primer lanzamiento, en caso de que no haya ni victoria ni derrota en el primer lanzamiento, se ejecuta el código a partir de las líneas 26 a 38; en la línea 26 se determina cual es el lanzamiento que debe obtener el jugador para ganar, en la línea 27 se entra a un ciclo sin condición de parada el cual se detendrá cuando haya una victoria o una derrota, nótese que en estas líneas se simulan lanzamientos repetidos hasta que se obtenga un lanzamiento objetivo o el 7. En las líneas 42 a 45 se presenta la información de la simulación en la hoja de cálculo. Se recomienda al lector comparar los resultados analíticos con los resultados simulados, además de experimentar con diferentes números de corridas.
Simulación de Montecarlo Los métodos de Monte Carlo fueron introducidos en los 40’s por John von Neumann y Stanislaw Ulam. Estos métodos se basan en un muestreo aleatorio para producir sus resultados; de ahí que su desarrollo ha estado ligado al de los computadores. El nombre Monte Carlo fue acuñado por von Neumann en referencia al casino Monte Carlo en Mónaco. El escenario que usaremos para introducir los métodos de Monte Carlo es el siguiente; suponga que una empresa ABC está interesada en conocer cuántas utilidades va a obtener si lanza un nuevo producto al mercado, teniendo en cuenta que hay incertidumbres asociadas al tamaño de mercado y gastos. Para realizar este análisis utilizaremos simulación de Monte Carlo para estimar las ganancias. En primer lugar, tenemos que: 2((3 = 4('& 5 6'& donde supondremos que las entradas dependen sólo del número de ventas multiplicadas por la ganancia unitaria, esta ganancia tiene en cuenta todos los costos en los que se incurre en la producción, mercadeo, costos de transacción, etc. Así tenemos que 6(7% = 8&(7 ) 2((39(373. Para nuestro ejemplo, supongamos que GananciaUnitaria varía entre $47 y $53. La empresa tiene una estructura de mercadeo mediante la cual contacta a potenciales compradores para ofrecer sus productos, sin embargo, no todos se convertirán en compradores; es así como tenemos la siguiente ecuación para los ingresos: 4('& = >(77 ) ?> ! ) 2((39(373 Donde tenemos que Contactos corresponde al número de clientes potenciales que contacta la empresa y TasaCompra representa cuántos de estos Contactos efectivamente compran el producto. Los egresos de la compañía son los siguientes, en primer lugar supongamos, que de acuerdo a un estudio de mercadeo, se determino que se incurre en un costo por cada contacto que se hace a un cliente potencial, este costo unitario lo llamaremos CostoContacto; adicionalmente se tienen unos costos de producción totales llamados CostosProducción, los cuales vamos a asumir constantes por simplicidad. Así tenemos que los egresos de la empresa son: 2((3 = >(77 ) ?> ! ) 2((39(373 5 >7%H3ó( >(77 ) >7>(77 Adicionalmente, la empresa supone que su costo unitario de contacto variará entre $0.2 y $0.8, el número de clientes contactados que pasan a ser compradores oscilará entre 1% y 5%, y el número de clientes potenciales estará entre 1200 y 1800. Así tenemos que las entradas para la simulación de Monte Carlo serán Contactos, TasaCompra, CostoContacto y
GananciaUnitaria ya que los demás parámetros se suponen constantes. Para este ejemplo supondremos que las variables siguen una distribución de probabilidad uniforme A continuación se describe como implementar el modelo aquí planteado en Excel; abra una nueva hoja de cálculo y configúrela como se muestra en la figura. Después introduzca en las celdas A2, B2, C2, D2, E2 y G2 la respectiva fórmula: Para A2 Para B2 Para C2 Para D2
= = = =
$J$2 $J$2 $J$2 $J$2
+ + + +
ALEATORIO()*($K$2 - $J$2) ALEATORIO()*($K$3 - $J$3) ALEATORIO()*($K$4 - $J$4) ALEATORIO()*($K$5 - $J$5) Para E2 = 800 Para G2 = A2 * C2 * D2 - (E2 + A2 * B2)
Como se puede apreciar en la figura siguiente, tenemos ya una primera simulación de las ganancias, ahora es necesario generar más simulaciones, para esto arrastramos cada una de las fórmulas hasta la fila 1000, tenga en cuenta que para la columna H debe insertar dos filas con el número 800 antes de poder arrastrarlo, esto para evitar que Excel lo interprete como un consecutivo. Se recomienda al lector realizar un histograma de los resultados, así como calcular los estadísticos principales (media, desviación estándar, curtosis, etc.).