Simulación empresarial · 2018. 10. 23. · Macro para realizar prueba U de Mann-Whitney ..... 290...
Transcript of Simulación empresarial · 2018. 10. 23. · Macro para realizar prueba U de Mann-Whitney ..... 290...
Simulación empresarialcon aplicacionesde Visual BasicHernando Castro Piñeres
1
Proceso de arbitraje1.er concepto Evaluación: 1 de junio de 2017
2.o conceptoEvaluación: 27 de octubre de 2017
© Universidad Católica de Colombia
© Hernando Castro Piñeres
Primera edición, Bogotá, D. C. Marzo de 2018
Dirección Editorial Stella Valbuena García
Coordinación Editorial María Paula Godoy Casasbuenas
Corrección de estilo John Fredy Guzmán
Diseño de colección Mauricio Salamanca
Diagramación Mauricio Salamanca
Publicación digital Hipertexto Ltda. www.hipertexto.com.co Bogotá, D. C., Colombia
Impresión Xpress Estudio Gráfico y Digital S.A. Bogotá, D. C., Colombia
Facultad de IngenieríaDiagonal 46 N° 15B-10Bogotá, D. C.
EditorialUniversidad Católica de ColombiaAv. Caracas N° 46-72, piso 5Bogotá, D. [email protected]
Hecho el depósito legal© Derechos reservados
Todos los derechos reservados. Esta publicación no puede ser reproducida ni total ni parcialmente o transmitida por un sistema de recuperación de información, en ninguna forma ni por ningún medio, sin el permiso previo del editor.
Castro Piñeres, Hernando Simulación empresarial con aplicaciones de Visual Basic / Hernando Castro PiñeresBogotá: Universidad Católica de Colombia, 2018
326 páginas ; 21.5 x 21.5 cm.—(Colección Facultad de Ingeniería) ISBN: 978-958-5456-06-8 (impreso) ISBN: 978-958-5456-07-5 (digital)
I. Título II. Serie 1. ADMINISTRACIÓN DE EMPRESAS-SIMULACIÓN 2. TOMA DE DECISIONES-SIMULA-CIÓN 3. SIMULACIÓN POR COMPUTADORES
Dewey : 658.40352 SCDD ed. 21
A mi esposa Elizabeth, a mis hijos y a mis nietos,
por quitarles tiempo familiarpara que este libro se
hiciera realidad.
Contenido
Prólogo ...................................................................................................................15
Introducción .........................................................................................................17
Capítulo 1. Introducción a la simulación .........................................................21¿Qué se entiende por simulación? ..................................................................................... 21Pasos de un proyecto de simulación ................................................................................. 23Probabilidad e incertidumbre en los modelos de simulación......................................... 26Aplicaciones de Visual Basic (VBA) para realizar una simulación ................................ 28Macro para determinar la media, la varianza y la desviación estándar de una
distribución empírica discreta ................................................................................... 32Cálculo del número de corridas de simulaciones ............................................................. 35Cálculo del número de réplicas .......................................................................................... 36Ejercicios ............................................................................................................................... 40
Capítulo 2. Generación de números aleatorios con aplicaciones de Visual Basic .....................................................................................................43
Generación de números aleatorios mediante función estadística .................................. 44Algoritmo de cuadrados medios ........................................................................................ 46Algoritmo de productos medios ........................................................................................ 50
6
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Algoritmo multiplicador constante ................................................................................... 53Algoritmo de congruencia lineal ........................................................................................ 56Algoritmo de congruencia multiplicativo ......................................................................... 59Algoritmo de congruencia aditivo ..................................................................................... 62Algoritmo de congruencia cuadrático ............................................................................... 64Comprobación de la uniformidad y aleatoriedad de los generadores de números
pseudoaleatorios .......................................................................................................... 66Ejercicios ............................................................................................................................... 83
Capítulo 3. Generación de variables aleatorias mediante la técnica de Montecarlo ...........................................................................................................85
Simulación de inventario de modelo de pedido único mediante la técnica de Montecarlo ................................................................................................................... 92
Simulación de un sistema inventario de punto de reorden con demanda y tiempo de entrega aleatorios mediante la técnica de Montecarlo.....................100
Ejercicios .............................................................................................................................108
Capítulo 4. Generación de variables aleatorias continuas ............................113Método de la transformada inversa .................................................................................113Método de composición ....................................................................................................137Método de convolución.....................................................................................................153Generación de variables aleatorias mediante la distribución normal ..........................168Generación de variables aleatorias mediante la distribución lognormal ....................172Ejercicios .............................................................................................................................180
Capítulo 5. Generación de variables aleatorias discretas ..............................185Distribución probabilidad de Bernoulli ..........................................................................186Distribución de probabilidad geométrica .......................................................................188Distribución de probabilidad binomial ...........................................................................192
CONTENIDO
7
Cole
cción
1
Distribución de probabilidad hipergeométrica ..............................................................198Distribución de probabilidad Poisson .............................................................................202Ejercicios .............................................................................................................................210
Capítulo 6. Modelos de simulación de líneas de espera con distribución de probabilidad teórica ........................................................213
Elementos de simulación para los modelos de líneas de espera ..................................213Modelo de líneas de espera con un solo servidor ...........................................................215Modelo de líneas de espera con varios servidores en serie ............................................231Modelo de líneas de espera con varios servidores en paralelo ......................................236Ejercicios .............................................................................................................................243
Capítulo 7. Modelos de simulación de problemas de inventarios con distribución de probabilidad teórica ...............................................................247
Modelo de punto de reorden con demanda aleatoria y tiempo de entrega aleatorio ...................................................................................................248
Modelo de revisión periódica con demanda aleatoria ...................................................261Ejercicios .............................................................................................................................273
Capítulo 8. Validación de resultados y diseño de experimentos de simulación ...........................................................................................................275
Validación del modelo de simulación .............................................................................275Diseño de experimentos de simulación ...........................................................................297Ejercicio ...............................................................................................................................325
Índice de macros
Capítulo 1. Introducción a la simulación .........................................................21Procedimiento 1.1. Macro para determinar la media, la varianza y la desviación
estándar de una distribución empírica .................................................................... 33 Procedimiento 1.2. Macro para calcular el número de corridas ................................... 36Procedimiento 1.3. Macro para generar variable aleatoria con réplicas ....................... 39
Capítulo 2. Generación de números aleatorios con aplicaciones de Visual Basic .....................................................................................................45
Procedimiento 2.1. Macro para “limpiar” la hoja de cálculo generar números aleatorios .................................................................................................................... 45
Procedimiento 2.2. Macro para cuadricular (todos los bordes) celdas para generar números aleatorios ..................................................................................................... 45
Procedimiento 2.3. Macro para generar números aleatorios mediante la instrucción Rnd ................................................................................................................................ 46
Procedimiento 2.4. Macro para cuadricular (todos los bordes) las celdas para el algoritmo de cuadrados medios ................................................................................. 48
Procedimiento 2.5. Macro para generar números aleatorios por el algoritmo de cuadrados medios ........................................................................................................ 49
Procedimiento 2.6. Macro para generar aleatorios mediante los productos medios ... 52
10
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 2.7. Macro para generar números aleatorios mediante el algoritmo multiplicador constante .............................................................................................. 55
Procedimiento 2.8. Macro para generar mediante el algoritmo congruencia lineal .... 58Procedimiento 2.9. Macro para generar números aleatorios mediante al algoritmo
congruencial multiplicativo ....................................................................................... 61Procedimiento 2.10. Macro para generar números aleatorios mediante el algoritmo
congruencial aditivo .................................................................................................... 63Procedimiento 2.11. Macro para generar números aleatorios mediante el algoritmo
congruencial cuadrático ............................................................................................. 65Procedimiento 2.12. Macro para realizar pruebas de medias ......................................... 69Procedimiento 2.13. Macro para hacer prueba de varianzas a números aleatorios ..... 71Procedimiento 2.14. Macro para realizar prueba Chi-cuadrado
a números aleatorios ................................................................................................... 74Procedimiento 2.15. Macro para hacer prueba Kolmogorov-Smirnov ......................... 78Procedimiento 2.16. Macro para hacer prueba de rachas ............................................... 81
Capítulo 3. Generación de variables aleatorias mediante la técnica de Montecarlo ...........................................................................................................85
Procedimiento 3.1. Macro para generar la demanda aleatoria mediante técnica de Montecarlo ................................................................................................................... 88
Procedimiento 3.2. Macro que simula un sistema de inventario de pedido único mediante la técnica de Montecarlo con los datos iniciales ..................................... 94
Procedimiento 3.3. Macro que simula un sistema de inventario de pedido único mediante la técnica de Montecarlo para generar la demanda y las demás variables ........................................................................................................................ 98
Procedimiento 3.3. Macro para determinar probabilidades mediante técnica de Montecarlo .................................................................................................................102
Procedimiento 3.4. Macro para la simulación de un sistema de inventario con distribución empírica mediante técnica de Montecarlo .......................................105
ÍNDICE DE MACROS
11
Cole
cción
1
Capítulo 4. Generación de variables aleatorias continuas ............................113Procedimiento 4.1. Macro para generar una variable aleatoria empírica ...................115Procedimiento 4.2. Macro para generar variables exponenciales sin el valor
mínimo .......................................................................................................................118Procedimiento 4.3. Macro para generar variables exponenciales con el valor
mínimo .......................................................................................................................120Procedimiento 4.4. Macro para generar variables uniformes .......................................124Procedimiento 4.5. Macro para generar variables exponenciales y uniformes ..........126Procedimiento 4.6. Macro para un programa maestro de producción .......................129Procedimiento 4.7. Macro para generar variables Weibull sin el valor mínimo ........134Procedimiento 4.8. Macro para generar variables Weibull con valor mínimo ..........136Procedimiento 4.9. Macro para generar variables triangulares ....................................143Procedimiento 4.10. Macro para generar variables trapezoidales................................149Procedimiento 4.11. Macro para generar variables trapezoidales del ejemplo 4.7 ....151Procedimiento 4.12. Macro para generar variables de tipo Erlang sin el valor
mínimo .......................................................................................................................156Procedimiento 4.13. Macro para generar variables de tipo Erlang con valor
mínimo ......................................................................................................................158Procedimiento 4.14. Macro para generar variables de tipo Gamma sin el valor
mínimo .......................................................................................................................161Procedimiento 4.15. Macro para generar variables de tipo Beta con valor mínimo y
valor máximo .............................................................................................................163Procedimiento 4.16. Macro para realizar un control de calidad ..................................166Procedimiento 4.17. Macro para generar variables con distribución normal ............170Procedimiento 4.18. Macro para desarrollar proceso de dos etapas en serie .............177
Capítulo 5. Generación de variables aleatorias discretas ..............................185Procedimiento 5.1. Macro para generar variables aleatorias de tipo Bernoulli ..........187Procedimiento 5.2. Macro para generar variables aleatorias de tipo geométrica ......190
12
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 5.3. Macro para generar variables binomiales por el método de convolución ................................................................................................................194
Procedimiento 5.4. Macro para generar variables binomiales por el método de Montecarlo .................................................................................................................196
Procedimiento 5.5. Macro para generar variables de tipo hipergeométrica por el método de convolución ............................................................................................200
Procedimiento 5.6. Macro para generar variables aleatorias de tipo Poisson por el método de convolución ............................................................................................204
Procedimiento 5.7. Macro para desarrollar ejemplo inventario de equipos médicos ...................................................................................................206
Capítulo 6. Modelos de simulación de líneas de espera con distribución de probabilidad teórica ...........................................................................................213
Procedimiento 6.1. Macro de líneas de espera con un solo servidor ...........................216Procedimiento 6.2. Macro para simulación de líneas de espera con formato
horario ........................................................................................................................220Procedimiento 6.3. Macro para la simulación de llegadas de varios tipo de piezas ...225Procedimiento 6.4. Macro para la simulación de varios servidores en serie ..............232Procedimiento 6.5. Macro para la simulación de líneas de espera con
dos servidores en paralelo ........................................................................................238
Capítulo 7. Modelos de simulación de problemas de inventarios con distribución de probabilidad teórica ...............................................................247
Procedimiento 7.1. Macro para simular problema de inventario de modelo de punto de reorden ..................................................................................................................252
Procedimiento 7.2. Macro para simulación de inventario de modelo de punto de reorden con tamaño de lote formulado .................................................................257
Procedimiento 7.3. Macro para simular modelo de inventario con tiempo de revisión periódica anticipado fijo ...........................................................................................263
ÍNDICE DE MACROS
13
Cole
cción
1
Procedimiento 7.4. Macro para simular modelo de inventario con tiempo de revisión periódica anticipado calculado ................................................................................268
Capítulo 8. Validación de resultados y diseño de experimentos de simulación ...........................................................................................................275
Procedimiento 8.1. Macro para realizar la prueba Chi-cuadrado con aplicación de Montecarlo .................................................................................................................277
Procedimiento 8.2. Macro para realizar la prueba F para un modelo simulado ........281Procedimiento 8.3. Macro para realizar prueba t de Student para un modelo
simulado .....................................................................................................................285Procedimiento 8.4. Macro para realizar prueba U de Mann-Whitney .......................290Procedimiento 8.5. Macro para realizar prueba Chi-cuadrado a una distribución de
probabilidad teórica ..................................................................................................293Procedimiento 8.6. Macro para realizar diseño de experimento con Anova ..............300Procedimiento 8.7. Macro para simular un modelo de línea de espera con réplicas
para realizar diseño de experimento .......................................................................312Procedimiento 8.8. macro para realizar el análisis bifactorial
del procedimiento 8.7 ...............................................................................................318
Prólogo
Tengo el agrado de presentar este libro, cuyo autor no solo es un colega, sino también el amigo que comparte la misma vocación para enseñar en las univer-sidades. En esta obra, usted encontrará la información más actualizada sobre
la simulación con aplicaciones de Visual Basic de Excel, además de una guía fácil para aprender un conjunto de técnicas procedimentales y conceptos que se emplean en esta herramienta en un ambiente computacional.
A través de la simulación en un lenguaje de Visual Basic en Excel, se puede obtener un conocimiento profundo de sistemas complejos, al igual que construir y conducir expe-rimentos para entender el comportamiento de algunos sistemas discretos o continuos.
Aunque en los últimos años se han escrito varios libros sobre simulación, en mi opi-nión, este libro presenta una novedad porque se pueden hacer experimentos sencillos a través de los cuales se explican acontecimientos muy complejos que nos permiten a los lectores (aun sin conocimiento específicos del tema) comprender sin mayores difi-cultades el tema elegido.
El ideal del presente libro es compartir experiencias para que, por medio de él, usted logre fácilmente lo que al autor le ha costado tanto: crear sus propios programas y utili-zarlos para obtener así un mayor rendimiento de la hoja de cálculo, al usar los modelos de simulación. Por consiguiente, este libro resultará de utilidad al investigador, al inge-niero industrial, a los otros ingenieros, al administrador de empresas y, especialmente, al docente universitario.
16
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
El trabajo original de este libro comenzó en la Universidad Católica de Colombia, donde el profesor Hernando Castro Piñeres impartió un curso de simulación en la Facultad de Ingeniería, específicamente en el programa de Ingeniería Industrial; tengo entendido que también ha dictado cursos de simulación en la Universidad Libre de Colombia, en la Facultad de Ingeniería, por varios años.
A fin de que no se tenga la idea de que este libro abarca todo el campo de la simulación, agregaré que constituye en sí mismo una simulación estática en hoja de cálculo con la ayuda del lenguaje Visual Basic en Excel, y de ninguna manera se trata de simulación animada; para eso hay muchos libros en el mercado. Por tanto, como toda simulación en ambiente computacional, en el mejor de los casos, reduce una situación compleja a proporciones sencillas y manipulables, lo cual produce un entendimiento del sistema que se está simulando. Este libro cumple con la expectativa anterior y constituye un gran aporte a las publicaciones sobre la simulación en ambiente computacional.
Agradezco el espacio para compartir con los lectores los sentimientos que me generó este libro y felicitar al autor por su excelente trabajo.
Manuel Barón MolinaM.Sc. e ingeniero industrial
Profesor de tiempo completo de laUniversidad Católica de Colombia
Introducción
Este libro tiene como propósito desarrollar una metodología procedimental para planear, diseñar y llevar a cabo experimentos de simulación por medio de aplica-ciones de Visual Basic, como complemento para que el usuario cree sus propios
aplicativos o soporte de software sobre el tema. En la obra se ha introducido una serie de programas o procedimientos escritos en
lenguaje de Visual Basic de Excel, escogido por ser el más utilizado en este tiempo y por tener una herramienta que ayuda a programar: el grabador de macros. En los programas se incluyen instrucciones para borrar contenidos anteriores, cuadricular (‘todos los bordes’) celdas con sus respectivas cabeceras de columnas, resaltados en colores y las instrucciones del modelado de simulación para que los resultados tengan una buena presentación.
Usuario: este no es un libro para leerlo, es un libro de trabajo. Requiere una partici-pación activa para sacarle todo el rendimiento posible. Se describen problemas prácticos y teóricos que surgen cuando se planean y se implementan experimentos de simulación. Se describen estos problemas porque tienen soluciones al utilizar aplicaciones de Visual Basic que pueden resolverse en forma automática. Así, el usuario puede crearlas, utili-zarlas y obtener así un mayor rendimiento de la hoja de cálculo al utilizar los modelos de simulación.
El público al que va dirigido este libro es de espectro amplio. Lo encontrarán útil profesores, ingenieros y universitarios que desean completar su formación empresarial.
18
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
A las personas se les hace ver que los modelos de simulación permiten observar el com-portamiento de un fenómeno real, que al poder experimentar con ellos se puede recoger información de cómo respondería ese fenómeno ante hipotéticos cambios producidos en él. Sin embargo, es sabido que para diseñar y llevar a cabo experimentos de simula-ción, se deben tener conocimientos mínimos de la teoría de probabilidad, estadísticas y manejo de Excel.
En este libro se describen las técnicas alternativas para modelar en simulación con el fin de alcanzar un objetivo particular. En el modelado de simulación no puede subesti-marse la importancia de tener métodos alternativos disponibles, ya que a menudo el tipo de situación dicta los métodos que pueden aplicarse. Se han incluido macros de Excel que se escriben siempre en Visual Basic con instrucciones precisas, para que los modelos de simulación y los experimentos hagan más rápida la transición de las ideas teóricas al uso práctico. El usuario debe darse cuenta de que estas macros tienen un propósito descriptivo y que tiene la libertad para alterarlas, ampliarlas o modificarlas de la forma que desee, a fin de alcanzar los mismos objetivos en forma más eficiente.
Por lo que respecta a simulación, que es el contenido de este libro, esta se dividirá en dos grandes categorías: la simulación de Montecarlo y la simulación por eventos discretos a través de hoja de cálculo. La simulación de Montecarlo describirá un sistema probabilístico que no cambia con el tiempo; en cambio, la simulación por eventos dis-cretos es un programa que reproduce el comportamiento de un sistema real siguiendo el patrón de eventos e interacciones. En el primer capítulo, tras describir lo que se entiende por simulación y dejar en claro tanto las ventajas como los inconvenientes de su uso, se repasa algo de estadística, aplicando macros para determinar los parámetros más relevantes.
El segundo capítulo analiza cómo los números aleatorios y pseudoaleatorios permi-ten introducir en los modelos de simulación la incertidumbre que ellos conllevan y su generación mediante diferentes métodos, mediante la utilización de macros de Excel. Seguidamente, se aplican técnicas para hacer pruebas estadísticas de aleatoriedad e independencia.
INTRODUCCIÓN
19
Cole
cción
1
El tercer capítulo aborda la generación de variables aleatorias por la técnica de Mon-tecarlo, al tiempo que propone una reflexión acerca de la importancia de esta técnica para hacer simulaciones en la empresa. El cuarto capítulo está dedicado a la generación de variables aleatorias continuas, en tanto el quinto está dedicado a generar variables aleatorias discretas a través de diferentes métodos. En estos capítulos se emplean ejerci-cios que sirven de base para hacer simulaciones en macro de Excel que están estrecha-mente relacionadas con la empresa.
El sexto capítulo brinda los elementos para hacer simulaciones de líneas de espera que se complementan por medio de macros. En cambio, el séptimo capítulo aborda los modelos de inventarios, que también se complementan por medio de macros; en ambos capítulos, el usuario pueda analizar las afirmaciones que se hacen en el texto a través de los procedimientos o programas que se presentan y utilizarlas como referencia para la elaboración de los programas que se necesiten en el diseño de sus propios modelos de simulación.
El octavo capítulo ofrece las herramientas para realizar las validaciones de los resul-tados y diseñar experimentos por medio de macros de Excel, desde un punto vista prác-tico, y expone al usuario las bases necesarias para consultar sobre los temas de diseño de experimentos y aplicarlos al planear experimento de simulación.
Finalmente, para concluir esta introducción, deseo agradecer profundamente al director del programa de Ingeniería Industrial de la Universidad Católica de Colombia, Javier Arturo Moreno Carvajal, y a Isaac Huertas, por darme apoyo y la valiosa guía para desarrollar este proyecto de libro.
Hernando Castro Piñeres
Introducción a la simulación
¿Qué se entiende por simulación?
Simulación es el proceso de reproducir aproximadamente un sistema real a través de un modelo computarizado y llevar a cabo experiencias con él, con la finalidad de aprender el comportamiento del sistema o de evaluar diversas estrategias para su funcionamiento.
El objeto de una simulación es generar variables aleatorias cuya interpretación redunda en una mejor comprensión del sistema que se está simulando. Las variables aleatorias son elementos que conforman un modelo de simulación, por lo cual representa una forma simplificada de un sistema real. Por otra parte, un sistema debe entenderse como una representación de un conjunto de objetos o ideas que están interrelacionados como una unidad para la consecución de un fin.
El modelado de la simulación es, por tanto, una metodología aplicada y experimental que intenta:
• Describir el comportamiento de sistemas.• Postular teorías o hipótesis que expliquen el comportamiento observado.• Usar estas teorías para predecir un comportamiento futuro, es decir, los
efectos que se producirán mediante cambios en el sistema o en su método de operación.
1
22
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Aplicaciones de la simulación
Para comenzar, se puede analizar una serie de situaciones en las cuales es apropiado el uso de la simulación. Estas situaciones fueron puestas de manifiesto por Shannon (1975). La simulación es conveniente cuando:
• No existe una formulación matemática analíticamente resoluble. Muchos sis-temas reales no pueden ser modelados matemáticamente con las herramientas actualmente disponibles; por ejemplo, la conducta de un cliente de un banco.
• Existe una formulación matemática, pero es difícil obtener una solución analítica. Los modelos matemáticos utilizados para modelar un reactor nuclear o una planta química son imposibles de resolver en forma analítica sin realizar serias simplificaciones.
• No existe el sistema real. Es problema del ingeniero, que tiene que diseñar un sistema nuevo; el diseño del sistema mejorará notablemente si se cuenta con un modelo adecuado para realizar experimentos.
• Los experimentos son imposibles debido a impedimentos económicos, de seguridad, de calidad o éticos. En este caso, el sistema real está disponible para realizar experimentos, pero la dificultad de estos hace que se descarte esta opción. Un ejemplo de esto es la imposibilidad de provocar fallas en un avión real para evaluar la conducta del piloto; tampoco se puede variar el valor de un impuesto para evaluar la reacción del mercado.
• El sistema evoluciona muy lentamente o muy rápidamente. Un ejemplo de dinámica lenta es el problema de los científicos que estudian la evolución del clima. Ellos deben predecir la conducta futura del clima, pero, dadas las condiciones actuales, no pueden esperar a que un tornado arrase una ciudad para luego dar el mensaje de alerta. Por el contrario, existen fenómenos muy rápidos que deben ser simulados para poder observarse en detalle, por ejemplo, una explosión.
INTRODUCCIÓN A LA S IMULACIÓN
23
Cole
cción
1
En la simulación de un ambiente computacional, existen básicamente dos pro-cedimientos para obtener representaciones de un sistema real: el análisis numérico y el análisis experimental. En el análisis numérico, se realiza inicialmente un estudio cualitativo de los fenómenos de cualquier tipo que caracterizan el comportamiento dinámico y estático del sistema, para plasmarse posteriormente, con ayuda de las leyes fundamentales de la ciencia, en relaciones matemáticas concretas. Una vez introducidas las simplificaciones consideradas en principio como pertinentes, se determina el grupo de ecuaciones descriptivas del proceso (sistema). Ahora bien, a veces las herramientas matemáticas no son suficientemente potentes para ofrecer soluciones analíticas genera-les a sistemas tan complicados como los que se presentan en el mundo que nos rodea. La alternativa consiste en utilizar un acercamiento al análisis experimental, que puede resumirse en construir un modelo de simulación animada o estática a partir de medidas realizadas directamente sobre el sistema. Este modelo es una descripción detallada que muestra el comportamiento de una realidad; por ende, se llevan a cabo experiencias para poder contestar a preguntas específicas acerca del sistema representado en el modelo.
Pasos de un proyecto de simulación
El proceso para creación y desarrollo de un modelo de simulación se pude resumir en los siguientes pasos:
a. Formulación del problema. En este paso se debe comenzar con una descripción del problema o del sistema. Debe existir una correcta identificación del objetivo, las variables de decisión, las restricciones, la medida de efectividad y las variables no controlables y su comportamiento estadístico. En este paso debe quedar perfectamente establecido el objeto de la simulación:• Los resultados que se esperan del simulador.• El plan de experimentación.
24
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
• El tiempo disponible.• Las variables de interés.• El tipo de perturbaciones por estudiar.• El tratamiento estadístico de los resultados.• La complejidad de la interfaz del simulador.
b. Recolección de datos. Se deben describir las interacciones entre las variables de decisión, de tal suerte que interactúen dentro del sistema; lo mismo con las restricciones del sistema y las medidas de efectividad que se van utilizar para definir y estudiar el sistema y los resultados que se espera obtener. La naturaleza y cantidad de datos necesarios están determinadas por la formulación del pro-blema y del modelo. Los datos pueden ser provistos por:• Registros históricos.• Experimentos de laboratorios.• Mediciones realizadas en el sistema real.
Estos datos deberán ser procesados adecuadamente para darles la forma exigida por el modelo.
c. Construcción del modelo. En este paso se genera un modelo de simulación de base con el cual se obtendrán los resultados deseados mediante las interacciones entre las variables que forman parte del sistema y sus relaciones lógico-matemáticas que describan en forma completa al modelo.
Selección del programa computarizado: con el modelo definido, el siguiente paso es cómo implementar el modelo en un ambiente computacional para procesarlo.
Verificación:• Consiste en analizar el modelo con entidades familiarizadas con la opera-
ción del sistema.• Es el proceso de demostración de que el modelo trabaja como se intentó.
INTRODUCCIÓN A LA S IMULACIÓN
25
Cole
cción
1
• Lenguaje por utilizar o qué paquete, para procesarlo en la computadora y obtener los resultados deseados.
Esta es una etapa de traducción del modelo a un lenguaje de programación, por ejemplo, macro de Excel.
d. Realización de corridas piloto. Obtener el tamaño de la muestra de simulación que depende generalmente del tipo de distribución que se intenta simular. Este paso se divide en:• Codificación del modelo: consiste en generar las instrucciones o código
computacional necesario para lograr que el modelo pueda ser ejecutado en un ambiente computacional.
• Validación del modelo: a través de este paso es posible detallar deficiencias en la formulación del modelo o en los datos alimentados a este. La validación se lleva a cabo mediante la comparación estadística entre los resultados del modelo y los resultados reales.
e. Diseño de experimentos. La experimentación determina las diversas alternativas que deben ser evaluadas, seleccionando las variables de entrada y sus diferentes niveles, con la finalidad de optimizar las variables de respuestas del sistema real. En este paso se utilizan las técnicas de diseño de experimento y superficies de respuestas para realizar análisis de sensibilidad de los índices requeridos.
f. Análisis de datos de salida. Una vez seleccionada la mejor alternativa, es impor-tante generar el modelo final para llevarlo a la práctica, listo para realizar la simulación y estudiar el comportamiento del proceso.
26
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Probabilidad e incertidumbre en los modelos de simulación
Un concepto fundamental asociado a la incertidumbre es el de experimento aleatorio, entendido como cualquier situación en la cual se pueden enumerar de antemano los resultados posibles sin que se conozca cuál de ellos se va presentar, aunque sí sus probabi-lidades, y este se pueda realizar en las mismas condiciones un número indefinido de veces.
Se supondrá al lector familiarizado con el concepto de probabilidad y se desarrolla-rán brevemente los conceptos de variable aleatoria, función de distribución y función de densidad.
Sea X una variable aleatoria, se denomina función de distribución acumulada aso-ciada a esa variable aleatoria, F(x):
F(x) = P (X≤ x)
Se comprueba que:
a)
b) F(x) es una función no decreciente de x.
c) F(x) es continua por la derecha.
Sea f (x) la función de densidad de probabilidad (fdp) de una variable aleatoria, y:
a) f(x) ≥ 0
b)
Además de la relación , se sigue que .
INTRODUCCIÓN A LA S IMULACIÓN
27
Cole
cción
1
Por lo que gráficamente la función de distribución en un punto, x0, representa el área delimitada por la función de densidad y la recta y = x0.
Gráficamente se tiene:
Figura 1.1. Función de densidad de probabilidad
Además:
Luego, P (a < X ≤ b) representa el área bajo la función de densidad entre los puntos es x = a y x = b.
28
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 1.2. Función de densidad entre dos puntos
La media de una distribución de probabilidad se define como:
para distribuciones discretas.
para distribuciones continuas.
La varianza de una distribución de probabilidad se define como:
para distribuciones discretas.
para distribuciones continuas.
Aplicaciones de Visual Basic (VBA) para realizar una simulación
Es claro que una forma de abordar el problema de la programación de experimentos de simulación consiste en escribir un programa especial para simular cada sistema que
INTRODUCCIÓN A LA S IMULACIÓN
29
Cole
cción
1
se desea estudiar. Para ello, se utiliza una de las bien conocidas aplicaciones de Visual Basic, que consiste en un lenguaje de macro de Microsoft de Visual Basic con aplicacio-nes bajo Windows.
Se puede decir con seguridad que esta alternativa ofrece máxima flexibilidad para el programador de simulación: a) en el diseño y la formulación de modelos matemáticos para el sistema bajo estudio; b) en la utilización del grabador de macros que facilita la programación; c) en el tipo de formato de los reportes de salida que se generan, y d) en la clase de experimentos de simulación que se realizan con el modelo.
No obstante, la dificultad que se experimenta al escribir programa de simulación utilizando un lenguaje de macros de Microsoft de Visual Basic constituye la principal deficiencia de este enfoque. A continuación, se brindan unas definiciones básicas para tenerse en cuenta al momento de programar experimentos de simulación a través de un lenguaje macro de Visual Basic.
¿Qué es una macro de MS-Excel?
Una macro son un conjunto de instrucciones que sirven para automatizar la hoja de cálculo de Ms-Excel. El uso de macros permite la automatización de tareas repetitivas, como, por ejemplo, la programación de experimentos de simulación.
¿Qué es un procedimiento en VBA?
Es un conjunto de instrucciones o sentencias que ejecutan una tarea específica. Tiene un nombre o identificador y puede recibir o no parámetros. Se puede llamar a un procedi-miento desde distintos lugares del código. Luego de su ejecución, el control del flujo del programa regresa al punto que llamó al procedimiento.
30
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
¿Cómo se crea una macro?
Para crear una macro se tienen los siguientes pasos:a. Ir al menú Archivo de Ms-Excel y hacer clic para que se despliegue la ventana
de Excel.b. Escoger Opciones.c. Del cuadro anterior, escoger Personalizar cinta de opciones.d. Estando en este cuadro, asignar la casilla de verificación denominado Desarro-
llador y luego hacer clic en Aceptar, que se encuentra en la parte de abajo del cuadro.
e. Inmediatamente, se pone el desarrollador en el menú principal de Ms-Excel. f. Ir al menú principal del Ms-Excel y hacer clic en Desarrollador; se abrirá la
ventana que contiene una pestaña para grabar macro.g. Hacer clic en grabar macro; se abrirá un cuadro de diálogo, donde se le dará un
nombre a la macro por crear, que servirá para llamarla posteriormente.h. Saber que se está grabando una macro cuando aparece un botón llamado detener
grabación y en la barra de estado aparece un mensaje que dice: grabando.i. Después de realizar el proceso, detener la grabación, dando clic en el botón de
la barra de estado detener grabación. Como esta macro se guardó en este libro, solamente se podrá ejecutar en cualquier hoja de este libro.
Insertar un nuevo módulo
Un módulo sirve para agrupar procedimientos y funciones. El procedimiento y la fun-ción son entidades de programación que sirven para agrupar instrucciones de código que realizan una acción concreta. Para insertar un módulo, haga clic en Desarrollador, luego Visual Basic y active opción del menú Insertar/ Módulo. Se activará una nueva ventana; si aparece demasiado pequeña, maximícela.
INTRODUCCIÓN A LA S IMULACIÓN
31
Cole
cción
1
Ya se ha dicho que un procedimiento es un bloque de instrucciones de código que sirven para llevar a cabo alguna tarea específica. Un procedimiento empieza siempre con la instrucción:
Sub Nombre_Procedimiento ()
Conjunto de instruccionesY termina con la instrucción
End Sub
El editor de Visual Basic es la aplicación que se va a utilizar para construir programas de experimentos de simulación en las macros que interactuarán junto con los libros de trabajo.
Creación de un “botón” de comando, que al hacer clic sobre él llame un procedi-miento o macro.
Para llamar una macro o un procedimiento, se puede hacer a través de uno de los dos tipos de “botones” de comando a saber:
• Un botón de comando de los controles de formulario. • Un botón de comando de los controles ActiveX.
Para crear un botón de comando, se hace lo siguiente:a. Hacer clic en desarrollador y se obtendrá una página para insertar botones.b. Insertar un botón de comando de los controles de formulario o de los controles
de ActiveX.
¿Qué es una variable en una aplicación de Visual Basic?
Una variable es un espacio de memoria reservado para el almacenamiento de valores que pueden cambiar durante la ejecución de un programa. Requiere de un identificador o nombre y un tipo de datos.
32
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo: Dim v as Integer, Dim x as Double, Dim p as String,Public v1 as Integer, Public v2 as Double.
Ejemplo 1.1
Supóngase que la demanda mensual de un producto es aleatoria, con la siguiente distri-bución de probabilidad empírica.
Tabla 1.1. Demanda mensualDemanda mensual (unidades) Probabilidad de ocurrencia
85 0,05110 0,10130 0,15145 0,20150 0,12165 0,15175 0,13190 0,05200 0,05
Se desea determinar la media, la varianza y la desviación estándar.
Macro para determinar la media, la varianza y la desviación estándar de una distribución empírica discreta
La siguiente macro (código de Visual Basic en Excel) permite determinar la media, la varianza y la desviación estándar de una variable aleatoria. Se crea una macro de nombre Simular que haga lo siguiente:
INTRODUCCIÓN A LA S IMULACIÓN
33
Cole
cción
1
• Indicar cuántos datos o eventos por introducir.• Indicar cuál es el valor de la variable para cada evento.• Indicar cuál es la probabilidad de cada evento.• Controlar los valores de las probabilidades que no sean menores que 0 o mayores
o iguales que 1.• Las celdas para situar los datos.• Escribir los datos en negrita, tamaño 12, nombre de la fuente en “Arial” y centrados.• Cuadricular (“Todos los bordes”) los datos.• Resaltar las celdas cabeceras en colores (amarillos).• Utilizar las funciones estadísticas en forma de código en Visual Basic.
Procedimiento 1.1. Macro para determinar la media, la varianza y
la desviación estándar de una distribución empírica
Sub Simular()‘Declaración de variablesDim miu, sigma, V As Double, P(1 To 1000) As DoubleDim x(1 To 1000) As Long, n As IntegerLimpiarborrarActiveWindow.DisplayGridlines = FalseRange(“A1:E200”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .ReadingOrder = xlContextEnd WithRange(“B2”).Select: ActiveCell.FormulaR1C1 = “Variable Aleatoria”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range(“B2:C2”).SelectSelection.Interior.ColorIndex = 6inicio:n = InputBox(“Introduzca el número de datos o eventos a introducir:” _
34
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
& “ (No debe ser mayor que 1000)”)If n > 1000 ThenGoTo inicioEnd If‘cuadricularRange(“B2:C” & (n + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium End WithRange(“B3:C” & (n + 6)).Select: Selection.Interior.ColorIndex = 20 Sum = 0 For i = 1 To n x(i) = InputBox(“Cuál es la variable aleatoria X “ & i) Cells(i + 2, 2).Value = x(i)comenzar:P(i) = InputBox(“Cuál es la probabilidad de la varaible aleatoria X “ & i)If P(i) < 0 Or P(i) > 1 ThenMsgBox “La probabilidad es incorrecta”, vbOKOnly, “! ERROR! “GoTo comenzarEnd IfCells(i + 2, 3).Value = P(i)Sum = Sum + P(i)Next iIf Sum > 1 ThenRange(“B3:C” & (n + 3)).ClearContentsGoTo comenzarEnd If‘cálculo de la mediaRange(“B” & (n + 4)).Select: ActiveCell.FormulaR1C1 = “La media es”miu = Application.SumProduct(Range(“B3:B” & (n + 2)), Range(“C3:C” & (n + 2)))Cells(n + 4, 3).Value = miuRange(“B” & (n + 5)).Select: ActiveCell.FormulaR1C1 = “La Varianza es”For i = 1 To nV = V + ((x(i) - miu) ^ 2) * P(i)Next iCells(n + 5, 3).Value = Round(V, 2)
INTRODUCCIÓN A LA S IMULACIÓN
35
Cole
cción
1
Range(“B” & (n + 6)).Select: ActiveCell.FormulaR1C1 = “La desviación estándar es”sigma = Sqr(V): Cells(n + 6, 3).Value = Round(sigma, 2)Range(“A1”).SelectEnd SubSub Limpiarborrar()Range(“M7”).Select Selection.Copy Range(“A1:J1000”).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range(“A1”).SelectEnd Sub
Nota: el procedimiento Limpiarborrar se realizó mediante la ayuda del grabador de macros del Excel.
Cálculo del número de corridas de simulaciones
A continuación, se va a indicar una fórmula para determinar el tamaño de una corrida de simulación que depende generalmente del tipo de distribución que se intenta simu-lar; se va a demostrar también la bondad del generador de números aleatorios (R), cuya distribución uniforme se encuentra comprendida entre 0 y 1.
Nomenclatura:n = número de simulaciones o corridas.Z = estadístico normal estándar para cierto valor de alfa.k = desviación absoluta máxima permitida sobre la media de la distribución a simular.σ2 = varianza de la distribución a simular.
36
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo 1.2
Se requiere determinar el número de corridas que debe realizar un programador de experimentos de simulación para generar una variable aleatoria, de manera tal que la media de la variable no difiera del ± 0,188σ de su valor real, con una confiabilidad del 95%. Para realizar el procedimiento se tiene:
Se declara n como una variable entera y se captura el rango de la variable.La variable Z se obtiene de acuerdo con una función estadística NormSInv (prob).El cálculo de n se procede mediante la fórmula anterior.
Procedimiento 1.2. Macro para calcular el número de corridas
Sub NumeroDeCorrida()Dim n As Integer, sigma As Double, k As DoubleDim Z As Double, confiabilidad As Double, alfa As Doublek = InputBox ("Digite el rango del valor de la variable:")confiabilidad = InputBox ("Digite la confiabilidad en valores decimales:")alfa = (1 - confiabilidad) / 2Z = Application.NormSInv(alfa)n = (Z ^ 2) / (k ^ 2)MsgBox nEnd Sub
La siguiente fórmula sirve para un tamaño de la muestra de 30 o menos datos, la cual modifica la fórmula anterior:
n = número de simulaciones o corridas.t = estadístico de distribución t de student.k = desviación absoluta máxima permitida sobre la media de la distribución a simular.S² = estimador de la varianza de la distribución a simular.
INTRODUCCIÓN A LA S IMULACIÓN
37
Cole
cción
1
Cálculo del número de réplicas
Cuando se quiere correr un sistema de simulación con corrida muy grande, se debe recurrir a las réplicas para llegar a la estabilización. Para obtener resultados inde-pendientes, hay que repetir varias veces la simulación o corridas de n con diferentes números aleatorios.
Teniendo los resultados de cada una de las réplicas, es necesario tomar estos resulta-dos para calcular los estimadores de media, varianza e intervalo de confianza de acuerdo con el siguiente procedimiento:
• Calcular la media y varianza de las observaciones para cada réplica individual con las fórmulas:
• Con la media y varianza de cada una de las réplicas, encuentre la media y varianza entre las réplicas con las siguientes fórmulas:
rj = réplica tipo j. p = número de réplicas.
38
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
• Debido a la naturaleza probabilística de los resultados, es indispensable que para cada variable de respuesta se calcule el intervalo de confianza de acuerdo con:
Ejemplo 1.3
Se requiere generar una variable aleatoria cuyo valor oscila entre 6 y 8 unidades. La macro que se mostrará a continuación genera una variable aleatoria con los siguientes aspectos:
a. Se determina el número de corridas (por ejemplo, 20).b. Se determina el número de réplicas (por ejemplo, 10).c. Se posicionan los valores en celdas determinadas por el programador.d. Captura de datos como el número de corridas, número de réplicas, límite infe-
rior (a), límite superior (b) de la variable y R como número aleatorio.e. Se presentan dos macros, una llama a la otra.f. Se genera el valor de la variable mediante:
X = a + (b-a) R
g. Se determinan los promedios, las varianzas y las desviaciones de las corridas y de las réplicas.
INTRODUCCIÓN A LA S IMULACIÓN
39
Cole
cción
1
Procedimiento 1.3. Macro para generar variable aleatoria con réplicas
Sub Generarvariables03()Dim x As Double, a As Double, b As Double, n As IntegerDim k As Integer, prom(2000), V2(2000), V3 As Double Limpiarborrar ActiveWindow.DisplayGridlines = False Range(“A1:H200”).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter . WrapText = True End With n = InputBox (“Digite el número de corridas:”): Cells (1, 1). Value = n k = InputBox (“Digite el número de réplicas:”) a = InputBox (“Introduzca el valor del límite inferior (a):”) b = InputBox (“Introduzca el valor del límite superior (b):”) Range(“B8:C8,F8:G8”).Select Selection.Interior.ColorIndex = 24 Range(“B9:C” & (n + 8)).Select Selection.Interior.ColorIndex = 19 Range(“F9:G” & (k + 8)).Select Selection.Interior.ColorIndex = 19 Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida” Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria” Range (“F8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.” Range(“G8”). Select: ActiveCell.FormulaR1C1 = “Promedio de variable” Range(“H8”). Select: ActiveCell.FormulaR1C1 = “Varianza de los Promedio de la Variable” Range(Cells(n + 9, 2), Cells(n + 12, 3)).Select Selection.Interior.ColorIndex = 20 Range(Cells(k + 9, 6), Cells(k + 11, 7)).Select Selection.Interior.ColorIndex = 20 Range(“B” & (n + 9)).Select: ActiveCell.FormulaR1C1 = “La media” Range(“B” & (n + 10)).Select: ActiveCell.FormulaR1C1 = “La Varianza” Range(“B” & (n + 11)).Select: ActiveCell.FormulaR1C1 = “Limite inferior” Range(“B” & (n + 12)).Select: ActiveCell.FormulaR1C1 = “Limite superior” Range(“F” & (k + 9)).Select: ActiveCell.FormulaR1C1 = “Promedio” Range(“F” & (k + 10)).Select: ActiveCell.FormulaR1C1 = “Varianza” Range(“F” & (k + 11)).Select: ActiveCell.FormulaR1C1 = “Desviación Estandar”
40
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
For i = 1 To kVar = “RÉPLICA NÚMERO “+ Str(i)MsgBox Var, vbOKOnly, “RÉPLICAS” For j = 1 To n Cells(j + 8, 2) = j R = Rnd: x = a + (b - a) * R Cells(j + 8, 3).Value = Round(x, 2) Next j Cells(i + 8, 6) = i Cells(n + 9, 3).Value = (a + b) / 2 Cells(n + 10, 3).Value = ((b - a) ^ 2) / 12 Cells(n + 11, 3).Value = a Cells(n + 12, 3).Value = b prom(i) = Application.WorksheetFunction.Average(Range(“C9:C” & (n + 8))) Cells(i + 8, 7) = prom(i) V2(i) = Application.WorksheetFunction.Var_S(Range(“C9:C” & (n + 8))) Cells(i + 8, 8).Value = V2(i) V3 = V3 + (i - 1) * V2(i)Next iCells(k + 9, 7).Value = Application.WorksheetFunction.Average(Range(“G9:G” & (k + 8)))Cells(k + 10, 7).Value = V3 / (k * (n - 1))Cells(k + 11, 7).Value = Sqr(V3 / (k * (n - 1)))Cells(1, 1).SelectEnd Sub
Sub Limpiarborrar()Range("M7").Select Selection.Copy Cells.Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range("A1").SelectEnd Sub
INTRODUCCIÓN A LA S IMULACIÓN
41
Cole
cción
1
Ejercicios
1. Determinar el valor esperado, la varianza y la desviación estándar de la variable aleatoria que tiene la siguiente distribución de probabilidad.
X 100 200 300 400 500 600P(X) 0,30 0,25 0,20 0,15 0,05 0,05
2. El tiempo empleado por el médico en examinar a un paciente es una variable alea-toria con función de densidad:
Si t ≥ 0
Determine el tiempo promedio, la varianza y la desviación estándar.
3. El tiempo de proceso de torneado de una pieza sigue la función de probabilidad:
Si 5 ≤ x ≤ 10
Calcule la media, la varianza y la desviación estándar.
4. El tiempo de operación se comporta como una variable aleatoria con la siguiente distribución de probabilidad:
42
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Calcule la media, la varianza y la desviación estándar.
5. Determinar la media, la varianza y la desviación estándar de la variable aleatoria que tiene la siguiente distribución de probabilidad:
2Generación de números aleatorios
con aplicaciones de Visual Basic
Un número es aleatorio si, en principio, no es posible conocer de antemano cuál será su valor. Un número aleatorio es aquel que está comprendido en un rango [0,1]. Los números aleatorios que vayan a describir un proceso dado deben
tener como distribución de probabilidad la misma distribución que rige el proceso en estudio.
Sin embargo, existen procedimientos mucho más prácticos que nos permiten efectuar simulaciones del tipo descrito. Pero antes debemos estudiar la generación de números aleatorios distribuidos uniformemente.
Se entiende por distribución uniforme aquella en la cual la probabilidad de que una variable x caiga en cualquier intervalo dentro de un determinado rango de valores es proporcional al valor de dicho rango. En términos discretos, la probabilidad de que un evento dado ocurra es la misma para cualquier evento.
Existen muchos métodos para generar los números aleatorios entre 0 y 1, a saber:• Generador de números aleatorios mediante función estadística Rnd.• Algoritmo de cuadrados medios.• Algoritmo de productos medios.• Algoritmo multiplicador constante.• Algoritmo de congruencia lineal.• Algoritmo de congruencia multiplicativo.• Algoritmo de congruencia aditivo.• Algoritmo de congruencia cuadrático.
44
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de números aleatorios mediante función estadística
La función estadística Rnd en un código Visual Basic es una forma muy eficaz para generar números aleatorios, que se realiza acompañada con las siguientes instrucciones:
For i = 1 To n R = Rnd Cells(i + 4 , 2).value = R Next
Pasos:1. Seleccionar una hoja de Excel.2. Seleccionar una columna para números de corridas.3. Seleccionar una columna para números aleatorios.4. Insertar tres botones de comando de control de formulario o de control de
ActiveX.5. Hacer doble clic en cada botón para ir al editor Visual Basic respectivo.6. Escribir código en Visual Basic para cada botón.
Se crean tres macros, a saber:a. Una macro que borre y limpie datos anteriores.b. Una macro que cuadricule (todos los bordes) las celdas que se necesitarán y haga
lo siguiente:• En la celda A4, escribir “Número de corridas”.• En la celda B4, escribir “Número aleatorios”.• Digitar el número de corridas.• Escribir los datos en negrita y centrados.• Las celdas para situar los datos.
c. Una macro que genere números aleatorios.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
45
Cole
cción
1
Procedimiento 2.1. Macro para “limpiar” la hoja de cálculo y generar números aleatorios1
Sub Limpiar()Range("R1").SelectSelection.Copy Cells.Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range("A1").SelectEnd Sub
Procedimiento 2.2. Macro para cuadricular (todos los bordes) celdas y generar números aleatorios
Private Sub CommandButton1_Click()Dim N As IntegerActiveWindow.DisplayGridlines = FalseRange("A1:C200").SelectWith Selection .Font.Bold = True .Font.Name = "Arial" .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange("A4").Select: ActiveCell.FormulaR1C1 = "Número de corridas"Range("B4").Select: ActiveCell.FormulaR1C1 = "Números Aleatorios"Range("A4:B4").SelectSelection.Interior. ColorIndex = 46N = InputBox ("Introduzca el número de aleatorios que desea:")Cells(1, 1).Value = NRange(Cells(4, 1), Cells(N + 4, 2)).Select With Selection
1 Este procedimiento se hizo con la ayuda del grabador de macros
46
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End With Range(“A1”).SelectEnd Sub
Procedimiento 2.3. Macro para generar números aleatorios mediante la instrucción Rnd
Private Sub CommandButton2_Click()Dim N As IntegerN = Cells(1, 1).ValueFor i = 1 To NCells(i + 4, 1).Value = iR = RndCells(i + 4, 2).Value = RNext iEnd Sub
Algoritmo de cuadrados medios
Este método de generación de números aleatorios, fundamentado en unos resultados de Von Neuman y denominado método de los cuadrados medios, consiste en tomar un número al azar (semilla de aleatorización) x0, de 2n cifras, elevarlo al cuadrado, después de tomar de este resultado las 2n cifras centrales y repetir la operación de acuerdo con el número de corridas. Este algoritmo se realiza de la siguiente manera:
X0 = semilla de aleatorización. N = número de corridas.k = número de caracteres que se desea extraer.R = número aleatorio.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
47
Cole
cción
1
Ejemplo 2.1
Generar 10 números aleatorios escogiendo como semilla el número 4122 y extraer 2 caracteres.
Macro para generar pseudoaleatorio mediante los cuadrados medios
Como el método anterior, se crearán tres macros: una que limpie, otra que cuadricule celdas y luego una macro que genere números aleatorios por el metodo de cuadrados medios.
Como macro para “limpiar” la hoja de cálculo, se utilizará el procedimiento 2.1 de Visual Basic, que borre y limpie datos anteriores.
48
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Macro para hacer cuadrícula (todos los bordes) y generar números aleatorios por el algoritmo de cuadrados medios
A veces en Excel hay que “maquillar” algunos cuadros para lograr una mejor presen-tación. A continuación, se presentará una macro para hacer cuadrícula a través de un procedimiento en Visual Basic.
Procedimiento 2.4. Macro para cuadricular (todos los bordes)
las celdas para el algoritmo de cuadrados medios
Private Sub CommandButton1_Click()Dim N As IntegerActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = "Arial" .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange("F3").Select: ActiveCell.FormulaR1C1 = "Número de corridas"Range("G3").Select: ActiveCell.FormulaR1C1 = "Números Aleatorios"Range("F3:G3").SelectSelection.Interior. ColorIndex = 46N = InputBox ("Introduzca el número de aleatorios que desea:")Cells(1, 1).Value = NRange(Cells(3, 6), Cells(N + 3, 7)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End With Range("A1").SelectEnd Sub
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
49
Cole
cción
1
Una vez finalizadas las dos macros anteriores, se insertarán dos botones de comando en la hoja de Excel con su respectivo macro.
Macro para generar números aleatorios por el métodos de cuadrados medios
Para realizar esta macro, se hacen los siguientes pasos:a. Realizar el procedimiento 2.4.b. Captura del número como semilla de aleatorizacion.c. Condicionar el número de dígitos de la semilla.d. Captura del número de caracteres por extraer, por medio de la función Mid.e. Capturar el número de corridas preguntado en la macro anterior.f. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.g. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-
torios por el método de cuadrados medios.
Procedimiento 2.5. Macro para generar números aleatorios por el algoritmo de cuadrados medios
Dim X, Y As Long, n As Integer, k, L As Integer, M As VariantLIMPIARActiveWindow.DisplayGridlines = FalseInicio:X = InputBox ("Introduzca la semilla de aleatorización minimo de tres dígitos:")Cells (2, 2). Value = XIf (X <= 100) ThenMsgBox "La semilla debe ser minimo de tres dígitos", vbOKOnly, "¡¡ERROR!!"GoTo InicioEnd Ifk = InputBox ("Introduzca el número de dígitos de posición Inicial que se desea extraer (mayor o igual que 2:")Cells (3, 1). Value = kL = InputBox ("Introduzca el número de dígitos de centro que se debe devolver:")
50
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells (3, 2). Value = LFor i = 1 To nCells (3 + i, 6). Value = iY = X ^ 2M = Mid (Y, k, L)Cells (3 + i, 7). Value = M / ((10) ^ (L))X = MNextEnd Sub
Sub LIMPIAR ()Range(“R1”). SelectSelection.Copy Cells.Select Selection.PasteSpecial Paste: =xlPasteFormats, Operation: =xlNone, _ SkipBlanks: =False, Transpose: =False Application.CutCopyMode = False Selection.ClearContents Range(“A1”). SelectEnd Sub
Algoritmo de productos medios
Este método requiere de dos semillas, las cuales se multiplican, y del producto se extrae un número determinado de dígitos centrales; estos formarán otro producto con la otra semilla y el número pseudoaleatorio se construirá con la división 10 elevado al número de dígitos. Este algoritmo se realiza de la siguiente manera:
X0 = primera semilla de aleatorización. Y0 = segunda semilla de aleatorización. N = número de corridas. k = números de caracteres que se desean extraer. R = número aleatorio.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
51
Cole
cción
1
Veamos el siguiente ejemplo: generar 10 números aleatorios, siendo la primera semi-lla de aleatorizacion el número 4578 y la segunda semilla de aleatorizacion el número 5789, extrayendo 2 caracteres.
Macro para generar pseudoaleatorio mediante los productos medios
Para realizar esta macro, se hacen los siguientes pasos:
a. Captura del número como la primera semilla de aleatorizacion.b. Captura del número como la segunda semilla de aleatorizacionc. Condicionar el número de dígitos de la semilla.d. Captura del número de caracteres por extraer, mediante la función Mid.e. Capturar el número de corridas.f. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.
52
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
g. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-torios por el algoritmo de productos medios.
Procedimiento 2.6. Macro para generar aleatorios mediante los productos medios
Sub GeneradorProductosMedios()Dim n(2000) As Variant, X, Y As LongDim k, L As Integer, R(2000) As VariantDim M As Variant, c As IntegerLIMPIARActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection.Font.Bold = True.Font.Name = “Arial”.Font.Size = 12.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.WrapText = TrueEnd WithInicio:Range(“D1”).SelectActiveCell.FormulaR1C1 = “Semilla de aleatorización 1”Range(“F1”).SelectActiveCell.FormulaR1C1 = “Semilla de aleatorización 2”X = InputBox(“Introduzca la primera Semilla de aleatorización mínimo de tres cifras”)Cells(1, 5).Value = XY = InputBox(“Introduzca la segunda Semilla de aleatorización mínimo de tres cifras”)Cells(1, 7).Value = YIf (X < 100) And (Y < 100) ThenMsgBox “Los números deben ser mayor de tres Dígitos”, vbOKOnly, “ERROR”GoTo InicioEnd IfColumns(“D:E”).EntireColumn.AutoFitcomenzar:k = InputBox(“Introduzca el valor de las primeras posicciones”)Cells(1, 8).Value = kL = InputBox(“Introduzca el número de caracteres de centro que se debe devolver”)Cells(1, 9).Value = LIf (k > L) ThenMsgBox “El número de primeras posiciones debe ser menor que el numero de caracteres centrales”, vbOKOnly, “ERROR”GoTo comenzarEnd If
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
53
Cole
cción
1
c = InputBox(“Introduzca el Número Corridas”): Cells(1, 10).Value = cRange(“F3”).SelectActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”).SelectActiveCell.FormulaR1C1 = “Número Aleatorio”Range(“F3:G3”).SelectSelection.Interior.ColorIndex = 46Range(“F3:G” & (c + 3)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithFor i = 1 To cCells(i + 3, 6).Value = iX1 = XY1 = YZ = X1 * Y1M = Mid(Z, k, L)R(i) = (M / (10 ^ (L)))Cells(i + 3, 7).Value = R(i)X = Y1Y = MNextRange(“E1”).SelectEnd Sub
Algoritmo multiplicador constante
Este método requiere dos semillas, pero una debe ser constante; estas se multiplican y del producto se extrae un número determinado de dígitos centrales, los cuales formarán otro producto con la otra semilla, y el número pseudoaleatorio se formará con la divi-sión 10 elevado al número de dígitos. Este algoritmo se realiza de la siguiente manera:
X0 = primera semilla de aleatorización. Y0 = la semilla constante de aleatorización.
54
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
N = número de corridas. k = números de caracteres que se desean extraer. R = número aleatorio.
Veamos el siguiente ejemplo: generar 10 números aleatorios, siendo la primera semi-lla de aleatorizacion el número 4578 y la semilla constante de aleatorizacion el número 5789, extrayendo 2 caracteres.
Macro para generar pseudoaleatorio mediante el algoritmo multiplicador constante
Para realizar esta macro, se hacen los siguientes pasos:
a. Captura del número como la primera semilla de aleatorizacion.b. Captura del número como la semilla constante de aleatorizacionc. Condicionar el número de dígitos de la semilla.d. Captura del número de caracteres por extraer, mediante la función Mid.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
55
Cole
cción
1
e. Capturar el número de corridas.f. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.g. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-
torios por el algoritmo multiplicador constante.
Procedimiento 2.7. Macro para generar números aleatorios
mediante el algoritmo multiplicador constante
Sub GeneradorMultiplicadorConstante()Dim n(2000) As Variant, X, Y As LongDim k, L As Integer, R(2000) As VariantDim M As Variant, c As IntegerLIMPIARActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection.Font.Bold = True.Font.Name = “Arial”.Font.Size = 12.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.WrapText = TrueEnd WithInicio:Range(“D1”).SelectActiveCell.FormulaR1C1 = “Semilla de aleatorización 1”Range(“F1”).SelectActiveCell.FormulaR1C1 = “Semilla de aleatorización 2”X = InputBox(“Introduzca la primera Semilla de aleatorización mínimo de tres cifras”)Cells(1, 5).Value = XY = InputBox(“Introduzca la Semilla de aleatorización constante mínimo de tres cifras”)Cells(1, 7).Value = YIf (X < 100) And (Y < 100) ThenMsgBox “Los números deben ser mayor de tres Dígitos”, vbOKOnly, “ERROR”GoTo InicioEnd IfColumns(“D:E”).EntireColumn.AutoFit
56
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
comenzar:k = InputBox(“Introduzca el valor de las primeras posicciones”)Cells(1, 8).Value = kL = InputBox(“Introduzca el número de caracteres de centro que se debe devolver”)Cells(1, 9).Value = LIf (k > L) ThenMsgBox “El número de primeras posiciones debe ser menor que el numero de caracteres centra-les”, vbOKOnly, “ERROR”GoTo comenzarEnd Ifc = InputBox(“Introduzca el Número Corridas”): Cells(1, 10).Value = cRange(“F3”).SelectActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”).SelectActiveCell.FormulaR1C1 = “Número Aleatorio”Range(“F3:G3”).SelectSelection.Interior.ColorIndex = 46Range(“F3:G” & (c + 3)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThinEnd WithFor i = 1 To cCells(i + 3, 6).Value = iX1 = XY1 = YZ = X1 * Y1M = Mid(Z, k, L)R(i) = (M / (10 ^ (L)))Cells(i + 3, 7).Value = R(i)X = MNextRange(“E1”).SelectEnd Sub
Una vez que ha finalizado la corridad de esta macro, se obtiene el siguiente, mostrado en la figura siguiente.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
57
Cole
cción
1
Algoritmo de congruencia lineal
Método propuesto por Lehmer que consiste en generar una secuencia de números enteros partiendo de una semilla (x0) por medio de la siguiente ecuación:
a = constante multiplicativab = constante aditivak = el móduloMod = función de Excel del residuo de la divisiónX0 = semilla de aleatorización
Xi = (aXi – 1 + b) Mod (k) para todo i, i =1,2, 3, …….,n
El número aleatorio se determina mediante la siguiente ecuación:
Veamos el siguiente ejemplo: generar 10 números aleatorios, teniendo como X0 = 39, a = 21, b = 33 y k = 100.
Macro para generar pseudoaleatorio mediante el algoritmo congruencial lineal
Para desarrollar esta macro, se necesita:
a. Realizar el procedimiento 2.4.b. Captura del número como semilla de aleatorizacion.c. Captura de los parámetros a, b y k.d. Condicionar el número de dígitos de la semilla.e. Emplear el operador aritmático Mod para encontrar el resto de la división entera.
58
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
f. Capturar el número de corridas.g. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.h. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-
torios por el algoritmo de congruencia lineal.
Procedimiento 2.8. Macro para generar mediante el algoritmo congruencia lineal
Sub CongruencialLineal()Dim n, M As Variant, k As IntegerDim X(0 To 10000) As Double, R As DoubleLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:H200”).SelectWith Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithInicio:X (0) = InputBox (“Introduzca una Semilla de aleatorización mínimo de dos cifras”)a = InputBox (“Introduzca la constante multiplicativa (debe ser número entero)”)b = InputBox (“Introduzca la constante aditiva (debe ser número entero)”)k = InputBox (“Introduzca el módulo (debe ser número entero)”)If (X (0) < 10) ThenMsgBox “El número debe ser mayor que 10”, vbOKOnly, “ERROR”GoTo InicioEnd IfRange(“D1”). Select: ActiveCell.FormulaR1C1 = “Semilla de aleatorización”Range(“D2”). Select: ActiveCell.FormulaR1C1 = “La constante multiplicativa”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “La constante aditiva”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “El módulo”Columns(“D:D”).EntireColumn.AutoFitCells(1, 5).Value = X: Cells(2, 5).Value = aCells(3, 5).Value = b: Cells(4, 5).Value = kRange(“F3”). Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”Range(“F3:G3”).Select
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
59
Cole
cción
1
Selection.Interior.ColorIndex = 6comenzar:c = InputBox (“Introduzca el Número Corridas”): Cells (1, 8).Value = cFor i = 1 To cCells(i + 3, 6).Value = iX(i) = (a * X(i - 1) + b) Mod k
R = X(i) / (k - 1): Cells(i + 3, 7).Value = RNextCuadricularRange("E1").SelectEnd Sub
Algoritmo de congruencia multiplicativo
Si b = 0, el generador de números pseudoaleatorios recibe el nombre de multiplicativo y suele utilizar m = pg, donde p representa la cantidad de dígitos del sistema de numera-ción del computador (p = 2) y g es la cantidad de dígitos de una palabra. El valor de g, en el caso de computador con longitud de palabra variable, se deja a elección del simulador.
Existen estudios que prueban que el periodo máximo que se puede obtener con el generador multiplicativo en computadores es m/4, con m = 2g (g > 2), y se logra con X0 impar y la contante multiplicativa igual a: 8k + 3, donde k = 1, 2, 3. . .
La ecuación para el generador multiplicativo será:
a = constante multiplicativa = 8k +3
X0 = (aXi – 1) Mod (m) i = 1,2, 3,…...n
m= 2g, en donde g es un número entero.El número aleatorio se obtiene con la ecuación:
60
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Si b ≠ 0, el generador de números pseudoaleatorios recibe el nombre de mixto. La ventaja de este generador de números pseudoaleatorios con respecto al anterior es que, con este, si se hace una elección adecuada de a y b, se puede conseguir que el periodo sea m.
Veamos ahora el siguiente ejemplo:
X0 = 27; g = 5; m = 25 = 32; k = 2; a = 8(2) +13 = 19
Macro para generar pseudoaleatorio mediante el algoritmo congruencial multiplicativo
Para desarrollar esta macro, se necesita:
a. Realizar el procedimiento 2.4.b. Captura del número como semilla de aleatorizacion.c. Captura el parámetro g.d. Determina los parámetros a, k y m.e. Condicionar el número de dígitos de la semilla.f. Emplear el operador aritmático Mod para encontrar el resto de la división entera.g. Capturar el número de corridas.h. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.i. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-
torios por el algoritmo de congruencia multiplicativo.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
61
Cole
cción
1
Procedimiento 2.9. Macro para generar números aleatorios
mediante al algoritmo congruencial multiplicativo
Sub Congruencialmultiplicativo()Dim n, M As Variant, k As IntegerDim X(0 To 10000) As Double, R As DoubleLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:F200”).SelectWith Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd Withk = 2X(0) = InputBox(“Introduzca una Semilla de aleatorización mínimo de dos cifras e impar”)a = 8 * k + 3G = InputBox(“Introduzca un número entero”): M = 2 ^ GRange(“D1”).Select: ActiveCell.FormulaR1C1 = “Semilla de aleatorización”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “La cantidad de dígitos”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “El número entero”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “El constante de a”Range(“D5”).Select: ActiveCell.FormulaR1C1 = “El módulo”Columns(“D:D”).EntireColumn.AutoFitCells(1, 5).Value = X(0): Cells(2, 5).Value = kCells(3, 5).Value = G: Cells(4, 5).Value = aCells(5, 5).Value = MRange(“F3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”Range(“F3:G3”).SelectSelection.Interior.ColorIndex = 6c = InputBox("Introduzca el Número Corridas"): Cells(1, 8).Value = cFor i = 1 To cCells(i + 3, 6).Value = iX(i) = (a * X(i - 1)) Mod MR = X(i) / (M - 1): Cells(i + 3, 7).Value = RNextCuadricularRange("E1").SelectEnd Sub
62
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Algoritmo de congruencia aditivo
Este método necesita una secuencia previa de n números enteros X1, X2, X3 . . .. Xn para generar una nueva secuencia de números enteros que parte de Xn+1, Xn+2, Xn+3, . . .. Esco-giendo un módulo, la ecuación para generar números pseudoaleatorios será:
Xi = (Xi – 1 + Xi – n ) Mod (m) i =n+1,n+2,n+3,…N
Los números aleatorios pueden ser generados por:
Veamos el siguiente ejemplo:
Sean X1 = 125; X2 = 89; X3 = 95; X4 = 79; X5 = 67 y m = 100
Macro para generar pseudoaleatorio mediante el algoritmo congruencial aditivo
Se crea una macro del mismo nombre del algoritmo, que haga lo siguiente:
a. Realizar el procedimiento 2.4.b. Captura del número de secuencia.c. Captura el valor de cada secuencia.d. Captura el módulo.e. Captura del número de corridas.f. Condicionar el número de dígitos de la semilla.g. Emplear el operador aritmático Mod para encontrar el resto de la división entera.h. Ejecutar la sentencia For-Next de acuerdo con el número de corridas.i. Dentro de la sentencia For-Next, escribir el algoritmo de generar números alea-
torios por el algoritmo de congruencia aditivo.
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
63
Cole
cción
1
Procedimiento 2.10. Macro para generar números aleatorios
mediante el algoritmo congruencial aditivo
Sub Congruencialaditivo()Dim n As Long, R As Double, X(1 To 10000) As DoubleLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:H2000”).SelectWith Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd Withn = InputBox (“Introduzca el número de secuencia de número enteros”)For i = 1 To nCells(i, 1).Value = “X” & iX(i) = InputBox (“Introduzca el número de X “ & i & “ de la secuencia”)Cells(i, 2).Value = X(i)NextRange(“A” & (n + 1)).Select: ActiveCell.FormulaR1C1 = “M”M = InputBox (“Introduzca el módulo”): Cells (n + 1, 2). Value = Mk = InputBox (“Introduzca el número de seudo-aleatorios a generar”)Cells (1, 8). Value = kRange(“F3”). Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”). Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”Range (“F3:G3”). SelectSelection.Interior.ColorIndex = 6For i = n + 1 To n + kCells(i - 2, 6).Value = i - nX(i) = (X(i - 1) + X(i - n)) Mod MR = X(i) / (M - 1): Cells(i - 2, 7).Value = RNextCuadricularRange("A1").SelectEnd Sub
64
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Algoritmo de congruencia cuadrático
Este método tiene la siguiente ecuación para determinar números pseudoaleatorios:
a = constante multiplicativa (debe ser número par)b = otra constante multiplicativa (debe ser (b – 1) Mod 4 = 1)c = constante aditiva (debe ser impar)g = número entero
Xi = (aX²i – 1 + bXi – 1 + c) Mod (m) i = 1,2,3,…..N
Los números aleatorios se generan por medio de:
Veamos un ejemplo: generar 10 números aleatorios teniendo en cuenta la siguiente información:
X0 = 23; a = 30; b = 25; c = 33; g = 5; m = 32
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
65
Cole
cción
1
Macro para generar pseudoaleatorio mediante el algoritmo congruencial cuadrático
Procedimiento 2.11. Macro para generar números aleatorios
mediante el algoritmo congruencial cuadrático
Sub CongruencialCuadratico()Dim n, M As Variant, k As Integer, R As DoubleDim X(0 To 10000) As DoubleLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:H2000”).SelectWith Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange(“D1”).Select: ActiveCell.FormulaR1C1 = “Semilla de aleatorización”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “La Constante multiplicativa a”X(0) = InputBox(“Introduzca una Semilla de aleatorización mínimo de dos cifras”)a = InputBox(“Introduzca la constante multiplicativa a (debe ser número entero par)”)Range(“D3”).Select: ActiveCell.FormulaR1C1 = “La Constante multiplicativa b”b = InputBox(“Introduzca la otra constante multiplicativa b (debe ser (b-1) mod 4 = 1”)Range(“D4”).Select: ActiveCell.FormulaR1C1 = “La Constante aditiva c”c = InputBox(“Introduzca la constante aditiva c (debe ser número entero e impar)”)Range(“D5”).Select: ActiveCell.FormulaR1C1 = “El módulo”G = InputBox(“Introduzca un número entero”): M = 2 ^ GColumns(“D:D”).EntireColumn.AutoFitCells(1, 5).Value = X(0): Cells(2, 5).Value = aCells(3, 5).Value = b: Cells(4, 5).Value = c: Cells(5, 5).Value = MRange(“F3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”Range(“F3:G3”).SelectSelection.Interior.ColorIndex = 6cor = InputBox(“Introduzca el Número Corridas”): Cells(1, 8).Value = corFor i = 1 To corCells(i + 3, 6).Value = i
66
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
X(i) = (a * (X(i - 1)) ^ 2 + b * X(i - 1) + c) Mod MR = X(i) / (M - 1)Cells(i + 3, 7).Value = RNextCuadricularRange("E1").SelectEnd Sub
Comprobación de la uniformidad y aleatoriedad de los generadores de números pseudoaleatorios
Una vez establecidos los métodos para generar números aleatorios, parece lógico plan-tearse, a partir de los valores obtenidos por un determinado método, si efectivamente estos cumplen con las propiedades de distribución uniforme comprendido entre 0 y 1.
Media y varianza de los números aleatorios
Una de las propiedades de estos números aleatorios es tener la misma probabilidad de presentarse y que muestre una distribución uniforme continua comprendida entre 0 y 1.
f(x) = función de densidad de probabilidad
a = cota inferior = 0b = cota superior = 1
La media
La varianza
La desviación estándar =
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
67
Cole
cción
1
Pruebas de medias
Para comprobar si los números pseudoaleatorios cumplen con las propiedades ante-riores, se recurre a la prueba de hipótesis para población normal bilateral, como se mostrará a continuación:
Hipótesis nula: H0: µ = 0.5Hipótesis alternativa: Ha: µ ≠ 0.5
Para decidir si una hipótesis formulada es cierta o falsa, se necesita un procedimiento que, de forma objetiva, permita aceptar o rechazar la hipótesis previamente presentada.
Determinación del estadístico Z0:
n = números aleatorios obtenidos
ri = número aleatorio iNivel = nivel de significancia
Si |Z0|<Zα−₂, no se rechaza la hipotesis nula, donde los números aleatorios tienen una distribucion
uniforme con media 0,5; en caso contrario, se rechaza la generacion de números aleatorios por no cumplir con las propiedades.
68
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Macro para hacer las pruebas de medias2
Esta macro exige la programación del rango en que se encuentran los números aleato-rios generados, con el fin de obtener el promedio de estos números aleatorios mediante la siguiente instrucción:
X = Application.WorksheetFunction.Average(Range(Cells(4,7),Cells(18,7)))
Esto quiere decir: determinar el promedio de los números aleatorios comprendidos en el rango “G4:G18”, rango que fue programado. Se requieren probar los siguientes 20 números aleatorios:
Número Número aleatorio Número Número aleatorio1 0,04740 11 0,598982 0,26205 12 0,629843 0,12289 13 0,056814 0,35782 14 0,929895 0,17700 15 0,361306 0,27035 16 0,145017 0,89948 17 0,848838 0,05535 18 0,964989 0,30545 19 0,2177110 0,78847 20 0,07363
2 La macro se realiza bajo los parámetros del cuadro anterior
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
69
Cole
cción
1
Procedimiento 2.12. Macro para realizar pruebas de medias
Sub pruebaNormal ()Dim alfa, nivel, zetacero, zetaalfa, zeraalfa2 As DoubleDim n As Integer, x As DoubleRange (“A4:B9”). ClearContentsrespuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _ “partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)Range(“A4”). SelectActiveCell.FormulaR1C1 = “Tamaño de la muestra”Columns(“A:A”).EntireColumn.AutoFitCells(4, 2).Value = nRange(“A5”). SelectActiveCell.FormulaR1C1 = “Nivel de Significancia”nivel = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = nivelalfa = (1 - nivel): Prob = 1 - (alfa / 2)Range(“A6”). SelectActiveCell.FormulaR1C1 = “Valor Crítico 1”zetaalfa = 0.5 + (Application.WorksheetFunction.NormSInv(alfa / 2) *(1/Sqr(12*n))Cells(6, 2).Value = zetaalfaRange(“A7”).SelectActiveCell.FormulaR1C1 = “Valor Crítico 2”Zetaalfa2 = 0.5 + (Application. WorksheetFunction.NormSInv(Prob)) *(1/Sqr(12*n))Cells(7, 2).Value = zetaalfa2Range(“A8”).SelectActiveCell.FormulaR1C1 = “El estadístico”Range(“A9”). SelectActiveCell.FormulaR1C1 = “La media es”x = Application.Average(Range(Cells(4, 7), Cells(n + 3, 7))): Cells(9, 2).Value = xsigma = Sqr (1 / 12)zetacero = (((x - 0.5)) * Sqr(n)) / sigma: Cells (8, 2).Value = zetaceroIf (zetacero < zetaalfa2) and (zetacero > zetaalfa )Thenaceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una _ &” distribución Uniforme” & “ con media 0.5”, vbInformation)Else
70
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
rechazo = MsgBox ("Se rehaza los números aleatorios generados que provienen de una _ &” distribución Uniforme" & " con media 0.5", vbInformation)End IfRange("A10").SelectEnd Sub
Pruebas de varianzas
Para comprobar si los números pseudoaleatorios cumplen con las propiedades anterio-res, se recurre a pruebas de hipótesis sobre la varianza de una población normal.
Hipótesis nula: H0: σ² = 1/12 Hipótesis alternativa: Ha: σ² ≠ 1/12 Determinación del estadístico σ²0
n = números aleatorios obtenidos
ri = número aleatorio iNivel = nivel de significancia
Si y , no se rechaza la hipótesis nula en donde los números aleatorios tienen
una distribucion uniforme con varianza = 1/12,
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
71
Cole
cción
1
Ejemplo 2.2
Realice la prueba de varianza a los siguientes 20 números aleatorios, con nivel de signi-ficancia de 0,05, en una hoja de Excel en el rango G4:G33:
Tabla 2.1. Números aleatorios por comprobar Número Número aleatorio Número Número aleatorio
1 0,04740 11 0,598982 0,26205 12 0,629843 0,12289 13 0,056814 0,35782 14 0,929895 0,17700 15 0,361306 0,27035 16 0,145017 0,89948 17 0,848838 0,05535 18 0,964989 0,30545 19 0,2177110 0,78847 20 0,07363
Macro para hacer las pruebas de varianzas3
Procedimiento 2.13. Macro para hacer prueba de varianzas a números aleatorios
Sub pruebaVar ()Dim alfa, nivel, Chicero1, Chicero2, VarM As DoubleDim n As Integer, x As Double, r (1 To 10000), v (1 To 1000) As DoubleRange (“A4:B10”). ClearContentsrespuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _ “partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + critical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)
3 La macro se realiza bajo los parámetros del cuadro anterior.
72
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“A4”). SelectActiveCell.FormulaR1C1 = “Tamaño de la muestra”Columns (“A: A”). EntireColumn.AutoFitCells (4, 2). Value = nRange(“A5”). SelectActiveCell.FormulaR1C1 = “Valor de alfa”alfa = CDbl (InputBox (“Introduzca el valor de alfa”)): Cells (5, 2) = alfaRange(“A6”). SelectActiveCell.FormulaR1C1 = “Grado de libertad”g = n - 1: Cells (6, 2). Value = gRange(“A7”). SelectActiveCell.FormulaR1C1 = “Valor Crítico1”Chicero1 = (Application.WorhsheetFunction. ChiInv (alfa/2, g))/(12*(n-1)): Cells (7, 2). Value = Chicero1Range(“A8”). SelectActiveCell.FormulaR1C1 = “Valor Crítico2”Chicero2 = (Application.WorhsheetFunction. ChiInv (1- (alfa/2), g))/(12*(n-1)): Cells (8, 2). Value = Chicero2Range(“A9”). SelectActiveCell.FormulaR1C1 = “La media muestral”x = Application. Average (Range (“G4: G” & (n + 3))): Cells (9, 2). Value = xFor i = 1 To nr(i) = Cells (i + 3, 7). ValueNext iFor i = 1 To nv(i) = ((r(i) - x) ^ 2) / (n - 1)Sum = Sum + v(i)Next iRange(“A10”). SelectActiveCell.FormulaR1C1 = “La Varianza poblacional”Columns (“A: A”). EntireColumn.AutoFitCells (10, 2). Value = 1 / 12Range(“A11”). SelectActiveCell.FormulaR1C1 = “La Varianza muestral”VarM = Sum: Cells (11, 2). Value = SumIf (VarM ≥ Chicero1) and (VarM ≤ Chicero2) Thenaceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una distribu-ción _ Uniforme” & “ con varianza 1/12”, vbInformation)Elserechazo = MsgBox (“Se rechaza los números aleatorios generados que provienen de una distribución Uniforme”_ & “ con varianza 1/12”, vbInformation)End IfEnd Sub
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
73
Cole
cción
1
Pruebas de Chi-cuadrado
La siguiente prueba permitirá, al igual que la anterior, comprobar si una vez que se tiene una sucesión de números pseudoaleatorios, estos provienen de una variable aleatoria con distribución uniforme en (0, 1). Para realizar esta prueba, es necesario tener en cuenta:
n = cantidad de números pseudoaleatorios obtenidos.m = números de subintervalos, m = 1+ 3,322 log(n).FOi = frecuencia observada = cantidad de números aleatorios que se clasifican en
cada intervalo.FEi = frecuencia esperada = cantidad de números aleatorios que se esperan encontraren cada intervalo = .
= estadístico de Chi-cuadrado.
estadístico calculado o tabulado de Chi-cuadrado.α = 1 - nivel de significancia.
Entonces, el estadístico se determina de la siguiente manera:
Si , entonces no se rechaza el conjunto de números aleatorios que siguen una
distribución uniforme en (0 ,1).
74
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo 2.3
Realice la prueba de Chi-cuadrado a los siguientes 20 números aleatorios, con nivel de significancia de 0,05.
Sean los números aleatorios:
Tabla 2.2. Números aleatorios por probarNúmero Número aleatorio Número Número aleatorio
1 0,04740 11 0,598982 0,26205 12 0,629843 0,12289 13 0,056814 0,35782 14 0,929895 0,17700 15 0,361306 0,27035 16 0,145017 0,89948 17 0,848838 0,05535 18 0,964989 0,30545 19 0,2177110 0,78847 20 0,07363
Digitar previamente estos números aleatorios en el rango G4:G23.
La macro para hacer una prueba de Chi-cuadrado se mostrará a continuación.
Procedimiento 2.14. Macro para realizar prueba Chi-cuadrado a números aleatorios
Sub pruebaChiCuad()Dim alfa, nivel, Chicero, Chialfa As DoubleDim n As Integer, x, y As DoubleDim FO(1 To 1000), FE(1 To 1000) As IntegerDim r(1 To 1000), dif(1 To 1000) As DoubleRange (“A4:B9”). ClearContentsrespuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _“partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
75
Cole
cción
1
, “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)Range(“A4”). Select: ActiveCell.FormulaR1C1 = “Tamaño de la muestra”Columns(“A:A”).EntireColumn.AutoFitCells(4, 2).Value = n Range(“A5”). Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”alfa = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = alfam = Round(1 + 3.322 * (Application.Log(n)), 0)Range(“A6”). Select: ActiveCell.FormulaR1C1 = “Números de intervalos”Cells(6, 2).Value = mDMin = Application.Min(Range(“G4:G” & (n + 3)))DMax = Application.Max(Range(“G4:G” & (n + 3)))interv = ((DMax - DMin) / m)Range(“A7”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad”g = m - 1: Cells(7, 2).Value = gRange(“A8”).Select: ActiveCell.FormulaR1C1 = “valor Crítico”Chialfa = Application.ChiInv(alfa, g): Cells(8, 2).Value = ChialfaFor x = 1 To nr(x) = Cells(x + 3, 7).ValueNext xRange(“I3”).Select: ActiveCell.FormulaR1C1 = “Intervalo”Range(“J3”).Select: ActiveCell.FormulaR1C1 = “FOi”Range(“K3”).Select: ActiveCell.FormulaR1C1 = “FEi”Range(“L3”).Select: ActiveCell.FormulaR1C1 = “(FOi - FEi)²/FEi”Columns(“L:L”).EntireColumn.AutoFitRange(“I3:L3”).SelectSelection.Font.Bold = TrueSelection.Font.Name = “Arial”Selection.WrapText = TrueSelection.HorizontalAlignment = xlCenterSelection.VerticalAlignment = xlCenterSelection.Interior.ColorIndex = 6y = DMinChicero = 0For i = 1 To mCells(i + 3, 9) = y & “ - “ & (y + interv)FO(i) = 0For j = 1 To nIf r(j) > y And r(j) <= (y + interv) ThenFO(i) = FO(i) + 1End If
76
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Next jy = y + intervCells(i + 3, 10).Value = FO(i)FE(i) = (n / m)Cells(i + 3, 11).Value = FE(i)dif(i) = ((FO(i) - FE(i)) ^ 2) / FE(i)Cells(i + 3, 12).Value = dif(i)Chicero = Chicero + dif(i) Next i Range(“A9”). SelectActiveCell.FormulaR1C1 = “El estadístico”Cells(9, 2).Value = ChiceroIf Chicero < Chialfa Thenaceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una distribución _ Uniforme” & “ con media 0.5”, vbInformation)Elserechazo = MsgBox (“Se rechaza los números aleatorios generados que provienen de una distribución _ Uniforme” & “ con media 0.5”, vbInformation)End IfEnd Su
Pruebas de Kolmogorov-Smirnov
Una vez que se ha obtenido una sucesión de números pseudoaleatorios, la prueba de Kolmogorov-Smirnov permite contrastar si efectivamente eso números provienen de una distribución uniforme. Los pasos a seguir son los siguientes:
Ordenar los números aleatorios, ri de menor a mayor y definir:
Fn = distribucion de probabilidad empírica de la muestra de los n números aleatorios simulados.yi = valor del número aleatorio i ordenado de menor a mayor.Evaluar
α = 1 – nivel de significanciaDn, α = valor crítico de la prueba y si se encuentra tabulada.Si Dn ≤ Dn, α , se concluye que efectivamente los números aleatorios provienen de una variable aleatoria con distribucion uniforme en (0 ,1).
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
77
Cole
cción
1
Macro para la prueba de Kolmogorov-Smirnov
La macro para la prueba de Kolmogorov-Smirnov tiene la particularidad de solicitar al usuario el valor crítico de la prueba que se encuentra tabulada.
Ejemplo 2.4
Realice la prueba de Kolmogorov-Smirnov a los siguientes 20 números aleatorios con nivel de significancia de 0,05. El valor crítico de la prueba es 0,294.
Tabla 2.3. Números aleatorios a comprobarNúmero Número aleatorio Número Número aleatorio
1 0,04740 11 0,598982 0,26205 12 0,629843 0,12289 13 0,056814 0,35782 14 0,929895 0,17700 15 0,361306 0,27035 16 0,145017 0,89948 17 0,848838 0,05535 18 0,964989 0,30545 19 0,2177110 0,78847 20 0,07363
A continuación, se mostrará la macro que sirve para hacer la prueba Kolmogorov -Smirnov.
78
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 2.15. Macro para hacer prueba Kolmogorov-Smirnov
Sub pruebaKolmogorov()Dim alfa, nivel As DoubleDim n As Integer, x As DoubleDim FN(1 To 1000) As DoubleDim r(1 To 1000), dif(1 To 1000) As DoubleRange (“A4:B8”). ClearContentsrespuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _ “partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)Range(“A4”). Select: ActiveCell.FormulaR1C1 = “Tamaño de la muestra”Columns(“A:A”).EntireColumn.AutoFitCells(4, 2).Value = nRange(“H3”). Select: ActiveCell.FormulaR1C1 = “Números Aleatorios Ordenados”‘LimpiarRange(“G3:G” & (n + 3)).Select Selection.Copy Range(“H3:J” & (n + 3)).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = FalseRange(“H3:J” & (n + 3)).SelectWith Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithMensaje = “¿Desea realizar la ordenación de estos números aleatorios?”estilo = vbYesNo + vbCritical + vbDefaultButton1titulo = “Toma de decisiones”respuesta2 = MsgBox (mensaje, estilo, titulo)If respuesta2 = vbNo Then GoTo salidaRange(“G4:G” & (n + 3)).Select Selection.Copy
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
79
Cole
cción
1
Range(“H4”).Select ActiveSheet.Paste Range(“H4:H” & (n + 3)).Select Application.CutCopyMode = FalseRange(“G3”).SelectRange(“H4:H” & (n + 3)).Sort Key1:=Range(“H4”), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _MatchCase:=False, Orientation:=xlTopToBottom, Dataoption1:=xlSortNormalMsgBox (“ORDENACION REALIZADA”)Range(“A5”). SelectActiveCell.FormulaR1C1 = “Nivel de Significancia”alfa = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = alfaFor x = 1 To nr(x) = Cells(x + 3, 8).ValueNext xRange(“I3”).SelectActiveCell.FormulaR1C1 = “Fn(yi)=i/n”Range(“J3”).SelectActiveCell.FormulaR1C1 = “|yi-i/n|”Columns(“I:I”).EntireColumn.AutoFitRange(“H3:J3”).SelectSelection.Font.Bold = TrueSelection.Font.Name = “Arial”Selection.WrapText = TrueSelection.HorizontalAlignment = xlCenterSelection.VerticalAlignment = xlCenterSelection.Interior.ColorIndex = 6For i = 1 To nCells(i + 3, 9) = i / ndif(i) = Abs(r(i) - (i / n))Cells(i + 3, 10) = dif(i)Next iRange(“A6”). SelectActiveCell.FormulaR1C1 = “El estadístico”Dn = Application.Max(Range(“J4:J” & (n + 3))): Cells(6, 2).Value = DnRange(“A7”). SelectActiveCell.FormulaR1C1 = “El valor Crítico”valor = InputBox (“Introduzca el valor crítico de la prueba:”): Cells (7, 2).Value = valorIf Dn <= valor Then
80
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
aceptacion = MsgBox ("No se rechaza los números aleatorios generados que provienen de una distribución _ Uniforme" & " con media 0.5", vbInformation)Elserechazo = MsgBox ("Se rechaza los números aleatorios generados que provienen de una distribu-ción Uniforme" _& " con media 0.5", vbInformation)End Ifsalida:End Sub
Prueba de las rachas (prueba de corrida arriba y abajo)
Dados los n números pseudoaleatorios r1, r2, r3, . . .. . , rn, se construye una sucesión formada por “ + “ si ri < ri+1, y un signo “ – “ si ri > ri+1. Cada grupo de signos + o – recibe el nombre de racha. Los pasos a seguir con la prueba de las rachas son los siguientes:
a. Calcular el número, R, de rachas de la sucesión de n números pseudoaleatorios que se tienen.
Se prueba que R sigue una distribución normal con media igual a y varianza
igual a , donde n es el número de pseudoaleatorios generados.
b. Evaluar:
La variable aleatoria Z sigue, obviamente, una distribución normal con media 0 y varianza 1.
c. Fijar un nivel de significancia α y verifique:P(Z ≥ Zα ) = α
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
81
Cole
cción
1
d. Si Z ≥ Zα, rechazar.e. No rechazar la aleatoriedad de la secuencia si el valor de Z verifica
|Z| < Zα.
Macro para la prueba de las rachas
Para realizar una macro y hacer prueba de rachas, se parte de los mismos números aleatorios en el mismo rango del ejemplo anterior.
Procedimiento 2.16. Macro para hacer prueba de rachas
Sub PruebaRacha ()Dim alfa, nivel, zetacero, zetaalfa As DoubleDim n As Integer, x As Double, r(1 To 10000) As DoubleRange (“A4:B8”). ClearContentsrespuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _ “partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)Range(“A4”). SelectActiveCell.FormulaR1C1 = “Tamaño de la muestra”Cells(4, 2).Value = nFor i = 1 To nr(i) = Cells(i + 3, 7).ValueNext iFor j = 1 To n - 1If r(j) < r(j + 1) ThenCells(j + 4, 8).Value = “ + “Cells(j + 4, 8).Font.Bold = True
82
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(j + 4, 8).Font.Name = "Arial"Cells(j + 4, 8).Font.Size = 12ElseCells(j + 4, 8).Value = " - "Cells(j + 4, 8).Font.Bold = TrueCells(j + 4, 8).Font.Name = "Arial"Cells(j + 4, 8).Font.Size = 12End IfNext jRange("A5"). Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"alfa = CDbl (InputBox ("Introduzca el nivel de significación")): Cells (5, 2) = alfaProb = 1 - (alfa)Range("A6"). Select: ActiveCell.FormulaR1C1 = "Valor Crítico "alfa2 = Application.NormSInv(alfa ): Cells (6, 2). Value = alfa2Range("A7"). Select: ActiveCell.FormulaR1C1 = "Valor Crítico 2"zetaalfa = Application.NormSInv(Prob): Cells(7, 2).Value = zetaalfaRange("A8"). Select: ActiveCell.FormulaR1C1 = "La media de las rachas"miu = (2 * n - 1) / 3: Cells (8, 2). Value = miuRange("A9"). Select: ActiveCell.FormulaR1C1 = "La varianza de las rachas"v = (16 * n - 29) / 90: Cells(9, 2).Value = vsigma = Sqr(v)Range("A10"). Select: ActiveCell.FormulaR1C1 = "El número de rachas"x = InputBox ("¿Cuál es el Número de las rachas:”): Cells (10, 2)? Value = xRange("A11"). Select: ActiveCell.FormulaR1C1 = "El estadístico"zetacero = (x - miu) / sigma: Cells (11, 2). Value = zetaceroColumns("A:A").EntireColumn.AutoFitIf (Abs(zetacero)) < zetaalfa Thenaceptacion = MsgBox ("No se rechaza los números aleatorios generados que provienen de una distribución _ Uniforme con media 0.5", vbInformation)Elserechazo = MsgBox ("Se rechaza los números aleatorios generados que provienen de una distribución _ Uniforme con media 0.5", vbInformation)End IfEnd Sub
GENERACIÓN DE NúMEROS ALEATORIOS CON APLIC ACIONES DE vISUAL BASIC
83
Cole
cción
1
Ejercicios
1. Adaptación del generador pseudoaleatorio Blum Blum Shub (BBS) para generar números aleatorios mediante una macro de Excel.
El algoritmo BBS es:
Xi+1 = (aXi2) mod (M)
Donde M = pq es el producto de dos números primos muy grandes p y q. En cada paso del algoritmo, se obtiene un resultado para Xn.
Los dos números primos, p y q, deben ser congruentes a 3 (mod 4). (Esto asegura que cada residuo cuadrático posee una raíz cuadrada que también es un residuo cuadrático).
Sean p = 13, q = 17 y a = 1
S = semilla = 100
Hacer que X0 = (S2) mod (M) y la secuencia está definida Xi+1 = (Xi2) mod (M).
Los números aleatorios se generan por medio de:
84
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
2. Realice una macro para generar automáticamente números aleatorios mediante la serie congruencial de Xi+1 = 23Xi + 57 mod (M), si M = p*q, donde p = 11 y q = 7.
3. Realice las pruebas de media, varianza, Chi-cuadrado, Kolmogorov-Smirnov, de las rachas de los siguientes 50 números aleatorios a través de macros de Excel.
Número Número aleatorio Número Número
aleatorio Número Número aleatorio Número Número
aleatorio Número Número aleatorio
1 0,7705 11 0,4739 21 0,0712 31 0,9634 41 0,44722 0,3567 12 0,7256 22 0,9314 32 0,3021 42 0,23233 0,6148 13 0,3195 23 0,7855 33 0,7446 43 0,68134 0,9627 14 0,6632 24 0,9816 34 0,7128 44 0,04665 0,7602 15 0,9125 25 0,8182 35 0,3954 45 0,51286 0,1166 16 0,0934 26 0,4689 36 0,7138 46 0,71597 0,0800 17 0,7321 27 0,4737 37 0,5903 47 0,87168 0,7320 18 0,6438 28 0,7094 38 0,3377 48 0,68439 0,9662 19 0,0140 29 0,5453 39 0,6716 49 0,516110 0,0826 20 0,2079 30 0,0312 40 0,5208 50 0,4815
Generación de variables aleatorias mediante la técnica de Montecarlo
La técnica de Montecarlo tiene conexión con los juegos de azar, que han inspirado en gran medida el desarrollo de la teoría de probabilidades. Era evidente, pues, que los resultados de dicha teoría trataran de aplicarse para poder conocer y
predecir resultados de los juegos de azar. La idea central es registrar los resultados de una cantidad de observaciones, conside-
rando solo los valores que toman la variable, y no la secuencia en que ocurrieron. Con esta técnica se realiza una simulación que comprende variables estocásticas y plantea el problema inverso de este modo:
F(X) = RDespejando X se tiene:
X = F- 1(R)
Donde:R = número aleatorio.F(x) = función acumulada de la probabilidad.X = variable aleatoria.
Es necesario generar una sucesión de números en la que los valores sucesivos son aleatorios y tienen la distribución que describe la variable estocástica.
3
86
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
La ventaja del uso de estos métodos en simulación es que no es necesario conocer la distribución de probabilidad teórica que rige el fenómeno. Un buen estudio práctico permite aplicar los procedimientos de simulación descritos cuando la distribución no es conocida o es de difícil aplicación.
Pasos para la técnica de Montecarlo:a. Escribir cada evento con su respectiva probabilidad.b. Acumular las probabilidades.c. Con las probabilidades acumuladas, escribir tanto la cota inferior como la cota
superior de la probabilidad para cada evento.d. Generar números aleatorios de acuerdo con la cantidad deseada.e. Buscar para cada número aleatorio a qué intervalo cae, con el fin de generar el
evento que contiene el intervalo a la cantidad deseada.
La instrucción más relevante para la técnica de Montecarlo en una aplicación de Visual Basic es la función de búsqueda:
X = Application.WorksheetFunction.Vlookup(R, Rango1,c)
Con la instrucción se puede decir:X = variable aleatoria a determinar.R = valor del número aleatorio buscado.Rango1 = la matriz de las probabilidades por buscar en un rango.C = indicador de la columna de la matriz en el cual está ubicada la variable aleatoria
por generar.Con el siguiente ejemplo se explicará exhaustivamente la técnica de Montecarlo de
manera informatizada.
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
87
Cole
cción
1
Ejemplo 3.1
Supóngase que la demanda mensual de un producto es aleatoria, con la siguiente distri-bución de probabilidad empírica:
Demanda mensual (unidades) Probabilidad de ocurrencia85 0,05110 0,10130 0,15145 0,20150 0,12165 0,15175 0,13190 0,05200 0,05
Se desea simular la demanda mensual para 30 meses.
Figura 3.1 Probabilidad acumulada e intervalo de los números aleatorios
Demanda mensual (unidades)
Probabilidad de ocurrencia
Probabilidad acumulada
Intervalo del número aleatorio
85 0,05 0,05 0 ≤ r ≤ 0,05110 0,10 0,15 0,05 ≤ r ≤ 0,15130 0,15 0,30 0,15 ≤ r ≤ 0,30145 0,20 0,50 0,30 ≤ r ≤ 0,50150 0,12 0,62 0,50 ≤ r ≤ 0,62165 0,15 0,77 0,62 ≤ r ≤ 0,77175 0,13 0,90 0,77 ≤ r ≤ 0,90190 0,05 0,95 0,90 ≤ r ≤ 0,95200 0,05 1,00 0,95 ≤ r ≤ 1,00
88
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Para generar la demanda aleatoria por medio de una macro, se tiene:a. Cuadricular (todos los bordes) y escribir las cabeceras de acuerdo con la figura 3.1.b. Escribir los datos de acuerdo con la figura 3.1.c. Escribir la macro que se muestra en el procedimiento 3.1.
Procedimiento 3.1. Macro para generar la demanda aleatoria mediante técnica de Montecarlo
Sub Generar()Dim n, C, a As IntegerDim x(1000), P(1000) As Double, LI(1000), LS(1000), Acum(1000) As DoubleDim miu, V, V3, sigma As Double, Rango As RangeDim R(1000), Prom(1000) As Double, D(1000) As LongDim V2(1000) As Double, Prom2 As DoubleActiveWindow.DisplayGridlines = FalseLIMPIARRange(“A1”).Select: ActiveCell.FormulaR1C1 = “TECNICA DE MONTECARLO”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Probabilidad Acumulada”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Limite Inferior de R”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Limite Superior de R”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Demanda Mensual”Range(“F3”). Select: ActiveCell.FormulaR1C1 = “Número de observaciones”Range(“G3”). Select: ActiveCell.FormulaR1C1 = “Nùmero Aleatorio”Range(“H3”). Select: ActiveCell.FormulaR1C1 = “Demanda Simulada”Range(“I3”). Select: ActiveCell.FormulaR1C1 = “Número de Réplicas”Range(“J3”).Select: ActiveCell.FormulaR1C1 = “Demanda Promedio”Range(“A3”).Selectn = 9C = Val (InputBox (“DIGITE EL NÚMERO DE CORRIDAS (No. De Observaciones):”)): Cells (1, 8). Value = CRange(“A1:C1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
89
Cole
cción
1
.WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A3:E” & (n + 3)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd WithRange(“A3:J3”).SelectSelection.Interior.ColorIndex = 6Range(“F3:H” & (C + 4)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd Witha = Val(InputBox(“DIGITE EL NÙMERO DE REPLICAS:”)): Cells(1, 9).Value = aRange(“I3:J” & (a + 3)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd Withcomenzar:For i = 1 To nx(i) = Val (InputBox (“Introduzca el Valor de la Demanda “& i)): Cells (3 + i, 5). Value = x(i)P(i) = InputBox (“Introduzca la Probabilidad de la Demanda “& i): Cells (3 + i, 1). Value = P(i)If P(i) < 0 Or P(i) > 1 ThenMsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”
90
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
GoTo comenzarEnd IfIf i = 1 ThenAcum(i) = P(i)Cells(3 + i, 2).Value = Acum(i)LI(i) = 0: Cells(3 + 1, 3).Value = LI(i)LS(i) = P(i) Cells(3 + i, 4).Value = LS(i)ElseAcum(i) = Acum(i - 1) + P(i)If (Acum(i) > 1) ThenMsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”GoTo comenzarEnd IfCells(3 + i, 2).Value = Acum(i)LI(i) = Acum(i - 1)Cells(3 + i, 3).Value = LI(i)Cells(3 + i, 4).Value = Acum(i)End IfNext iRange (“A” & (n + 4)). Select: ActiveCell.FormulaR1C1 = “La media de la Demanda”Range (“A” & (n + 5)). Select: ActiveCell.FormulaR1C1 = “La Varianza de la Demanda”Range (“A” & (n + 6)). Select: ActiveCell.FormulaR1C1 = “La Desviacion Estándar de la Demanda”miu = Application.WorksheetFunction.SumProduct(Range(“A4:A” & (n + 3)), Range(“E4:E” & (n + 3)))Cells (n + 4, 2). Value = miu‘Calculo de la varianzaV = 0For i = 1 To nV = V + ((x(i) - miu) ^ 2) * P(i)Next iCells(n + 5, 2).Value = V‘Calculo de la desviación standardRange (“A” & (n + 10)). Select: ActiveCell.FormulaR1C1 = “Desviación Standard”sigma = Sqr(V): Cells(n + 10, 2).Value = sigmaColumns(“A:J”).ColumnWidth = 15: Rows(n + 6).RowHeight = 51Range(Cells(n + 4, 1), Cells(n + 10, 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
91
Cole
cción
1
.Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(n + 4, 1), Cells(n + 10, 1)).SelectSelection.Interior.ColorIndex = 6 Set Rango = Worksheets(1).Range("$C$4:$E$" & (n + 3))V3 = 0For j = 1 To aTexto = "REPLICA NUMERO " + Str(j)Cells(j + 3, 9).Value = jMsgBox Texto, vbOKOnly, "RÉPLICAS"For i = 1 To CCells(i + 3, 6).Value = iR(i) = Rnd: Cells(i + 3, 7).Value = R(i)D(i) = Application.WorksheetFunction.VLookup(R(i), Rango, 3): Cells(i + 3, 8).Value = D(i)Next iProm(j) = Application.WorksheetFunction.Average(Range("H4:H" & (n + 4)))Cells(j + 3, 10).Value = Prom(j)Next jRange ("A" & (n + 7)). Select: ActiveCell.FormulaR1C1 = "Promedio de Promedio de la Demanda"Prom2 = Application.WorksheetFunction.Average(Range("J4:J" & (a + 2)))Cells(n + 7, 2).Value = Prom2Range("A3").SelectEnd Sub
Sub LIMPIAR() Range("AA1").Select Selection.Copy Range("A1:Z722").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range("A3").SelectEnd Sub
92
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Simulación de inventario de modelo de pedido único mediante la técnica de Montecarlo
Cuando los productos involucrados son perecederos o su demanda es de una sola vez, surgen muchos problemas prácticos de inventarios. Productos como vegetales y frutas frescas, flores naturales cortadas, periódicos y algunos medicamentos tienen una vida de anaquel corta y definida, y no están disponibles para periodos de ventas subsiguientes.
Solo puede establecerse un pedido para que estos productos satisfagan la demanda. Este modelo determina el tamaño del lote que debe tener ese único pedido. Para hallar el tamaño del lote económico de pedido (Q*), puede apelarse al análisis económico marginal; es decir, Q* se halla en punto, donde la ganancia marginal de la siguiente unidad vendida es igual a la pérdida marginal de no vender la siguiente unidad.
La ganancia marginal por unidad obtenida por vender una unidad es:Ganancia = precio por unidad – costo por unidad
La pérdida incurrida por unidad por no vender una unidad es:Pérdida = costo por unidad – valor de recuperación por unidad
Considerando la probabilidad de un número dado de unidades que se venden, las ganancias y las pérdidas esperadas se equilibran en este punto.
Ejemplo 3.2
Una tienda minorista compra revistas de software de computador a un distribuidor para su reventa. Por una próxima promoción, el minorista necesita determinar el mejor tamaño del lote de pedido para una sola compra. Uno de los productos es una revista de software de gráficas que tendrá un precio especial de venta de $20. El minorista estima las probabilidades de vender varias cantidades de la siguiente manera:
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
93
Cole
cción
1
Ventas diarias (unidades) Probabilidad de ocurrencia20 0,0522 0,1025 0,1528 0,3030 0,2534 0,15
La revista se puede comprar al distribuidor a $10 por revista, pero hay un cargo de realmacenamiento de $3 por revista, si se devuelve al distribuidor cualquier ejemplar no vendido. El tamaño de pedido de compra es igual a las ventas del día anterior más la pérdida del día anterior. ¿Con qué tamaño de pedido de compra promedio debería comprometerse el minorista?
Se requieren 30 días de corridas. Adicionalmente, determinar la utilidad promedio.
Desarrollo de la simulación:La venta diaria es una variable aleatoria discreta que se genera a través de la técnica
de Montecarlo. Las demás variables y parámetros de costos se calcularán mediante:
Pedido = ventas del día anterior + pérdida del día anteriorSi ventas es menor que el pedido, entoncesel ingreso = (ventas)x (precio de ventas) y,el reembolso = pedido – ventas;En caso contrario,el ingreso = (pedido)x (precio de ventas) y,la pérdida = ventas – pedidoFin
La macro se desarrollará de acuerdo con dos procedimientos “DatosIniciales y “LIMPIAR”; por lo tanto, tiene las siguientes variables para ser declaradas como:
Vent (t) = ventas en unidades en el día t.Ped (t) = cantidad de pedido en el día t.Costcomp (t) = costo de compra en el día t.Ing (t) = ingresos en el día t.
94
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Remb (t) = unidades de reembolsos en el día t.Perd (t) = pérdida en unidades en el día t.Costperd (t) = costo de la pérdida en el día t.Util (t) = utilidad en el día t.
Procedimiento 3.2. Macro que simula un sistema de inventario de pedido
único mediante la técnica de Montecarlo con los datos iniciales
Sub DatosIniciales ()Dim n, C, a As IntegerDim x(1000), P(1000) As Double, LI(1000), LS(1000), Acum(1000) As DoubleDim miu, V, V3, sigma As Double, Rango As RangeDim R(1000), Prom(1000) As Double, D(1000) As LongDim V2(1000) As Double, PC, PDV, PR, PER As DoubleActiveWindow.DisplayGridlines = FalseLIMPIARRange(“A1”).Select: ActiveCell.FormulaR1C1 = “TECNICA DE MONTECARLO”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Venta Diaria”Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Probabilidad Acumulada”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Limite Inferior de R”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Limite Superior de R”Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Venta Diaria”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Nùmero de Días”Range(“H3”).Select: ActiveCell.FormulaR1C1 = “Nùmero Aleatorio”Range(“I3”). Select: ActiveCell.FormulaR1C1 = “Venta Simulada”Range(“J3”). Select: ActiveCell.FormulaR1C1 = “Tamaño del Pedido”Range(“K3”). Select: ActiveCell.FormulaR1C1 = “Costo de Pedido ($)”Range(“L3”).Select: ActiveCell.FormulaR1C1 = “Ganancia($)”Range(“M3”). Select: ActiveCell.FormulaR1C1 = “Unidades de Reembolsos”Range(“N3”). Select: ActiveCell.FormulaR1C1 = “Ingreso por Reembolsos”Range(“O3”). Select: ActiveCell.FormulaR1C1 = “Unidades de Pérdidas”Range(“P3”).Select: ActiveCell.FormulaR1C1 = “Pérdida($)”Range(“Q3”).Select: ActiveCell.FormulaR1C1 = “Utilidad($)”Range(“R3”).Select: ActiveCell.FormulaR1C1 = “Réplica Nùmero”Range(“S3”). Select: ActiveCell.FormulaR1C1 = “Promedios de la Utildad”Range(“T3”). Select: ActiveCell.FormulaR1C1 = “Varianza de Promedios de la Utilidad”Range(“A3”). Selectn = Val (InputBox (“DIGITE EL NÚMERO DE DATOS:”)): Cells (1, 7). Value = n
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
95
Cole
cción
1
C = Val (InputBox (“DIGITE EL NÚMERO DE CORRIDAS (Días):”)): Cells (1, 8).Value = CRange(“A1:C1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).Select With Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A3:F” & (n + 3)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd WithRange(“A3:T3”).SelectSelection.Interior.ColorIndex = 6Range(“G3:Q” & (C + 4)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd Witha = Val(InputBox(“DIGITE EL NÙMERO DE REPLICAS:”)): Cells(1, 9).Value = aRange(“R3:T” & (a + 3)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium
96
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd Withcomenzar:For i = 1 To nx(i) = Val (InputBox (“Introduzca el Valor de la Venta “& i)): Cells (3 + i, 1). Value = x(i)P(i) = InputBox (“Introduzca la Probabilidad de la Venta “& i): Cells (3 + i, 2). Value = P(i)If P(i) < 0 Or P(i) > 1 ThenMsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”GoTo comenzarEnd IfIf i = 1 ThenAcum(i) = P(i)Cells(3 + i, 3).Value = Acum(i)LI(i) = 0: Cells(3 + 1, 4).Value = LI(i)LS(i) = P(i)Cells(3 + i, 5).Value = LS(i)Cells(3 + i, 6).Value = x(i)ElseAcum(i) = Acum(i - 1) + P(i)If (Acum(i) > 1) ThenMsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”GoTo comenzarEnd IfCells(3 + i, 3).Value = Acum(i)LI(i) = Acum(i - 1)Cells(3 + i, 4).Value = LI(i)Cells(3 + i, 5).Value = Acum(i)Cells(3 + i, 6).Value = x(i)End IfNext iRange(“A” & (n + 4)).Select: ActiveCell.FormulaR1C1 = “Precio de Compra”Range(“A” & (n + 5)).Select: ActiveCell.FormulaR1C1 = “Precio de Venta”Range (“A” & (n + 6)). Select: ActiveCell.FormulaR1C1 = “Precio Unitario de Reembolso”Range (“A” & (n + 7)). Select: ActiveCell.FormulaR1C1 = “Valor Unitario de Pérdida”Range (“A” & (n + 8)). Select: ActiveCell.FormulaR1C1 = “Media Poblacional”Range (“A” & (n + 9)). Select: ActiveCell.FormulaR1C1 = “Varianza Poblacional”PC = InputBox (“Digite el Valor del Precio de Compra:”): Cells (n + 4, 2). Value = PCPDV = InputBox (“Digite el Valor del Precio de Venta:”): Cells (n + 5, 2). Value = PDVPR = InputBox (“Digite el Valor Unitario del Reembolso:”): Cells (n + 6, 2). Value = PR
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
97
Cole
cción
1
PER = InputBox (“Digite el Valor Unitario de la Pérdida:”): Cells (n + 7, 2). Value = PERRange(Cells(n + 4, 2), Cells(n + 7, 2)).SelectSelection.NumberFormat = “$#,##0.00”miu = Application.WorksheetFunction.SumProduct(Range(“A4:A” & (n + 3)), Range(“B4:B” & (n + 3)))Cells (n + 8, 2). Value = miu'Calculo de la varianzaV = 0For i = 1 To nV = V + ((x(i) - miu) ^ 2) * P(i)Next iCells(n + 9, 2).Value = V'Calculo de la desviación standardRange ("A" & (n + 10)). Select: ActiveCell.FormulaR1C1 = "Desviación Standard"sigma = Sqr(V): Cells(n + 10, 2).Value = sigmaColumns("A:T").ColumnWidth = 15: Rows(n + 6).RowHeight = 51Range(Cells(n + 4, 1), Cells(n + 10, 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(n + 4, 1), Cells(n + 10, 1)).SelectSelection.Interior.ColorIndex = 6Range("A3").SelectEnd Sub
Sub LIMPIAR() Range("AA1").Select Selection.Copy Range("A1:Z722").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range("A3").SelectEnd Sub
98
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
El siguiente procedimiento se realiza de acuerdo con la macro anterior, denominada “DatosIniciales”.
Procedimiento 3.3. Macro que simula un sistema de inventario de pedido único
mediante la técnica de Montecarlo para generar la demanda y las demás variables
Sub GenerarDemanda()Dim Vent(0 To 1000) As Integer, Ped(0 To 1000) As Integer, CostComp(0 To 1000) As DoubleDim Remb(0 To 1000) As Integer, Ingremb(0 To 1000) As Double, Perd(0 To 1000) As IntegerDim Costperd(0 To 1000) As Double, Util(0 To 1000), Ing(0 To 1000) As Double, x As IntegerDim R(1000) As Double, Prom(1000) As Double, V2(1000) As Doublen = Cells(1, 7).Value: C = Cells(1, 8).Value: a = Cells(1, 9).Value‘Precio de compra, de Venta y de reembolso PC = Cells(n + 4, 2).Value: PDV = Cells(n + 5, 2).Value: PR = Cells(n + 6, 2).Value ‘Costo unitario de perdidaPER = Cells (n + 7, 2). Value‘Aplicacion de la tècnica de montecarloSet Rango = Worksheets(1).Range(“$D$4:$F$” & (n + 3))V3 = 0: Cells(4, 7).Value = 0Vent(0) = 20: Perd(0) = 3Cells(4, 9).Value = Vent(0): Cells(4, 15).Value = Perd(0)Range(“P1”).SelectFor j = 1 To aTexto = “REPLICA NUMERO “ + Str(j)Cells (j + 3, 18). Value = jMsgBox Texto, vbOKOnly, “RÉPLICAS”For x = 1 To CCells(x + 4, 7).Value = xR(x) = Rnd: Cells(x + 4, 8).Value = R(x)Vent(x) = Application.WorksheetFunction.VLookup(R(x), Rango, 3): Cells(x + 4, 9).Value = Vent(x)Ped(x) = Vent(x - 1) + Perd(x - 1): Cells(x + 4, 10).Value = Ped(x)CostComp(x) = Ped(x) * PC: Cells(x + 4, 11).Value = CostComp(x)Cells(x + 4, 11).NumberFormat = “$#,##0.00”If Vent(x) >= Ped(x) ThenIng(x) = Ped(x) * PDV: Cells(x + 4, 12).Value = Ing(x)Cells(x + 4, 12).NumberFormat = “$#,##0.00”Remb(x) = 0: Cells(x + 4, 13).Value = Remb(x)Ingremb(x) = 0: Cells(x + 4, 14).Value = Ingremb(x)Perd(x) = Vent(x) - Ped(x): Cells(x + 4, 15).Value = Perd(x)
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
99
Cole
cción
1
Costperd(x) = Perd(x) * PER: Cells(x + 4, 16).Value = Costperd(x)Cells(x + 4, 16).NumberFormat = “$#,##0.00” SElseIng(x) = Vent(x) * PDV: Cells(x + 4, 12).Value = Ing(x)Cells(x + 4, 12).NumberFormat = "$#,##0.00"Remb(x) = Ped(x) - Vent(x): Cells(x + 4, 13).Value = Remb(x)Ingremb(x) = Remb(x) * PR: Cells(x + 4, 14).Value = Ingremb(x)Cells(x + 4, 14).NumberFormat = "$#,##0.00"Perd(x) = 0: Cells(x + 4, 15).Value = Perd(x)Costperd(x) = 0: Cells(x + 4, 16).Value = Costperd(x)End If'Càlculo de la UtilidadUtil(x) = Ing(x) - CostComp(x) + Ingremb(x) - Costperd(x)Cells(x + 4, 17).Value = Util(x)Cells(x + 4, 17).NumberFormat = "$#,##0.00"Next xProm(j) = Application.WorksheetFunction.Average(Range("Q5:Q" & (C + 4)))Cells(j + 3, 19).Value = Prom(j): Cells(j + 3, 19).NumberFormat = "0.00"V2(j) = Application.WorksheetFunction.Var_S(Range("Q5:Q" & (C + 4)))Cells(j + 3, 20).Value = V2(j): Cells(j + 3, 20).NumberFormat = "0.00"V3 = V3 + (j - 1) * V2(j)Next jRange ("A" & (n + 11)). Select: ActiveCell.FormulaR1C1 = "Promedio de Promedio de la Utilidad"Range ("A" & (n + 12)). Select: ActiveCell.FormulaR1C1 = "Varianza de Promedio de la Utilidad"Range ("A" & (n + 13)). Select: ActiveCell.FormulaR1C1 = "Desviacion Estand. de Promedio de la Utilidad"prom2 = Application.WorksheetFunction.Average(Range("S4:S" & (a + 3)))Cells(n + 11, 2).Value = prom2Cells(n + 12, 2).Value = V3 / (a * (n - 1))Cells(n + 13, 2).Value = Sqr(V3 / (a * (n - 1)))Range(Cells(n + 4, 1), Cells(n + 13, 1)).SelectSelection.Interior.ColorIndex = 6Range(Cells(n + 11, 1), Cells(n + 13, 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange("A3"). SelectEnd Sub
100
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Simulación de un sistema inventario de punto de reorden con demanda y tiempo de entrega aleatorios mediante la técnica de Montecarlo
Para programar experimentos de simulación de inventarios, se considera el siguiente ejemplo.
Ejemplo 3.4
La demanda mensual y el tiempo de entrega (lead time) de un cierto producto son variables aleatorias discretas que siguen las siguientes distribuciones de probabilidades empíricas:
DemandaDemanda mensual Probabilidad
28 0,0131 0,0433 0,0836 0,0738 0,1239 0,0840 0,1042 0,1244 0,1345 0,0548 0,1050 0,0352 0,0555 0,02
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
101
Cole
cción
1
Tiempo de entregaMes Probabilidad
1 0,302 0,403 0,30
El inventario inicial es de 150 unidades y se coloca un pedido de 200 unidades en forma fija para cada abastecimiento. El punto de reorden se considera de 80 unidades. La información con respecto a los costos relevantes es la siguiente:
Costos ValorPrecio de compra $50 / unidadCosto de ordenar $100 / orden
Costo unitario de almacenamiento $20 / unidad / mesCosto unitario de faltante $52 / unidad / mes
Realizar un experimento de simulación para 24 meses.
Para realizar la siguiente simulación, se deben considerar los siguientes aspectos:a. Variables Inv (t-1) = inventario inicial en el periodo t. Inv (t) = inventario final en el periodo t. B (t-1) = faltante inicial en el periodo t. B (t) = faltante final en el periodo t. D (t) = demanda aleatoria en el periodo t. Q (t) = tamaño de lote de pedido en el periodo t. Invneto (t) = inventario neto en el periodo t = Inv (t) – B (t). De acuerdo con las variables anteriores, se puede determinar una ecuación deno-
minada balance de inventario-demanda, como lo muestra la siguiente expresión: Inv (t) = inv (t-1) – B (t-1) + Q (t) + B (t) – D (t).
102
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
b. Parámetros CT (t) = costo total en el periodo t. C (t) = costo unitario de compra en el periodo t. Co = costo de ordenar en el periodo t. Ch (t) = costo unitario de almacenamiento en el periodo t. Cs (t) = costo unitario de faltante en el periodo t. N = número de órdenes de compra. La ecuación del costo total será: CT (t) = C (t).Q (t) + Co.N + Ch (t).Inv (t) + Cs (t). B (t)
Por otro lado, se realizarán dos macros: una denominada “DemProb” y otra de “Inventario”; se llamará una macro del procedimiento 2.1, que borrará datos anteriores. La macro denominada Inventario llama a las dos macros anteriores. Se mostrarán a continuación las siguientes macros:
Procedimiento 3.3. Macro para determinar probabilidades mediante técnica de Montecarlo
Sub DemProb()‘Declaración de variablesDim miu, sigma As Double, rango As Range, D(1 To 2000) As IntegerDim x(1 To 2000) As Long, P(1 To 2000) As Double, Pe(1 To 2000) As DoubleDim Acum(2000) as Double, LI(2000),LS(2000) as DoubleDim V(1 To 2000) As Double, sigmacuad As Double, Te(1 To 2000) As IntegerDim n As Integer, NA As Variant, m As IntegerLimpiarRange(“B2”).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range (“D2”).Select: ActiveCell.FormulaR1C1 = “Prob. acumulada”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Cota inferior de Ri”Range(“F2”).Select: ActiveCell.FormulaR1C1 = “Cota Superior de Ri”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“B2:M2”).SelectSelection.Interior.ColorIndex = 45Rows(“2:2”).RowHeight = 45
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
103
Cole
cción
1
Inicio:‘Captura de datosk = InputBox(“Cuántos datos de demanda o eventos a introducir: (No debe ser mayor que 2000)”)Cells(1, 1).Value = kIf (k > 2000) ThenGoTo InicioEnd If comenzar:For i = 1 To kx(i) = InputBox(“Cuál es el valor de la variable aleatoria D” & i)Cells(i + 2, 2).Value = x(i): Cells(i + 2, 7).Value = x(i)P(i) = InputBox(“Cuál es la probabilidad de la variable aleatoria D” & i)If P(i) < 0 Or P(i) > 1 ThenMsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”GoTo comenzarEnd IfIf i = 1 ThenAcum(i) = P(i) : Cells(2 + i, 4).Value = Acum(i)LI(i) = 0: Cells(2 + i, 5).Value = LI(i)LS(i) = P(i): Cells(2 + i, 6).Value = LS(i)Cells(2 + i, 7).Value = X(i)ElseAcum(i) = Acum(i - 1) + P(i)If (Acum(i) > 1) ThenMsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”GoTo comenzarEnd IfCells(2 + i, 4).Value = Acum(i)LI(i) = Acum(i - 1)Cells(2 + i, 5).Value = LI(i)Cells(2 + i, 6).Value = Acum(i)Cells(2 + i, 7).Value = X(i)End IfNext iIf (Sum > 1) ThenRange(“B3:G” & (k + 3)).ClearContentsGoTo comenzarEnd Ifn = InputBox (“Cuál es el número de corridas:”): Cells (k + 4, 3). Value = miuRange (“B” & (k + 4)). Select: ActiveCell.FormulaR1C1 = “La media de la demanda”
104
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
‘Cálculo de la varianzasigmacuad = 0For i = 1 To ksigmacuad = sigmacuad + ((x(i) - miu) ^ 2) * P(i)Next iRange(“B” & (k + 5)).Select: ActiveCell.FormulaR1C1 = “La varianza de demanda”Cells(k + 5, 3).Value = sigmacuadRange("B" & (k + 6)).SelectActiveCell.FormulaR1C1 = "La desviación Standard de la demanda"'Cálculo de la desviación standardsigma = Sqr(sigmacuad): Cells (k + 6, 3). Value = sigmaColumns("B:B").ColumnWidth = 13.71: Rows(k + 6).RowHeight = 51Range ("B" & (k + 7)). Select: ActiveCell.FormulaR1C1 = "El número de corrida es"Cells(k + 7, 3).Value = nRange("B" & (k + 8)).Select: ActiveCell.FormulaR1C1 = "Número de datos de demanda"Cells(k + 8, 3).Value = kRange("B" & (k + 9)).SelectActiveCell.FormulaR1C1 = "Número de datos del tiempo de entrega demanda"Range(Cells(k + 4, 2), Cells(k + 9, 3)).SelectSelection.Interior.ColorIndex = 24Range("H2").Select: ActiveCell.FormulaR1C1 = "Tiempo de entrega"Range("I2").Select: ActiveCell.FormulaR1C1 = "Probablidad"Range ("J2").Select: ActiveCell.FormulaR1C1 = "Prob. acumulada"Range("K2").Select: ActiveCell.FormulaR1C1 = "Cota inferior de Ri"Range("L2").Select: ActiveCell.FormulaR1C1 = "Cota Superior de Ri"Range("M2").Select: ActiveCell.FormulaR1C1 = "Tiempo de entrega"m = InputBox("Cuántos datos de tiempo de entrega a introducir: (No debe ser mayor que 2000)")If (m > 2000) ThenGoTo InicioEnd IfSum1 = 0Cells(k + 9, 3).Value = mFor i = 1 To mTe(i) = InputBox("Cuál es el valor del tiempo de entrega Te " & i)Cells(i + 2, 8).Value = Te(i)Cells(i + 2, 13).Value = Te(i)Pe(i) = InputBox("Cuál es la probabilidad del tiempo de entrega Te " & i)Cells(i + 2, 9).Value = Pe(i)Sum1 = Sum1 + Pe(i)Cells(i + 2, 10).Value = Sum1: Cells(i + 2, 12).Value = Sum1: Cells(i + 3, 11).Value = Sum1Next iCells(m + 3, 11).Value = ""End Sub
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
105
Cole
cción
1
La macro que se mostrará a continuación simula el sistema de inventario de punto reorden con los siguientes aspectos:
a. Prepara una cuadrícula para el desarrollo de la simulación.b. Genera la demanda aleatoria mediante una instrucción de búsqueda.c. Genera el tiempo de entrega mediante una instrucción de búsqueda.d. Captura de datos como inventario inicial, tamaño de pedido, punto de reorden
y costos relevantes.e. Evalúa el inventario final si es menor que el punto de reorden para generar un
pedido con su respectiva orden.f. La espera del pedido coincide con el tiempo de entrega simulado.g. Calcula los costos totales.
Procedimiento 3.4. Macro para la simulación de un sistema de inventario
con distribución empírica mediante técnica de Montecarlo
Sub Inventario()Dim rango As Range, D(1 To 1000) As Integer, Te2(1 To 1000) As IntegerDim x(1 To 1000) As Long, P(1 To 1000) As Double, Pe(1 To 1000) As Double, m As IntegerDim INV(0 To 1000) As Long, B(0 To 1000) As Long, LT As Integer, Q As LongDim n As Integer, NA1 As Variant, NA2 As Variant, Invneto(1 To 1000) As LongDim rango2 As Range, r(1 To 1000) As Double, r2(1 To 1000) As DoubleDim CT(1 To 1000) As Double, PRO As Long, FOQ(1 To 1000) As LongActiveWindow.DisplayGridlines = FalseRange(“A1:S1000”).Select With Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End WithDemProbk = Worksheets(1).Cells(1, 1).Valuen = Worksheets(1).Cells(k + 7, 3).Value
106
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
m = Worksheets(1).Cells(k + 9, 3).ValueRange(“I” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Mes”Range(“J” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Número aleatorio”Range(“K” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“L” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Tamaño del pedido”Range(“M” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Inventario final”Range(“N” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Faltante”Range(“O” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Orden”Range(“P” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Número de orden”Range(“Q” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Espera”Range(“R” & (m + 4)).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(Cells(m + 4, 9), Cells(m + 4, 18)).SelectSelection.Interior.ColorIndex = 45Range(“I” & (m + 5)).Select: ActiveCell.FormulaR1C1 = “Inicial”INV(0) = InputBox(“Digite el inventario inicial:”): Cells(m + 5, 13).Value = INV(0)B(0) = 0: Cells(m + 5, 14).Value = B(0)Q = InputBox(“Digite el tamaño del pedido:”): Cells(1, 4).Value = QRange(“C1”).Select: ActiveCell.FormulaR1C1 = “Tamaño del lote”PRO = InputBox(“Digite el punto de reorden:”): Cells(1, 6).Value = PRORange(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(“C1:H1”).SelectSelection.Interior.ColorIndex = 24C = InputBox(“Digite el costo unitario de compra:”)Co = InputBox(“Digite el costo de ordenar:”)Ch = InputBox(“Digite el costo unitario de almacenamiento:”)Cs = InputBox(“Digite el costo unitario de faltante:”)Set rango = Worksheets(1).Range(“$E$3:$G$” & (k + 2))For i = 1 To nCells(i + m + 5, 9).Value = ir(i) = Rnd: Cells(i + m + 5, 10).Value = r(i): NA = Cells(i + m + 5, 10).ValueD(i) = Application.WorksheetFunction.VLookup(NA, rango, 3)Cells(i + m + 5, 11).Value = D(i)Next iRange(“E” & (k + 4)).Select: ActiveCell.FormulaR1C1 = “Número aleatorio”Range(“F” & (k + 4)).Select: ActiveCell.FormulaR1C1 = “TE simulado”Range(Cells(k + 4, 5), Cells(k + 4, 6)).SelectSelection.Interior.ColorIndex = 45 Set rango2 = Worksheets(1).Range(“$k$3:$M$” & (m + 2)) For i = 1 To n
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
107
Cole
cción
1
r2(i) = Rnd: Cells(i + k + 4, 5).Value = r2(i): NA2 = Cells(i + k + 4, 5).Value Te2(i) = Application.WorksheetFunction.VLookup(NA2, rango2, 3) Cells(i + k + 4, 6).Value = Te2(i)Next ij = k + 5: cont = 0 For i = 1 To n INV(i) = Cells(i + m + 5, 13).Value: D(i) = Cells(i + m + 5, 11).Value FOQ(i) = Cells(i + m + 5, 12).Value: B(i) = Cells(i + m + 5, 14).Value INV(i) = INV(i - 1) - B(i - 1) + FOQ(i) + B(i) - D(i) If (INV(i) <= PRO) And (LT <= 0) Then cont = cont + 1: orden = 1 Cells(i + m + 5, 15).Value = orden: Cells(i + m + 5, 16).Value = cont Cells(i + m + 5, 17).Value = Cells(j, 6).Value j = j + 1: LT = Cells(i + m + 5, 17).Value If (i + m + 5 + (LT + 1)) <= n + m + 5 Then Cells(i + m + 5 + LT, 12).Value = Q End If Else Cells(i + m + 5, 15).Value = 0: Cells(i + m + 5, 16).Value = 0 Cells(i + m + 5, 17).Value = 0 End If If (INV(i) <= 0) Then Cells(i + m + 5, 13).Value = 0: Cells(i + m + 5, 14).Value = INV(i) * (-1) Else Cells(i + m + 5, 13).Value = INV(i): Cells(i + m + 5, 14).Value = 0 End If LT = LT - 1 Next i For i = 1 To n INV(i) = Cells(i + m + 5, 13).Value: D(i) = Cells(i + m + 5, 11).Value FOQ(i) = Cells(i + m + 5, 12).Value: B(i) = Cells(i + m + 5, 14).Value orden = Cells(i + m + 5, 15).Value CT(i) = C * FOQ(i) + Co * orden + Ch * INV(i) + Cs * B(i) Cells(i + m + 5, 18).Value = CT(i) Next i Cells(1, 8).Value = Application.Sum(Range(Cells(m + 6, 18), Cells(n + m + 5, 18))) Range(Cells(m + 6, 18), Cells(n + m + 5, 18)).Select Selection.NumberFormat = "$ #,##0.00" Range("H1").Select Selection.NumberFormat = "$ #,##0.00" Columns("H:H").ColumnWidth = 14.71 Range("H1").SelectEnd Sub
108
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejercicios
1. Un voceador compra periódicos al precio $400 por cada uno y los vende a $1000 la unidad. Al final de cada día, el distribuidor de periódicos le pagará $200 por cada periódico que no haya vendido. La demanda diaria de los periódicos tiene la siguiente distribución de probabilidad:
Probabilidad Demanda diaria0,08 750,07 800,02 850,20 900,09 950,19 1000,12 1050,03 1100,14 1150,06 120
Use la técnica de Montecarlo para determinar el número óptimo de periódicos que el voceador debe ordenar de cada día y el ingreso o las pérdidas diarias que tienen lugar simulando 30 días. (La venta del día 0 fue 65)
2. Considérese una empresa dedicada al alquiler de automóviles por un día. Esta empresa dispone de 10 automóviles, siendo el costo de alquiler de $10.000 por día. A veces, la empresa necesita subcontratar automóviles de otra empresa, ya que tiene una demanda superior de los 10 automóviles de que dispone. Esta subcontratación le cuesta $15.000 diarios, en caso de conseguirla. Cuando no es así y no consigue subcontratar tantos automóviles como para garantizar la demanda de servicio, entonces sufre una pérdida de $80.000 por servicio no cumplido. El experimento de simulación debe tener en los siguientes:
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
109
Cole
cción
1
a. El número de días simulados es 24. b. El número de automóviles disponibles por día.c. Demanda diaria de automóviles.d. El número de automóviles que se necesita alquilar por día.e. El número de automóviles que se puede subcontratar por día.f. El número de automóviles contratados por día.g. El número de automóviles faltantes por día.h. El costo promedio.
Las tablas siguientes muestran las demandas diarias de automóviles, así como la oferta diaria de automóviles factibles de subcontratación (outsourcing).
Demanda diaria de automóviles Probabilidad Oferta diaria de automóviles
subcontratados Probabilidad
5 0,03 0 0,046 0,04 1 0,108 0,06 2 0,2110 0,07 3 0,2312 0,09 4 0,2013 0,13 5 0,1414 0,13 6 0,0815 0,1216 0,1018 0,1019 0,0920 0,04
3. Una pieza se ensambla en una línea de ensamblaje de una estación. Debido a la variabilidad en los materiales, el tiempo en la estación es una variable aleatoria con distribución de probabilidad empírica igual al tiempo entre llegadas. El siguiente cuadro muestra la distribución de probabilidad del tiempo en la estación y el tiempo entre llegadas.
110
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Variable tiempo entre llegadas (min) Probabilidad Variable tiempo de operación
(min) probabilidad
1 0,05 1 0,202 0,10 2 0,35
2,5 0,20 3 0,274 0,05 4 0,185 0,456 0,15
Se requiere determinar: a. Número de pieza en el sistema.b. Número de pieza en la cola.c. Tiempo promedio que una pieza permanece en el sistema.d. Tiempo promedio que una pieza espera ser atendida.e. Porcentaje de inactividad y porcentaje de utilización de las estaciones.f. Cuánto tiempo tomará el proceso de 30 piezas.
4. Una empresa produce un determinado producto cuya demanda diaria es una variable aleatoria con distribución de probabilidad empírica. El sistema de ordenar la producción es mediante el número de periodos de anticipación, cuyo tamaño del lote es la suma de la cantidad demandada durante el periodo de anticipación. Este periodo es también una variable aleatoria con distribución de probabilidad empírica.
El siguiente cuadro muestra la distribución de probabilidad de la demanda y tiempo de anticipación.
Demanda diaria Probabilidad Días de anticipación probabilidad10 0,130 2 0,3020 0,241 3 0,4030 0,270 4 0,30
GENERACIÓN DE vARIABLES ALEATORIAS MEDIANTE LA TéCNIC A DE MONTEC ARLO
111
Cole
cción
1
Demanda diaria Probabilidad Días de anticipación probabilidad40 0,18050 0,09060 0,03670 0,01280 0,04090 0,001
Se fija el punto reorden (punto de nuevo pedido) de 110 unidades con un inven-tario inicial 190 unidades. Se supone que cada producido tiene un costo de $1.500, el costo de alistamiento es de $6.000 por cada orden de producción, el costo de mantenimiento del inventario es $84 por cada unidad por día y el costo unitario de faltante es $1.500 por cada unidad por día. Simular este problema de producción para 30 días.
5. Una célula de manufactura está compuesta por un operario que atiende una cortadora automática (sierra mecánica) y dos tornos CNC idénticos en paralelo. Esta célula está conformada para producir una pieza determinada. El tiempo de operación de cortado y torneado es una variable aleatoria que tiene una distribución de probabilidad empírica, debido a la variabilidad de las dimensiones de la pieza, como lo muestran los siguientes cuadros.
Tiempo de operación de la cortadora (min)
Tiempo de operación del torno (min)
Tiempo entre llegadas de la pieza
Tiempo Probabilidad Tiempo Probabilidad Tiempo Probabilidad2 0,05 8 0,10 12 0,105 0,20 10 0,20 20 0,3010 0,35 15 0,30 24 0,1512 0,30 18 0,20 35 0,2514 0,10 20 0,15 45 0,20
22 0,05
112
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
El tiempo entre llegadas de la pieza a la recepción es también una variable aleatoria que tiene una distribución de probabilidad empírica, como lo muestra el cuadro anterior. Suponga que entre máquinas no se permite inventario amortiguador. Por consiguiente, el tornero 1 o el tornero 2 deben esperar a que el cortador termine su trabajo antes de que pueda comenzar la estación de torneado.
Se requiere determinar: a. Número de pieza en el sistema.b. Número de pieza en la cola.c. Tiempo promedio que una pieza permanece en el sistema.d. Tiempo promedio que una pieza espera ser atendida.e. Porcentaje de inactividad y porcentaje de utilización de las estaciones.f. Cuánto tiempo tomará el proceso de 30 piezas.
4Generación de variables aleatorias continuas
Método de la transformada inversa
El método de la transformada inversa puede utilizarse para simular variables aleatorias continuas, lo cual se logra mediante la función acumulativa F(x) y la generación de números aleatorios. El método consiste en:
a. Definir la función de densidad f(x) que represente la variable a modelar.b. Calcular la función acumulativa F(x).c. Despejar la variable aleatoria X y obtener la función acumulada inversa F-1 (R). d. Generar variables aleatorias x, sustituyendo los valores con números aleatorios
en función acumulada inversa.
R = número aleatorio.F(x) = función acumulada de la probabilidad. Entonces:
Despejando la x se tiene:
114
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de variables aleatorias mediante una distribución empírica
Supóngase que la variable aleatoria x tiene una función de densidad de probabilidad:
Si 0 ≤ x ≤ 6
Integrando la función e igualando a R se tiene: (¡Verifíquese!)
Generación de variables aleatorias mediante macro de Excel
Para generar esta macro, se tiene en cuenta:a. Llamar una macro denominada Procedimiento 2.1.b. Crear un botón de comando de los controles de formulario.
Denotaciones R = números aleatorios a generar por la función estadística Rnd.X = variable aleatoria a generar de acuerdo con la fórmula.
Se mostrará a continuación un procedimiento que genera una variable aleatoria con distribución de probabilidad empírica:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
115
Cole
cción
1
Procedimiento 4.1. Macro para generar una variable aleatoria empírica
Sub Generar variables() Dim x As Double Limpiar ActiveWindow.DisplayGridlines = False Range(“A1:H200”).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Font.Bold = True .WrapText = TrueEnd With n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n k = InputBox(“Digite el número de réplicas:”)Range(“B8:D8,G8:H8”).Select Selection.Interior.ColorIndex = 24 Range(“B9:D” & (n + 8)).Select Selection.Interior.ColorIndex = 19 Range(“G9:H” & (k + 8)).Select Selection.Interior.ColorIndex = 19 Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida” Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios” Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria” Range (“G8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.” Range(“H8”).Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range(Cells(n + 9, 3), Cells(n + 9, 4)).SelectSelection.Interior.ColorIndex = 20Range(Cells(k + 9, 7), Cells(k + 11, 8)).SelectSelection.Interior.ColorIndex = 20 Range(“C” & (n + 9)).Select: ActiveCell.FormulaR1C1 = “Promedio” Range(“G” & (k + 9)).Select: ActiveCell.FormulaR1C1 = “Promedio” Range(“G” & (k + 10)).Select: ActiveCell.FormulaR1C1 = “Varianza” Range(“G” & (k + 11)).Select: ActiveCell.FormulaR1C1 = “Desviación Estándar”For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R M = 30 * R - 27 x = Round(3 + Application.WorksheetFunction.Power(M, (1 / 3)), 3) Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i
116
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(n + 9, 4).Value = Round(Application.Average(Range("D9:D" & (n + 8))), 3) Cells(i + 8, 8) = Cells(n + 9, 4)Next iCells(k + 9, 8).Value = Round(Application.Average(Range("H9:H" & (k + 8))), 3)Cells(k + 10, 8).Value = Round(Application.Var(Range("H9:H" & (k + 8))), 3)Cells(k + 11, 8).Value = Round(Application.StDev(Range("H9:H" & (k + 8))), 3)Range("A1").SelectEnd Sub
Generación de variables aleatorias mediante la distribución exponencial
La distribución exponencial desempeña un papel importante en la descripción de una gran clase de fenómenos y procesos estocásticos, especialmente en el área de la teoría de confiabilidad, nacimientos y muerte, accidentes, líneas de espera y eventos en un inter-valo muy corto, por mencionar solo algunos. La función de densidad de probabilidad de la distribución exponencial es la siguiente:
Si x ≥ a
Para generar su variable aleatoria se tiene en cuenta:a = mínimo del valor de la variable x
media =
varianza =
moda = ala función acumulativa es:
; donde se tiene:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
117
Cole
cción
1
Cuando a = 0, la función de densidad de probabilidad de la distribución exponencial es la siguiente:
; X 0≥La función acumulativa es:
F(x) = dx = 1- ; donde: R = 1- , entonces: = 1 – R y Ln ( ) = Ln (1 – R); -λx = Ln (1 – R); por tanto, se tiene:
El cuadro anterior es el procesador para generar variables exponenciales con los siguientes parámetros:
a. E(x) = , que es la media de la distribución; por tanto, la fórmula para generar la variable será:
X =
V(X) = , que es la varianza de la distribución exponencial.
118
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 4.1. Función de densidad de probabilidad y distribución acumulativa de la exponencial
Ejemplo 4.1
Generar 20 variables exponenciales con 10 réplicas, si la media es 2,5. El siguiente proce-dimiento es para generar variables exponenciales sin el valor mínimo (a = 0).
Procedimiento 4.2. Macro para generar variables exponenciales sin el valor mínimo
Sub GenerarvariablesExponenciales() Dim x As Double, EX As Double, n As Integer, k As Integer, promedio As Double Limpiar ActiveWindow.DisplayGridlines = False Range(“A1:J200”).Select With Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End With
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
119
Cole
cción
1
n = InputBox("Digite el número de corridas:") Cells(1, 1).Value = n k = InputBox("Digite el número de réplicas:") EX = InputBox("Introduzca el valor medio de la exponencial:")Range("B8:D8,G8:H8").SelectSelection.Interior.ColorIndex = 24Range("B9:D" & (n + 8)).SelectSelection.Interior.ColorIndex = 19Range("G9:H" & (k + 8)).SelectSelection.Interior.ColorIndex = 19Range("B8").Select: ActiveCell.FormulaR1C1 = "Número de corrida"Range("C8").Select: ActiveCell.FormulaR1C1 = "Números aleatorios"Range("D8").Select: ActiveCell.FormulaR1C1 = "Variable aleatoria"Range ("G8").Select: ActiveCell.FormulaR1C1 = "Réplica Num."Range("H8").Select: ActiveCell.FormulaR1C1 = "Promedio de variable"Range(Cells(n + 9, 3), Cells(n + 10, 4)).SelectSelection.Interior.ColorIndex = 20Range(Cells(k + 9, 7), Cells(k + 11, 8)).SelectSelection.Interior.ColorIndex = 20Range("C" & (n + 9)).Select: ActiveCell.FormulaR1C1 = "La media"Range("C" & (n + 10)).Select: ActiveCell.FormulaR1C1 = "La Varianza"Range("G" & (k + 9)).Select: ActiveCell.FormulaR1C1 = "Promedio"Range("G" & (k + 10)).Select: ActiveCell.FormulaR1C1 = "Varianza"Range("G" & (k + 11)).Select: ActiveCell.FormulaR1C1 = "Desviación Estándar"For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R x = (-1 * EX) * (Application.Ln(1 - R)): Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i Cells(n + 9, 4).Value = EX: Cells(n + 10, 4).Value = (EX) ^ 2 promedio = Application.Average(Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedioNext iCells(k + 9, 8).Value = Application.Average(Range("H9:H" & (k + 8)))Cells(k + 10, 8).Value = Application.Var(Range("H9:H" & (k + 8)))Cells(k + 11, 8).Value = Application.StDev(Range("H9:H" & (k + 8)))Cells(1, 1).SelectEnd Sub
120
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de variables exponenciales mediante macro de Excel con el valor mínimo
La macro que se mostrará a continuación simula para generar 20 variables exponencia-les con el valor mínimo de 5 y valor de lambda de 10, con los siguientes aspectos:
a. Genera la variable aleatoria exponencial mediante el procesador de variables, vista anteriormente.
b. Captura de datos como lambda y el valor mínimo.
Procedimiento 4.3. Macro para generar variables exponenciales con el valor mínimo
Sub Exponencial Mínimo()Dim x, lambda, a As Double, n As Integer, k As Integer, promedio As DoubleLimpiarActiveWindow.DisplayGridlines = FalseCells. Select With Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd Withn = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nk = InputBox(“Digite el número de réplicas:”)a = InputBox(“Digite el valor mínimo de la variable:”): Cells(n + 11, 4).Value = alambda = InputBox(“Introduzca el valor Lambda:”): Cells(n + 12, 4).Value = lambdaRange(“B8:D8, G8:H8”).Select: Selection.Interior.ColorIndex = 24Range(“B9:D” & (n + 8)).Select: Selection.Interior.ColorIndex = 19Range(“G9:H” & (k + 8)).Select: Selection.Interior.ColorIndex = 19Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.”Range(“H8”).Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range(Cells(n + 9, 3), Cells(n + 12, 4)).SelectSelection.Interior.ColorIndex = 20
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
121
Cole
cción
1
Range(Cells(k + 9, 7), Cells(k + 11, 8)).SelectSelection.Interior.ColorIndex = 20Range("C" & (n + 9)).Select: ActiveCell.FormulaR1C1 = "La media"Range("C" & (n + 10)).Select: ActiveCell.FormulaR1C1 = "La Varianza"Range("C" & (n + 11)).Select: ActiveCell.FormulaR1C1 = "Valor Mínimo"Range("C" & (n + 12)).Select: ActiveCell.FormulaR1C1 = "Valor Lambda"Range("G" & (k + 9)).Select: ActiveCell.FormulaR1C1 = "Promedio"Range("G" & (k + 10)).Select: ActiveCell.FormulaR1C1 = "Varianza"Range("G" & (k + 11)).Select: ActiveCell.FormulaR1C1 = "Desviación Estándar"For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R x = ((-1) * (Application.Ln(1 - R)) + lambda * a) / lambda: Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i Cells(n + 9, 4).Value = a + (1 / lambda): Cells(n + 10, 4).Value = (1 / lambda) ^ 2 promedio = Application.Average(Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedioNext iCells(k + 9, 8).Value = Application.Average(Range("H9:H" & (k + 8)))Cells(k + 10, 8).Value = Application.Var(Range("H9:H" & (k + 8)))Cells(k + 11, 8).Value = Application.StDev(Range("H9:H" & (k + 8)))Range("A1").SelectEnd Sub
122
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de variables aleatorias mediante la distribución uniforme
La función de densidad de probabilidad de la distribución uniforme es la siguiente:
a = cota inferior del intervalob = cota superior del intervalo
La función acumulativa es:
Integrando, se tiene:
Despejando la variable x:
x = a + (b – a )R
El cuadro anterior indica la fórmula para generar variables uniformes con los siguientes parámetros:
La gráfica de la distribución de probabilidad de la distribución uniforme es la siguiente:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
123
Cole
cción
1
Figura 4.2. Funcion de dendidad de probabilidad y distribución acumulativa de la uniforme
Generación de variables uniformes mediante macro de Excel
Se parte de un ejemplo para que sea más comprensible la macro para generar variables uniformes.
Ejemplo 4.2
Se requiere generar variables uniformes, siendo el valor de la cota inferior del intervalo igual a 12 y el valor de la cota superior del intervalo igual a 36. La macro que se mostrará a continuación simula para generar variables uniformes con los siguientes aspectos:
a. Captura el número de corridas.b. Captura el número de réplicas.c. Captura el límite inferior.d. Captura el límite superior.e. Mediante fórmula, se genera la variable aleatoria uniforme.
124
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 4.4. Macro para generar variables uniformes
Sub GenerarvariablesUniformes()Dim x As Double, a As Double, b As Double, n As Integer, k As Integer, promedio As DoubleLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nCells.Select With Selection .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End Withk = InputBox(“Digite el número de réplicas:”)a = InputBox(“Introduzca el valor del límite inferior (a):”): Cells(n + 11, 4).Value = ab = InputBox(“Introduzca el valor del límite superior (b):”): Cells(n + 12, 4).Value = bRange(“B8:D8,G8:H8”).Select: Selection.Interior.ColorIndex = 24Range(“B9:D” & (n + 8)).Select: Selection.Interior.ColorIndex = 19Range(“G9:H” & (k + 8)).Select: Selection.Interior.ColorIndex = 19Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.”Range(“H8”).Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range(Cells(n + 9, 3), Cells(n + 12, 4)).Select: Selection.Interior.ColorIndex = 20Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select: Selection.Interior.ColorIndex = 20Range(“C” & (n + 9)).Select: ActiveCell.FormulaR1C1 = “La media”Range(“C” & (n + 10)).Select: ActiveCell.FormulaR1C1 = “La Varianza”Range(“C” & (n + 11)).Select: ActiveCell.FormulaR1C1 = “Limite inferior”Range(“C” & (n + 12)).Select: ActiveCell.FormulaR1C1 = “Limite superior”Range(“G” & (k + 9)).Select: ActiveCell.FormulaR1C1 = “Promedio”Range(“G” & (k + 10)).Select: ActiveCell.FormulaR1C1 = “Varianza”Range(“G” & (k + 11)).Select: ActiveCell.FormulaR1C1 = “Desviación Estándar”For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R: x = a + (b - a) * R: Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
125
Cole
cción
1
Cells(n + 9, 4).Value = ((a + b) / 2): Cells(n + 10, 4).Value = (((b - a) ^ 2) / 12) promedio = Application.Average(Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedioNext iCells(k + 9, 8).Value = Application.Average(Range("H9:H" & (k + 8)))Cells(k + 10, 8).Value = Application.Var(Range("H9:H" & (k + 8)))Cells(k + 11, 8).Value = Application.StDev(Range("H9:H" & (k + 8)))Cells(1, 1).SelectEnd Sub
Ejemplo 4.3
Control de la producción. Una empresa necesita para su producción dos tipos de piezas, A y B, que recibe de fabricantes distintos. La pieza A es de forma cilíndrica y la longitud de su radio, R1, según el fabricante, es una variable aleatoria con distribución expo-nencial cuya media es 20 mm. Esta pieza debe introducirse en otra pieza B de interior circular y radio aleatorio R2; según el fabricante de la pieza B, la variable aleatoria R2 es una distribución uniforme con valor mínimo de 25 mm y valor máximo de 30 mm
La empresa está interesada en conocer la proporción de piezas que se deberán desechar de ambos tipos. Se entienden como piezas desechables aquellas piezas tales que dada una cualquiera de las desechables del tipo A, con radio R1( i ), no se pueda encontrar otra, j, entre las desechables del tipo B con radio R2 ( j ), de tal forma que:
R2 (j) – R1 (i) > 0
Generación de radios aleatorios mediante macro de Excel. El procedimiento de la simulación se realizará de acuerdo con los siguientes aspectos:
1. Fijar el número de piezas, K, de ambos tipos, para las que realizará la simulación.2. Simular K valores tanto de la variable aleatoria R1 como de la R2. Estos valores se
designarán por R1( i ) y R2( j ), i = 1,2,3,…..K y j = 1,2,3,…..K3. Generar la variable aleatoria exponencial y la variable uniforme de acuerdo con
las especificaciones del ejemplo.
126
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
4. Captura de datos como la media de la exponencial y los límites tanto inferior como superior de la uniforme.
5. Crea una función (Función), que es un procedimiento para determinar el loga-ritmo natural (Ln)
Procedimiento 4.5. Macro para generar variables exponenciales y uniformes
Sub GeneraRadios()Dim Rad1, Rad2, Dif, Porc As Double, k, sum, De As IntegerDim media, a, b As SingleDim R1, R2 As DoubleRange(“A1:I200”).ClearContentsActiveWindow.DisplayGridlines = FalseCells.Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Font.Name = “Arial” .Font.Bold = True End Withk = InputBox(“Digite el número de corridas:”): Cells(1, 2).Value = kRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Rep = InputBox(“Digite el número de réplicas:”)media = InputBox(“Digite la media del radio 1”): Cells(2, 2).Value = mediaRange(“A2”).Select: ActiveCell.FormulaR1C1 = “Valor de la media del radio 1”a = InputBox(“Introduzca el valor mínimo del radio 2”): Cells(1, 4).Value = aRange(“C1”).Select: ActiveCell.FormulaR1C1 = “Valor mínimo del radio 2”b = InputBox(“Introduzca el valor máximo del radio 2”): Cells(2, 4).Value = bRange(“C2”).Select: ActiveCell.FormulaR1C1 = “Valor máximo del radio 2”Range(“A1:D2”).Select: Selection.Interior.ColorIndex = 24Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Números de piezas”Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios de pieza A”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Radio de la pieza A”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios de pieza B”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Radio de la pieza B”Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Estado”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de defectuosos”
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
127
Cole
cción
1
Range ("H3").Select: ActiveCell.FormulaR1C1 = "Réplica Num."Range("I3").Select: ActiveCell.FormulaR1C1 = "Porcentaje Promedio"Range("H" & (Rep + 4)).Select: ActiveCell.FormulaR1C1 = "Porcentaje"Range(Cells(Rep + 4, 8), Cells(Rep + 4, 9)).Select: Selection.Interior.ColorIndex = 19Range("A3:I3").Select: Selection.Interior.ColorIndex = 45For i = 1 To Rep sum = 0 For j = 1 To k Cells(j + 3, 1).Value = j R1 = Rnd: Cells(j + 3, 2).Value = R1 Rad1 = (-media) * Ln(1 - R1): Cells(j + 3, 3).Value = Round(Rad1, 2) R2 = Rnd: Cells(j + 3, 4).Value = R2 Rad2 = a + (b - a) * R2: Cells(j + 3, 5).Value = Round(Rad2, 2) Dif = Rad2 - Rad1 If (Dif > 0) Then Cells(j + 3, 6) = "No Desechable" Else Cells(j + 3, 6) = "Desechable" De = 1 sum = sum + De End If Next j Porc = sum / k: Cells(4, 7).Value = Porc Cells(i + 3, 8).Value = i Cells(i + 3, 9).Value = Cells(4, 7).ValueNext i Cells(Rep + 4, 9).Value = Application.Average(Range("I4:I" & (Rep + 4))) Range("G4,I" & (Rep + 4)).Select Selection.NumberFormat = "0.00%"End SubFunction Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Ejemplo 4.4
Programa Maestro de Producción, MPS. Supóngase que una empresa produce un determinado artículo cuya demanda mensual se comporta como una variable aleatoria distribuida uniformemente entre 900 y 2000 unidades. Los días hábiles también son una
128
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
variable aleatoria distribuida uniformemente entre 20 y 22 días, y el tiempo unitario de producción es una variable aleatoria distribuida uniformemente entre 4 y 6 horas-hom-bre. La empresa cuenta con 40 trabajadores inicialmente, trabajando a una jornada de 8 horas diarias. La estrategia de fabricación consiste en producir tiempo extra, si los faltantes exceden 1000 unidades; en caso contrario, se produce de acuerdo con su capacidad de producción real.
Los costos relevantes que intervienen en este escenario son:Costo unitario de producción……………... $8 por unidad.a. Costo unitario de almacenamiento…… $3 por unidad por mes.b. Costo unitario de faltantes por mes…... $10 por unidad por mes.
La información de capacidad es:Inventario inicial en unidades………….. 300 unidades.a. El tiempo extra es el 25% del tiempo normal.
Para programar experimentos de simulación para 30 meses con este ejemplo, se debe tener en cuenta:
La capacidad de la producción real se obtiene:CDT = capacidad disponible total (horas-hombres por periodo).CDW = capacidad disponible por trabajador (horas por periodo).JL = jornada laboral (horas diarias).DH = días hábiles al mes.TS = tiempo unitario de producción (horas-hombres).W = número de trabajadores.PROD = producción en tiempo normal (unidades).
CDW = (JL) x (DH)CDT = (W)x(CDW)
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
129
Cole
cción
1
a. El inventario final del periodo. Este inventario final se obtiene: Inventario final = inventario inicial – faltante inicial + producción + faltante
final – demanda. Si el inventario final resulta negativo, se considera como un faltante.b. El tiempo de retraso en días, que se determina mediante:
DH = días hábiles
c. La eficiencia de producción se calcula mediante:
Procedimiento 4.6. Macro para un programa maestro de producción
Sub Produccion()Dim a As Integer, b As Integer, Dem(1 To 1000) As LongDim Falt(0 To 1000) As Long, Prom As Long, Prod(1 To 1000) As Long, TE(1 To 1000) As LongDim sum As Long, Inv(0 To 1000) As Long, Real(1 To 1000) As LongDim Retr(1 To 1000) As Double, Efic(1 To 1000) As Double, Ts(1 To 1000) As DoubleDim JL As Integer, DH(1 To 1000) As Integer, W As Integer, CDT(1 To 1000) As Double, Tsm As DoubleDim C As Double, CUA As Double, CUF As Double, K As Integer, R1(1 To 1000) As DoubleDim R2(1 To 1000) As Double, R3(1 To 1000) As Double, CT(1 To 1000) As DoubleActiveWindow.DisplayGridlines = FalseRange(“A7:K2000”).ClearContentsRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Simulacion de Produccion”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Jornada Laboral”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Número de Periodos”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Número de Trabajadores”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Demanda Mínima”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Demanda Máxima”Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Días hábiles Mínimo”
130
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Días hábiles Máximo”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Inventario Inicial”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Costo Unitario de Producción ($)”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Costo Unitario de Almacenamiento ($)”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Costo unitario de Faltante($)”Range(“G4”).Select: ActiveCell.FormulaR1C1 = “Costo Total($)”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Periodos”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “Días Hábiles Generados”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Demanda Generada”Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Producción en Tiempo Normal”Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Producción en Tiempo Extra”Range(“F5”).Select: ActiveCell.FormulaR1C1 = “Inventario Final”Range(“G5”).Select: ActiveCell.FormulaR1C1 = “Faltantes Finales”Range(“H5”).Select: ActiveCell.FormulaR1C1 = “Periodos de Retraso de Pedidos pendientes”Range(“I5”).Select: ActiveCell.FormulaR1C1 = “Eficiencia”K = InputBox(“Digite el número de periodos:”)Cells(3, 2).Value = KRange(“A1:H1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A2:H4,A5:I” & (K + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd WithRange(“A2:A4,C2:C4,E2:E4,G2:G4”).SelectSelection.Interior.ColorIndex = 44
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
131
Cole
cción
1
Range(“A5:I5”).SelectSelection.Interior.ColorIndex = 6JL = InputBox(“Introduzca la jornada laboral:”): Cells(2, 2).Value = JLW = InputBox(“Digite el número de trabajadores:”): Cells(4, 2).Value = Wa = InputBox(“Digite el limite inferior de la demanda:”): Cells(2, 4).Value = ab = InputBox(“Digite el limite superior de la demanda:”): Cells(3, 4).Value = ba1 = InputBox(“Digite el limite inferior de los días hábiles:”): Cells(4, 4).Value = a1b1 = InputBox(“Digite el limite superior de los días hábiles:”): Cells(2, 6).Value = b1a2 = InputBox(“Digite el limite inferior del tiempo unitario de producción:”)b2 = InputBox(“Digite el limite superior del tiempo unitario de producción:”)Inv(0) = InputBox(“Introduzca el inventario inicial:”): Cells(3, 6).Value = Inv(0)C = InputBox(“Digite el costo unitario de producción:”): Cells(4, 6).Value = CCUA = InputBox(“Introduzca el costo unitario de almacenamiento:”): Cells(2, 8).Value = CUACUF = InputBox(“Introduzca el costo unitario de faltante:”): Cells(3, 8).Value = CUFRange(“A6”).SelectActiveCell.FormulaR1C1 = “Inicial”Range(“A” & (K + 7)).Select: ActiveCell.FormulaR1C1 = “Total”Cells(6, 6).Value = Inv(0): Falt(0) = 0Cells(6, 7).Value = Falt(0)For i = 1 To KCells(i + 6, 1).Value = iR1(i) = RndDH(i) = a1 + (b1 - a1) * R1(i): Cells(i + 6, 2).Value = Round(DH(i), 0)R2(i) = RndDem(i) = a + (b - a) * R2(i): Cells(i + 6, 3).Value = Round(Dem(i), 0)sum = sum + Dem(i)R3(i) = Rnd: Ts(i) = a2 + (b2 - a2) * R3(i)Next iCells(K + 7, 3) = Round(sum, 0)For i = 1 To KCDT(i) = W * JL * DH(i)Prod(i) = Round((CDT(i) / Ts(i)), 0): Cells(i + 6, 4).Value = Prod(i)Next iFor i = 1 To KDem(i) = Cells(i + 6, 3).Value: Prod(i) = Cells(i + 6, 4).ValueTE(i) = Cells(i + 6, 5).Value: Inv(i) = Cells(i + 6, 6).ValueFalt(i) = Cells(i + 6, 7).Value: Retr(i) = Cells(i + 6, 8).ValueEfic(i) = Cells(i + 6, 9).ValueInv(i) = Inv(i - 1) - Falt(i - 1) + Prod(i) + TE(i) + Falt(i) - Dem(i)If (Inv(i) >= 0) Then
132
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(i + 6, 6).Value = Inv(i)Falt(i) = 0: Cells(i + 6, 7).Value = Falt(i)TE(i) = 0: Cells(i + 6, 5).Value = TE(i)ElseFalt(i) = (-1) * (Inv(i)): Cells(i + 6, 7).Value = Falt(i)Cells(i + 6, 6).Value = 0TE(i) = 0: Cells(i + 6, 5).Value = TE(i)If Falt(i) > 1000 ThenTE(i) = 0.25 * (Prod(i)): Cells(1 + 6, 5).Value = TE(i)Inv(i) = Inv(i - 1) - Falt(i - 1) + Prod(i) + TE(i) + Falt(i) - Dem(i)If (Inv(i) >= 0) ThenCells(i + 6, 6).Value = Inv(i)Falt(i) = 0: Cells(i + 6, 7).Value = Falt(i)TE(i) = 0: Cells(i + 6, 5).Value = TE(i)ElseFalt(i) = (-1) * (Inv(i)): Cells(i + 6, 7).Value = Falt(i)Cells(i + 6, 6).Value = 0TE(i) = 0: Cells(i + 6, 5).Value = TE(i)End IfEnd IfEnd IfRetr(i) = (Falt(i) / Prod(i)) * DH(i): Cells(i + 6, 8).Value = Round(Retr(i), 1)Efic(i) = Dem(i) / (Prod(i) + TE(i)): Cells(i + 6, 9).Value = Efic(i)Next i Range("I7:I" & (K + 6)).Select Selection.NumberFormat = "0.00%"Range("A2").Selectsuma = 0For i = 1 To KCT(i) = C * Prod(i) + CUA * Inv(i) + CUF * Falt(i)suma = suma + CT(i)Next iCells(4, 8).Value = sumaRange("H4").SelectSelection.NumberFormat = "$#,##0.00"End Sub
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
133
Cole
cción
1
Generación de variables aleatorias mediante la distribución Weibull
La función de densidad de probabilidad de la distribución Weibull es la siguiente:
a = valor mínimo de la variableα = parámetro de forma ≥ 0β = parámetro de escala ≥ 0media = αβvarianza = αβ²moda = a + β(α – 1) Si α ≥ 1moda = a, en caso contrarioF(X) = función acumulativa de probabildad
F(x) = R =
Despejando la variable x, se tiene:
Cuando el valor mínimo de la variable es cero (a = 0), la función de densidad de probabilidad de la distribución Weibull es:
Donde α es el parámetro de forma y β es el parámetro de escala.La función de distribución acumulativa se calcula de la siguiente manera:
F(x) = función acumulada de la probabilidad
F(x) = R =
Despejando la variable, se tiene:
134
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Para programar experimentos de simulación con el fin de generar variables con distribución de probabilidad de Weibull, se parte del siguiente ejemplo.
Ejemplo 4.5
El tiempo de vida de una componente es una variable aleatoria con distribución de probabilidad Weibull, siendo el valor de alfa de 9 y el valor de beta de 2. Simule 20 corridas con 10 réplicas.
Procedimiento 4.7. Macro para generar variables Weibull sin el valor mínimo
Sub GenerarvariablesWeibull() Dim x As Double, a As Double, n As Integer, k As Integer Dim b As Double, promedio As Double Limpiar ActiveWindow.DisplayGridlines = False Range(“A1:H200”).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Font.Bold = True End With n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n k = InputBox(“Digite el número de réplicas:”) a = InputBox(“Digite el valor de alfa:”) b = InputBox(“Digite el valor de beta:”)Range(“B8:D8,G8:H8”).Select: Selection.Interior.ColorIndex = 24Range(“B9:D” & (n + 8)).Select: Selection.Interior.ColorIndex = 19Range(“G9:H” & (k + 8)).Select: Selection.Interior.ColorIndex = 19Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.”Range(“H8”).Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range(Cells(n + 9, 3), Cells(n + 12, 4)).SelectSelection.Interior.ColorIndex = 20Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
135
Cole
cción
1
Selection.Interior.ColorIndex = 20Range("C" & (n + 9)).Select: ActiveCell.FormulaR1C1 = "La media"Range("C" & (n + 10)).Select: ActiveCell.FormulaR1C1 = "La Varianza"Range("C" & (n + 11)).Select: ActiveCell.FormulaR1C1 = "alfa"Range("C" & (n + 12)).Select: ActiveCell.FormulaR1C1 = "beta"Range("G" & (k + 9)).Select: ActiveCell.FormulaR1C1 = "Promedio"Range("G" & (k + 10)).Select: ActiveCell.FormulaR1C1 = "Varianza"Range("G" & (k + 11)).Select: ActiveCell.FormulaR1C1 = "Desviación Estandar"For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R x = Weibull(R, a, b): Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i Cells(n + 9, 4).Value = a * b: Cells(n + 10, 4).Value = a * b ^ 2 Cells(n + 11, 4).Value = a: Cells(n + 12, 4).Value = b promedio = Application.Average(Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedioNext iCells(k + 9, 8).Value = Application.Average(Range("H9:H" & (k + 8)))Cells(k + 10, 8).Value = Application.Var(Range("H9:H" & (k + 8)))Cells(k + 11, 8).Value = Application.StDev(Range("H9:H" & (k + 8)))Cells(1, 1).SelectEnd Sub
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Weibull(R As Variant, a As Variant, b As Variant) As DoubleWeibull = (b) * (-1 * Ln(1 - R)) ^ (1 / a)End Function
Ejemplo 4.6
El periodo medio de vida de una componente hasta que se produce error es una variable aleatoria con distribución de probabilidad Weibull, teniendo como parámetros:
a. a = 102 unidades de tiempo (valor con el que se evalúa la función).b. alfa = 20.c. beta = 100.
136
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Se requiere programar experimentos de simulación de 20 corridas con 10 réplicas.
Procedimiento 4.8. Macro para generar variables Weibull con valor mínimo
Sub GenerarvariablesWeibull2() Dim x As Double, a As Double, n As Integer, k As Integer, promedio As Double Dim b As Double, v As Double Limpiar ActiveWindow.DisplayGridlines = False Cells.Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Font.Bold = True End With n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n k = InputBox(“Digite el número de réplicas:”) v = InputBox(“introduzca el valor mínimo:”) a = InputBox(“Digite el valor de alfa:”) b = InputBox(“Digite el valor de beta:”)Range(“B8:D8,G8:H8”).SelectSelection.Interior.ColorIndex = 6Range(“B9:D” & (n + 8)).SelectSelection.Interior.ColorIndex = 19Range(“G9:H” & (k + 8)).SelectSelection.Interior.ColorIndex = 19Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.”Range(“H8”).Select: ActiveCell.FormulaR1C1 = “Promedio de variables”Range(Cells(n + 9, 3), Cells(n + 13, 4)).SelectSelection.Interior.ColorIndex = 44Range(Cells(k + 9, 7), Cells(k + 11, 8)).SelectSelection.Interior.ColorIndex = 44Range(“C” & (n + 9)).Select: ActiveCell.FormulaR1C1 = “la media”Range(“C” & (n + 10)).Select: ActiveCell.FormulaR1C1 = “la varianza”Range(“C” & (n + 11)).Select: ActiveCell.FormulaR1C1 = “alfa”
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
137
Cole
cción
1
Range("C" & (n + 12)).Select: ActiveCell.FormulaR1C1 = "beta"Range("C" & (n + 13)).Select: ActiveCell.FormulaR1C1 = "valor mínimo"Range(Cells(n + 11, 3), Cells(n + 13, 4)).SelectRange("G" & (k + 9)).Select: ActiveCell.FormulaR1C1 = "Promedio"Range("G" & (k + 10)).Select: ActiveCell.FormulaR1C1 = "Varianza"Range("G" & (k + 11)).Select: ActiveCell.FormulaR1C1 = "Desviación Estandar"For i = 1 To k For j = 1 To n Cells(j + 8, 2) = j R = Rnd: Cells(j + 8, 3) = R x = Weibull(R, a, b, v): Cells(j + 8, 4).Value = x Next j Cells(i + 8, 7) = i Cells(n + 9, 4).Value = a * b: Cells(n + 10, 4).Value = a * b ^ 2 Cells(n + 11, 4).Value = a: Cells(n + 12, 4).Value = b Cells(n + 13, 4).Value = v promedio = Application.Average(Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedioNext iCells(k + 9, 8).Value = Application.Average(Range("H9:H" & (k + 8)))Cells(k + 10, 8).Value = Application.Var(Range("H9:H" & (k + 8)))Cells(k + 11, 8).Value = Application.StDev(Range("H9:H" & (k + 8)))Cells(1, 1).SelectEnd Sub
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Weibull(R As Variant, a As Variant, b As Variant, v As Variant) As DoubleWeibull = (b) * (-1 * Ln(1 - R)) ^ (1 / a) + vEnd Function
Método de composición
Es un método para generar variables aleatorias que consiste en seleccionar subáreas o áreas para definir distribuciones de probabilidad, con el propósito de encontrar la función de densidad original.
138
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Para aplicar este método, se requieren dar los siguientes pasos:a. Dividir la distribución de probabilidad original en subáreas, tal como se muestra
en la figura siguiente:
Figura 4.3. Función de probabilidad en áreas
Donde Ai es el área de la región i, se tiene que:
b. Definir una distribución de probabilidad para cada subárea.c. Expresar la distribución de probabilidad original de la manera siguiente:
f (x) = A1f1(x) + A2f2(x) + . . . . . . . . . Anfn(x)
d. Obtener la distribución de probabilidad acumulada.
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
139
Cole
cción
1
Generación de variables aleatorias mediante la distribución triangular
La distribución de probabilidad triangular tiene el comportamiento de incrementar la variable partiendo de un término a (valor mínimo) hasta un término b (moda), y luego disminuir a partir de b (moda) hasta un término c (valor máximo).
Es una distribución continua acotada en ambos lados. La distribución triangular se utiliza cuando hay pocos o no hay datos disponibles. La distribución de probabilidad triangular se presenta en la siguiente figura:
Figura 4.4. Distribución de probabilidad triangular
La gráfica de la distribución triangular se divide en dos áreas, tal como se muestra a continuación:
140
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 4.5. Distribución triangular en dos áreas
Cálculo de las áreas de la distribución triangular
Para calcular las áreas de la distribución de probabilidad, se hace lo siguiente:
Generación de la variable aleatoria con distribución triangular
Generar variables aleatorias de la distribución triangular se realiza en dos maneras, dependiendo del intervalo (a, b) y el intervalo (b, c).
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
141
Cole
cción
1
Intervalo entre a (valor mínimo) y b (la moda)
Se comienza con la primera área de la distribución triangular, como se muestra en la figura 4.6.
Figura 4.6. Primer área de la distribución triangular
Intervalo entre b (la moda) y c (valor máximo)
Se empieza con la segunda área de la distribución triangular, como se muestra en la figura 4.7.
Figura 4.7. Segundo área de la distribución triangular
142
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
En resumen, la función de densidad de la probabilidad triangular sería la siguiente:
La generación de la variable triangular es:
X =
Generación de variables aleatorias triangulares mediante macro de Excel
Para crear una macro que genere variables aleatorias triangulares, se parte de un ejemplo con los siguientes datos:
a. El valor mínimo es 10.b. El valor más probable es 30.c. El valor máximo es 70.
Se requieren generar 20 valores de variables triangulares.
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
143
Cole
cción
1
Procedimiento 4.9. Macro para generar variables triangulares
Sub Triangular1()Dim a As Double, b As Double, c As Double, N As VariantActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = "Arial" .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange("A2").Select: ActiveCell.FormulaR1C1 = "Valor mínimo"Range("A3").Select: ActiveCell.FormulaR1C1 = "Valor más probable"Range("A4").Select: ActiveCell.FormulaR1C1 = "Valor máximo"Range("A5").Select: ActiveCell.FormulaR1C1 = "Número de corridas"Range("B5").Select: ActiveCell.FormulaR1C1 = "Números aleatorios"Range("C5").Select: ActiveCell.FormulaR1C1 = "Variables aleatorias"K = InputBox("El número de corridas:")a = InputBox("Digite el valor mínimo:"): Cells(2, 2).Value = ab = InputBox("Digite el valor más probable:"): Cells(3, 2).Value = bc = InputBox("Digite el valor máximo:"): Cells(4, 2).Value = cRange("A2:A4,A5:C5").Select: Selection.Interior.ColorIndex = 6For i = 1 To KCells(i + 5, 1).Value = iR = Rnd: Cells(i + 5, 2).Value = R: N = Cells(i + 5, 2).Valuex = Triangular(N, a, b, c): Cells(i + 5, 3).Value = xRange("A1").SelectNext iEnd Sub
144
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Function Triangular(N As Variant, a As Double, b As Double, c As Double) As DoubleDim RO1, RO2 As DoubleIf N <= (b - a) / (c - a) ThenRO1 = (c - a) * (b - a) * N: Triangular = a + Sqr(RO1)ElseRO2 = (c - a) * (c - b) * (1 - N): Triangular = c - Sqr(RO2)End IfEnd Function
Generación de variables aleatorias mediante la distribución trapezoidal
La distribución de probabilidad trapezoidal tiene el comportamiento de tres fases: la primera fase es la ascendente, partiendo de un término a hasta un término b; la segunda es la de estabilidad, partiendo de b hasta c; la tercera es la descendente, partiendo de c hasta un término d. Es una distribución continua acotada en ambos lados. La distribu-ción trapezoidal se utiliza cuando hay pocos o no hay datos disponibles. La distribución de probabilidad trapezoidal se presenta la siguiente figura:
Figura 4.8. Distribución de probabilidad trapezoidal
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
145
Cole
cción
1
La figura de la distribución trapezoidal se divide en tres áreas, como se muestra a continuación.
Figura 4.9. Distribución de probabilidad trapezoidal en áreas
Determinar las áreas de la distribución de probabilidad trapezoidal se realiza de la manera siguiente:
146
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de la variable aleatoria con distribución trapezoidal
Generar variables aleatorias de la distribución trapezoidal se realiza de tres maneras, dependiendo de los intervalos (a, b), (b, c) y (c, d).
Intervalo entre a y b
Se empieza con la primera área de la distribución trapezoidal, de acuerdo con la figura 4.10.
Figura 4.10. primera fase de la distribución trapezoidal
Intervalo entre b y c
Se empieza con la segunda área de la distribución trapezoidal, de acuerdo con la figura 4.11.
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
147
Cole
cción
1
Figura 4.11. Distribución trapezoidal segunda fase
Intervalo entre c y d
Se empieza con la tercera área de la distribución trapezoidal, de acuerdo con la figura 4.12,
Figura 4.12. Tercera fase de la distribución trapezoidal
148
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Resumiendo, se tiene:
En el cuadro siguiente se encontrarán los generadores de variables trapezoidales:
Generación de variables aleatorias trapezoidales mediante macro de Excel
Para crear una macro para que genere variables aleatorias trapezoidales, se parte de un ejemplo con los siguientes datos:
a. El valor a es 10.b. El valor b es 20.c. El valor c es 40.d. El valor d es 60.
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
149
Cole
cción
1
Procedimiento 4.10. Macro para generar variables trapezoidales
Sub Trapezoide()Dim K As IntegerDim n As Variant, x(2000) As Double, R(2000) As DoubleDim a As Integer, b As Integer, c As Integer, d As IntegerActiveWindow.DisplayGridlines = FalseRange(“A1”).Select: ActiveCell.FormulaR1C1 = “GENERACION DE VARIABLES TRAPEZOIDALES”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Valor de a”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Valor de b”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Valor de c”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Valor de d”Range(“A6”).Select: ActiveCell.FormulaR1C1 = “No. de Observaciones”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“C6”).Select: ActiveCell.FormulaR1C1 = “Variables Trapezoidales”Range(“A1:C1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20K = InputBox(“Digite el número de corridas:”)Range(“A1:D1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A2:B5,A6:C” & (K + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMediumEnd WithRange(“A2:A5,A6:C6”).SelectSelection.Interior.ColorIndex = 6
150
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range("A1").Selecta = InputBox("Digite el valor de a:"): Cells(2, 2).Value = ab = InputBox("Digite el valor de b:"): Cells(3, 2).Value = bc = InputBox("Digite el valor de c:"): Cells(4, 2).Value = cd = InputBox("Digite el valor de d:"): Cells(5, 2).Value = dFor i = 1 To KCells(i + 6, 1).Value = iR(i) = RndCells(i + 6, 2).Value = R(i)n = Cells(i + 6, 2).Valuex(i) = TRAPEZOIDAL(n, a, b, c, d)Cells(i + 6, 3).Value = x(i)Next iEnd Sub
Function TRAPEZOIDAL(N As Variant, a As Integer, b As Integer, c As Integer, d As Integer) As DoubleDim RO1, RO2 As DoubleIf N <= (b - a) / (d + c - a - b) ThenRO1 = (d + c - a - b) * (b - a) * NTRAPEZOIDAL = Round(a + Sqr(RO1), 2)ElseIf N > ((b - a) / (d + c - a - b)) And R <= ((2 * c - a - b) / (d + c - a - b)) ThenTRAPEZOIDAL = Round(0.5 * ((d + c - a - b) * N + a + b), 2)ElseRO2 = (d + c - a - b) * (d - c) * (1 - N)TRAPEZOIDAL = Round(d - Sqr(RO2), 2)End IfEnd Function
Ejemplo 4.7
Una empresa tiene asignada una camioneta especial para el transporte diario de 10 cajas de un determinado producto de gran aceptación en el mercado. El peso de cada caja sigue la distribución de probabilidad trapezoidal con los parámetros (20, 40, 60, 70 kg).
Si la capacidad de la camioneta es 500 kg, ¿cuál es la probabilidad de que el peso total de las cajas exceda la capacidad de la camioneta?
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
151
Cole
cción
1
Para tal propósito, suponga que cada vez que la capacidad de la camioneta es excedida, una caja es enviada por otra compañía de transporte a un costo de $150/caja. También suponga que el costo anual equivalente de una nueva camioneta es $160.000. Si se trabajan 260 días al año, ¿cuál de las alternativas mencionadas es la más atractiva?
A continuación se presenta la macro para generar variables trapezoidales.
Procedimiento 4.11. Macro para generar variables trapezoidales del ejemplo 4.7
Sub Trapeizodal2()Dim a As Integer, b As Integer, c As Integer, d As IntegerDim cont, peso, cor As Integer, suma As Double, x(2000) As DoubleDim sum, prob As Double, Costc As CurrencyDim CT As Currency, costo As CurrencyDim N As Variant, K As Integer, DH As IntegerActiveWindow.DisplayGridlines = FalseRange(“A7:K2000”).ClearContentsRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Generacion de Variables Trapezoidales “Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Valor de a”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Valor de b”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Valor de c”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Valor de d”Range(“A6”).Select: ActiveCell.FormulaR1C1 = “Número de Corridas”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Peso generado de las cajas”Range(“C6”).Select: ActiveCell.FormulaR1C1 = “¿Se Excede a la Capacidad del Camión?”Range(“D6”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range(“D7”).Select: ActiveCell.FormulaR1C1 = “Costo por Utilizar otra Compañía ($)”Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Costo por Utilizar Camioneta Nueva ($)”Range(“D9”).Select: ActiveCell.FormulaR1C1 = “La mejor alternativa”Range(“A1:C1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True
152
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithK = InputBox(“Digite el número de cajas a transportar”): Cells(1, 4).Value = Kcor = InputBox(“Digitar el número de corridas”)peso = InputBox(“Introducir el peso de la Camioneta”): Cells(1, 5).Value = pesocosto = InputBox(“Introducir el costo por caja”): Cells(1, 6).Value = costoDH = InputBox(“introducir los días hábiles”): Cells(1, 7).Value = DHCostc = InputBox(“Digitar el costo de la Camioneta Nueva”): Cells(8, 5).Value = CostcRange(“A2:B5,D6:E9,A6:C” & (cor + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange(“A2:A5,A6:C6,D6:D9”).SelectSelection.Interior.ColorIndex = 44a = InputBox(“Digitar el valor de a”): Cells(2, 2).Value = ab = InputBox(“Digitar el valor de b”): Cells(3, 2).Value = bc = InputBox(“Digitar el valor de c”): Cells(4, 2).Value = cd = InputBox(“Digitar el valor de d”): Cells(5, 2).Value = dRange(“B7:C26”).ClearContentspeso = Cells(1, 5).ValueFor i = 1 To corCells(i + 6, 1).Value = isum = 0For j = 1 To KR = Rndx(j) = TRAPEZOIDAL(R, a, b, c, d)sum = sum + x(j)Next jCells(i + 6, 2).Value = sumCells(i + 6, 2).NumberFormat = “0.00”If (sum > peso) ThenCells(i + 6, 3) = “SI”cont = 1suma = suma + cont
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
153
Cole
cción
1
ElseCells(i + 6, 3) = "NO"End IfNext iprob = (suma / cor): Cells(6, 5).Value = probCells(6, 5).NumberFormat = "0.00%"CT = (costo * DH * suma): Cells(7, 5).Value = CTIf CT > Cells(8, 5).Value ThenCells(9, 5) = "CAMIONETA NUEVA"ElseCells(9, 5) = "TRANSPORTE DE OTRA COMPAÑIA"End IfRange("A1").SelectEnd Sub
Function TRAPEZOIDAL(N As Variant, a As Integer, b As Integer, c As Integer, d As Integer) As DoubleDim RO1, RO2 As DoubleIf N <= (b - a) / (d + c - a - b) ThenRO1 = (d + c - a - b) * (b - a) * NTRAPEZOIDAL = a + Sqr(RO1)ElseIf N > ((b - a) / (d + c - a - b)) And R <= ((2 * c - a - b) / (d + c - a - b)) ThenTRAPEZOIDAL = 0.5 * ((d + c - a - b) * N + a + b)ElseRO2 = (d + c - a - b) * (d - c) * (1 - N)TRAPEZOIDAL = d - Sqr(RO2)End IfEnd Function
Método de convolución
En ocasiones no es posible aplicar el método de la transformada inversa a distribucio-nes de probabilidad, debido principalmente a que algunas de ellas no tienen forma de integrarse, como el caso de la distribución normal, Gamma, Erlang, etcétera. En tal caso, se requiere la aplicación de algunas propiedades estadísticas como el teorema de límite central o la propiedad de convolución, que permiten generar una distribución mediante
154
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
la suma de distribuciones más sencillas, mediante la transformada z , etcétera. Estos son procedimientos especiales para lograr expresiones matemáticas que generen las varia-bles aleatorias deseadas. A continuación se presentan algunas de las expresiones más utilizadas en la simulación de sistemas de manufactura para generar variables aleatorias.
Generación de variables aleatorias mediante la distribución Erlang
La distribución Erlang tiene la siguiente función de densidad:
Λ = parámetro de escalaa = valor mínimo de la variable de la variablen = parámetro de forma (número de sucesos que se cuentan)
media =
varianza =
Por consiguiente, para generar variables aleatorias que siguen una distribución de probabilidad de Erlang, se necesita solamente sumar los valores simulados de k variables aleatorias exponenciales con media de 1 / λ.
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
155
Cole
cción
1
Cuando a = 0, la distribución Erlang tiene la siguiente función de densidad:
Λ = parámetro de escalak = parámetro de forma (número de sucesos que se cuentan)E(x) = media de la exponencial
Por consiguiente, para generar variables aleatorias que siguen una distribución de proba-bilidad de Erlang, se necesita solamente sumar los valores simulados de k variables aleatorias exponenciales con media 1 / λ
Generación de variables aleatorias mediante macro de Excel sin el valor mínimo
Para crear una macro que genere variables aleatorias de tipo Erlang, se parte de un ejemplo con los siguientes datos:
a. El parámetro de escala es 2.b. El valor del parámetro de forma 4.c. Se genera la variable aleatoria mediante dos funciones: Ln (logaritmo natural) y
el de Erlang.
156
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 4.12. Macro para generar variables de tipo Erlang sin el valor mínimo
Sub GenerarvariablesErlang ()Dim x As Double, M As Double, n As Integer, k As Integer, promedio As DoubleDim rep As Integer, lamb As IntegerLimpiarActiveWindow.DisplayGridlines = FalseCells. SelectWith Selection . Font. Bold = True . HorizontalAlignment = xlCenter . Vertical Alignment = xlBottom . WrapText = TrueEnd Withn = InputBox (“Digite el número de corridas:”): Cells (1, 1). Value = nrep = InputBox (“Digite el número de réplicas:”)k = InputBox (“Introduzca el valor del parámetro de forma(K):”): Cells (n + 9, 4). Value = klamb = InputBox (“Introduzca el valor del parámetro de escala(Lambda):”): Cells (n + 10, 4). Value = lambRange (“B8:D8, G8:H8”). Select: Selection. Interior. ColorIndex = 24Range (“B9: D” & (n + 8)). Select: Selection. Interior. ColorIndex = 19Range (“G9:H” & (k + 8)). Select: Selection. Interior. ColorIndex = 19Range(“B8”). Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”). Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”). Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”). Select: ActiveCell.FormulaR1C1 = “Replica Num.”Range(“H8”). Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range (Cells (n + 9, 3), Cells (n + 12, 4)). Select: Selection. Interior. ColorIndex = 20Range (Cells (rep + 9, 7), Cells (rep + 11, 8)). Select: Selection. Interior. ColorIndex = 20Range (“C” & (n + 9)). Select: ActiveCell.FormulaR1C1 = “Parámetro de forma”Range (“C” & (n + 10)). Select: ActiveCell.FormulaR1C1 = “Parámetro de escala”Range (“C” & (n + 11)). Select: ActiveCell.FormulaR1C1 = “La media”Range (“C” & (n + 12)). Select: ActiveCell.FormulaR1C1 = “La varianza”Range (“G” & (rep + 9)). Select: ActiveCell.FormulaR1C1 = “Promedio”Range (“G” & (rep + 10)). Select: ActiveCell.FormulaR1C1 = “Varianza”Range (“G” & (rep + 11)). Select: ActiveCell.FormulaR1C1 = “Desviación Estandar”For i = 1 To rep For j = 1 To n Cells (j + 8, 2) = j R = Rnd: Cells (j + 8, 3) = R
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
157
Cole
cción
1
x = Erlang (k, lambda): Cells (j + 8, 4). Value = x Next j Cells (i + 8, 7) = i Cells (n + 9, 4). Value = k: Cells (n + 10, 4). Value = lambda Cells (n + 11, 4). Value = k / lambda: Cells (n + 12, 4). Value = k / ((lambda) ^ 2) promedio = Application. Average (Range (“D9: D” & (n + 8))): Cells (i + 8, 8) = promedioNext iCells (rep + 9, 8). Value = Application. Average (Range (“H9:H” & (k + 8)))Cells (rep + 10, 8). Value = Application.Var(Range (“H9:H” & (k + 8)))Cells (rep + 11, 8). Value = Application.StDev(Range (“H9:H” & (k + 8)))Cells (1, 1). SelectEnd Sub
Function Ln (x As Double) As DoubleLn = Excel.WorksheetFunction. Ln(x)End Function
Function Erlang (k As Integer, lamb As Integer) As DoubleY = 0R = RndM = (k / lamb)For Z = 1 To kY = Y + Ln (1 - R)Next ZErlang = (-1) * M * YEnd Function
Generación de variables aleatorias mediante macro de Excel con el valor mínimo
Para crear una macro que genere variables aleatorias de tipo Erlang, se parte de un ejemplo con los siguientes datos:
a. El parámetro de escala es 2.b. El valor del parámetro de forma 5.c. El valor mínimo es 1.
158
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 4.13. Macro para generar variables de tipo Erlang con valor mínimo
Sub GenerarvariablesErlang2()Dim x As Double, M As Double, n As Integer, k As Integer, promedio As DoubleDim rep As Integer, lamb As Integer, a As DoubleLimpiarActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection . Font.Bold = True . HorizontalAlignment = xlCenter . VerticalAlignment = xlCenter .WrapText = TrueEnd Withn = InputBox (“Digite el número de corridas:”): Cells (1, 1). Value = nrep = InputBox (“Digite el número de réplicas:”)k = InputBox (“Introduzca el valor del parámetro de forma(K):”): Cells (n + 9, 4). Value = klamb = InputBox (“Introduzca el valor del parámetro de escala(Lambda):”): Cells (n + 10, 4). Value = lamba = InputBox (“Digite el valor mínimo:”): Cells (n + 11, 4). Value = aRange (“B8:D8, G8:H8”). Select: Selection. Interior. ColorIndex = 24Range (“B9: D” & (n + 8)). Select: Selection. Interior. ColorIndex = 19Range (“G9:H” & (k + 8)). Select: Selection. Interior. ColorIndex = 19Range(“B8”). Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“C8”). Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“D8”). Select: ActiveCell.FormulaR1C1 = “Variable aleatoria”Range (“G8”). Select: ActiveCell.FormulaR1C1 = “Replica Num.”Range(“H8”). Select: ActiveCell.FormulaR1C1 = “Promedio de variable”Range (Cells (n + 9, 3), Cells (n + 13, 4)). Select: Selection. Interior. ColorIndex = 20Range (Cells (rep + 9, 7), Cells (rep + 11, 8)). Select: Selection. Interior. ColorIndex = 20Range (“C” & (n + 9)). Select: ActiveCell.FormulaR1C1 = “Parámetro de forma”Range (“C” & (n + 10)). Select: ActiveCell.FormulaR1C1 = “Parámetro de escala”Range (“C” & (n + 11)). Select: ActiveCell.FormulaR1C1 = “Valor mínimo”Range (“C” & (n + 12)). Select: ActiveCell.FormulaR1C1 = “La media”Range (“C” & (n + 13)). Select: ActiveCell.FormulaR1C1 = “La varianza”Range (“G” & (rep + 9)). Select: ActiveCell.FormulaR1C1 = “Promedio”Range (“G” & (rep + 10)). Select: ActiveCell.FormulaR1C1 = “Varianza”Range (“G” & (rep + 11)). Select: ActiveCell.FormulaR1C1 = “Desviación Estandar”For i = 1 To rep For j = 1 To n
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
159
Cole
cción
1
Cells (j + 8, 2) = j R = Rnd: Cells (j + 8, 3) = R x = Erlang (k, lamb, a): Cells (j + 8, 4). Value = x Next j Cells (i + 8, 7) = i Cells (n + 9, 4). Value = k: Cells (n + 10, 4). Value = lamb Cells (n + 11, 4). Value = a Cells (n + 12, 4). Value = (k / lambda) + a Cells (n + 13, 4). Value = k / ((lambda) ^ 2) promedio = Application. Average (Range (“D9: D” & (n + 8))): Cells (i + 8, 8) = promedioNext iCells (rep + 9, 8). Value = Application. Average (Range (“H9:H” & (k + 8)))Cells (rep + 10, 8). Value = Application.Var(Range (“H9:H” & (k + 8)))Cells (rep + 11, 8). Value = Application.StDev(Range (“H9:H” & (k + 8)))Cells (1, 1). SelectEnd Sub
Function Ln (x As Double) As DoubleLn = Excel.WorksheetFunction. Ln(x)End Function
Function Erlang (k As Integer, lamb As Integer, a As Double) As DoubleY = 0R = RndM = (k / lamb)For Z = 1 To kY = Y + Ln (1 - R)Next ZErlang = (-1) * M * Y + lambda * (a)End Function
Generación de variables aleatorias mediante la distribución Gamma
Si en la función de densidad de la variable con distribución de Erlang se hace que el parámetro k, en lugar de ser un número natural, sea un número real positivo, se obtiene la función de densidad de la variable aleatoria denominada Gamma.
160
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
La función de densidad de Gamma está descrita mediante:
a = valor mínimo de la variableα = parámetro de forma (α ≥ 0)β = parámetro de escala (β ≥ 0)Γ(α) = función Gamma del parámetro de forma
La función de distribución acumulativa será:
La función de densidad de probabilidad de Gamma sin el valor mínimo está dada por:
α = parámetro de forma (α ≥ 0)β = parámetro de escala (β ≥ 0)Γ(α) = función Gamma del parámetro de forma
Por consiguiente, para generar variables aleatorias que siguen una distribución de probabilidad de Gamma, se necesita solamente sumar los valores simulados de n variables aleatorias exponenciales con media 1 / λ. se presume que β =1/λ. Por tanto, el generador de la variable aleatoria de tipo gamma es:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
161
Cole
cción
1
Generación de variables aleatorias mediante macro de Excel sin el valor mínimo
Para crear una macro que genere variables aleatorias de tipo Gamma, se parte de un ejemplo con los siguientes datos:
a. El parámetro de escala es 2.b. El valor del parámetro de forma 9.c. Se genera la variable mediante la instrucción application.GammaInv(R,alfa,beta).
Procedimiento 4.14. Macro para generar variables de tipo Gamma sin el valor mínimo
Sub Gamma1()Dim x As Double, M As Double, n As Integer, k As Integer, promedio As Double Dim alfa As Integer, beta As Integer Limpiar ActiveWindow.DisplayGridlines = False Range(“A1:D200”).Select With Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd With n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nalfa = InputBox(“Introduzca el valor del parámetro de forma(alfa):”): Cells(n + 3, 3).Value = alfabeta = InputBox(“Introduzca el valor del parámetro de escala(beta):”): Cells(n + 4, 3).Value = betaRange(“B3”).SelectActiveCell.FormulaR1C1 = “Número de corridas”Range(“C3”).SelectActiveCell.FormulaR1C1 = “Variables de tipo gamma”Range(“B3:C3”).SelectSelection.Borders(xlEdgeTop).Weight = xlMediumSelection.Borders(xlEdgeBottom).Weight = xlMediumSelection.Interior.ColorIndex = 46Range(Cells(4, 2), Cells(n + 3, 3)).SelectSelection.Interior.ColorIndex = 6Range(Cells(n + 4, 2), Cells(n + 7, 3)).SelectSelection.Interior.ColorIndex = 20
162
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range("B" & (n + 4)).Select ActiveCell.FormulaR1C1 = "Parámetro de forma" Range("B" & (n + 5)).Select ActiveCell.FormulaR1C1 = "Parámetro de escala" Range("B" & (n + 6)).Select ActiveCell.FormulaR1C1 = "La media" Range("B" & (n + 7)).Select ActiveCell.FormulaR1C1 = "La varianza" Range(Cells(n + 4, 2), Cells(n + 7, 3)).SelectFor j = 1 To n Cells(j + 3, 2) = j R = Rnd x = Application.WorksheetFunction.GammaInv(R, alfa, beta) Cells(j + 3, 3).Value = xNext jCells(n + 4, 3).Value = alfaCells(n + 5, 3).Value = betaCells(n + 6, 3).Value = alfa * betaCells(n + 7, 3).Value = alfa * ((beta) ^ 2)Range("A1").SelectEnd Sub
Generación de variables aleatorias mediante la distribución Beta
La distribución Beta tiene la siguiente función de densidad:
α = parámetro de forma más bajoβ = parámetro de forma más altoa = valor mínimo de la variableb = valor máximo de la variable
La función de distribución acumulativa será:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
163
Cole
cción
1
Generación de variables aleatorias a través de macro de Excel con valor mínimo y valor máximo
Para crear una macro que genere variables aleatorias de tipo Beta, se parte de un ejemplo con los siguientes datos:
a. El valor de Alfa es 8.b. El valor de Beta es 10.c. El valor mínimo es 1.d. El valor máximo es 3. e. Se genera la variable mediante la instrucción application.betaInv(R,alfa,beta,a,b).
Procedimiento 4.15. Macro para generar variables de tipo Beta con valor mínimo y valor máximo
Sub Beta1()Dim x As Double, M As Double, n As Integer, k As Integer, promedio As DoubleDim alfa As Integer, beta As Integer, a As Integer, b As IntegerLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nalfa = InputBox(“Introduzca el valor de alfa:”): Cells(n + 4, 3).Value = alfabeta = InputBox(“Introduzca el valor de beta:”): Cells(n + 5, 3).Value = betaa = InputBox(“Introduzca el límite inferior (a):”): Cells(n + 6, 3).Value = ab = InputBox(“Introduzca el límite superior (b):”): Cells(n + 7, 3).Value = bRange(“A1:D200”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange(“B3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Variables de tipo beta”Range(“B3:C3”).SelectWith Selection
164
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Interior.ColorIndex = 46 .ReadingOrder = xlContext .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium End WithRange(Cells(3, 2), Cells(n + 9, 3)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(Cells(4, 2), Cells(n + 3, 3)).Select: Selection.Interior.ColorIndex = 6Range(Cells(n + 4, 2), Cells(n + 9, 3)).Select: Selection.Interior.ColorIndex = 20 Range("B" & (n + 4)).Select: ActiveCell.FormulaR1C1 = "Alfa" Range("B" & (n + 5)).Select: ActiveCell.FormulaR1C1 = "beta" Range("B" & (n + 6)).Select: ActiveCell.FormulaR1C1 = "límite inferior" Range("B" & (n + 7)).Select: ActiveCell.FormulaR1C1 = "límite superior" Range("B" & (n + 8)).Select: ActiveCell.FormulaR1C1 = "La media" Range("B" & (n + 9)).Select: ActiveCell.FormulaR1C1 = "La varianza"For j = 1 To n Cells(j + 3, 2) = j R = Rnd x = Application.BetaInv(R, alfa, beta, a, b) Cells(j + 3, 3).Value = xNext jCells(n + 8, 3).Value = (b - a) * (alfa / (alfa + beta)) + aCells(n + 9, 3).Value = ((b - a) ^ 2) * ((alfa * beta) / ((alfa + beta) ^ 2) * (alfa + beta + 1))Range("A1").SelectEnd Sub
Cuando a = 0 y b = 1, la distribución Beta tendría la siguiente función de densidad de probabilidad:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
165
Cole
cción
1
La obtención de valores generados de una variable aleatoria Beta de parámetro α y β es sencilla, ya que si X1 y X2 son variables aleatorias con distribuciones Gamma de parámetros (n, α) y (n, β), respectivamente, entonces se comprueba que la variable aleatoria obtenida de la siguiente:
Sigue una distribución beta de parámetros α y β; por tanto, para generar valores de una variable aleatoria Beta, no hay más que generar un valor de X1 de una variable aleatoria Gamma de parámetros (n, α) y un valor X2 de una variable aleatoria Gamma de parámetros (n, β), siendo:
La fórmula anterior es el generador de variables aleatorias de tipo beta con paráme-tros α y β.
Ejemplo 4.9
Control de calidad. Considérese la fabricación de determinado tipo de piezas, y supón-gase que estas se producen en lotes de 5.000. A fin de recoger información acerca de la calidad con la que se está produciendo, se examinan 10 piezas y, si el número de defectuosas es menor o igual a 1, se considera el lote como aceptable; en caso contrario se rechaza. Se supone que hay un costo por pieza inspeccionada de $5 (se asumirá que una vez inspeccionadas las piezas, estas no son útiles). Si un lote se rechaza, se elimina completamente a un costo de $6 por pieza. Por otra parte, si se acepta un lote y este posteriormente resulta ser defectuoso, se ocasiona un costo de $40 por pieza defectuosa.
166
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Finalmente, se hace la suposición de que la proporción, X, de unidades defectuosas por lote es una variable aleatoria con distribución Beta de parámetros α = 3 y β = 32.
Procedimiento 4.16. Macro para realizar un control de calidad
Sub Calidad()Dim M As Integer, C1 As Currency, C2 As Currency, logn, logn2 As DoubleDim C3 As Currency, A As Integer, B As Integer, V As Integer, R(2000) As DoubleDim x(2000) As Double, N As Integer, X1 As Double, X2 As DoubleActiveWindow.DisplayGridlines = FalseLimpiarborrarRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Simulacion de Calidad”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de Datos”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Costo Unitarios de articulos Defectuosos “Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Costo Unitario de Inspección”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Tamaño de la Muestra”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Costo Unitario de Rechazo”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Valor del Parámetro Alfa”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Número de Aceptación”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Valor del Parámetro Beta”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Números de lotes”Range(“B4”).Select: ActiveCell.FormulaR1C1 = “Proporcion de Piezas Defectuosas”Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Estado del Lote”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Costo de Inspección del Lote”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Costo de Rechazo del Lote”Range(“F4”).Select: ActiveCell.FormulaR1C1 = “Costo de Aceptacion del Lote”Range(“G4”).Select: ActiveCell.FormulaR1C1 = “Costo Total”Range(“A1:H1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithM = InputBox(“Número de lotes:”): Cells(2, 2).Value = MRange(“A2:H3,A4:G” & (M + 4)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
167
Cole
cción
1
.Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange(“A2:A3,C2:C3,E2:E3,G2:G3”).SelectSelection.Interior.ColorIndex = 44Range(“A4:G4”).SelectSelection.Interior.ColorIndex = 6C1 = InputBox(“Digite el Costo Unitario de articulos defectuosos que entran en la linea de Montaje”)Cells(3, 2).Value = C1 : C2 = InputBox(“Digite el Costo Unitario de Inspección”)Cells(2, 4).Value = C2 : C3 = InputBox(“Digite el Costo Unitario de Rechazo”)Cells(2, 6).Value = C3 : N = InputBox(“Digite el Tamaño de la Muestra”)Cells(3, 4).Value = N : A = InputBox(“Digite el Valor del Parámetro Alfa”)Cells(3, 6).Value = A : B = InputBox(“Digite el Valor del Parámetro Beta”)Cells(3, 8).Value = B : T = InputBox(“Digite la cantidad de lote de produccion”)Cells(2, 9).Value = TV = InputBox(“Digite el Número de Aceptación”): Cells(2, 8).Value = VFor k = 1 To MCells(k + 4, 1).Value = kD = 0: X1 = 0 For i = 1 To A R1 = Rnd: logn = Application.WorksheetFunction.Ln(1 - R1): X1 = (-1) * logn + X1 Next i X2 = 0 For j = 1 To B R2 = Rnd: logn2 = Application.WorksheetFunction.Ln(1 - R2): X2 = (-1) * logn2 + X2 Next j x(i) = X1 / (X1 + X2): Cells(k + 4, 2).Value = x(i): Cells(k + 4, 2).NumberFormat = “0.0000” For i = 1 To N R(i) = Rnd If (R(i) > x(i)) Then D = 0 Else D = D + 1 End If Next i C1 = Cells(3, 2).Value: C2 = Cells(2, 4).Value: C3 = Cells(2, 6).Value
168
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
T = Cells(2, 9).Value: N = Cells(3, 4).ValueIf (D > V) ThenCells(k + 4, 3) = "Rechazo": Cells(k + 4, 4).Value = C1 * NCells(k + 4, 5).Value = C2 * (T - N): Cells(k + 4, 6).Value = 0Cells(k + 4, 7).Value = Cells(k + 4, 4).Value + Cells(k + 4, 5).ValueElseCells(k + 4, 3) = "Aceptable": Cells(k + 4, 4).Value = C2 * Nx(k) = Cells(k + 4, 2).ValueCells(k + 4, 5).Value = 0: Cells(k + 4, 6).Value = C1 * x(k) * (T - N)Cells(k + 4, 6).NumberFormat = "$#,##0.00"Cells(k + 4, 7).Value = Cells(k + 4, 4).Value + Cells(k + 4, 6).ValueEnd IfNext kRange("A2").SelectEnd Sub
Generación de variables aleatorias mediante la distribución normal
En este apartado se desarrollará un procedimiento adicional para simular variables aleatorias con distribución normal.
Simulación de variables aleatorias normales a través del teorema de límite central
Inicialmente, conviene recordar que el teorema de límite central afirma que si X1,. . . . . Xn son variables aleatorias independientes e idénticamente distribuidas con E(X) = M y V(X) = V, para todo i = 1,….., n, entonces para cualquier número real x se tiene:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
169
Cole
cción
1
Donde:
De lo anteriormente expuesto se deduce que una forma de generar valores de una variable aleatoria con distribución normal de media cero y varianza uno será generar n valores independientes de n variables aleatorias uniforme en el intervalo (0, 1), R1,. . . ., Rn y asignar como valor simulado de la variable aleatoria normal de media igual a 0 y varianza igual a 1:
Sustituyendo Z, se tiene:
En la práctica suele admitirse, aunque depende del problema que se esté abordando, que es suficiente con tomar K = 12. En consecuencia,
x = la variable aleatoria por simular con distribución normal
µ = la media de la distribución de probabilidad normal
σ = la desviación estándar de la distribución de probabildad normal
170
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de variables aleatorias con distribución normal mediante macro de Excel
Para generar variables con distribución a través de una macro, se debe tener en cuenta:a. La media es 20.b. La desviación estándar es 4.c. X = variable normal por generar.d. M = valor de media de la distribución normal.e. Desv = valor de la desviación estándar de la distribución normal.
Procedimiento 4.17. Macro para generar variables con distribución normal
Sub Normal1()Dim x As Double, M As Double, n As Integer, k As Integer, Desv As DoubleLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nM = InputBox(“Introduzca la media:”): Cells(n + 4, 3).Value = MDesv = InputBox(“Introduzca la desviación estándar:”): Cells(n + 5, 3).Value = DesvRange(“B3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Variables de tipo normal”Cells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange(“B3:C3”).Select With Selection .Interior.ColorIndex = 46 .ReadingOrder = xlContext .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
171
Cole
cción
1
.Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium End WithRange(Cells(4, 2), Cells(n + 3, 3)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(Cells(n + 4, 2), Cells(n + 5, 3)).SelectSelection.Interior.ColorIndex = 20 Range("B" & (n + 4)).Select: ActiveCell.FormulaR1C1 = "La media" Range("B" & (n + 5)).Select: ActiveCell.FormulaR1C1 = "La desviación estándar" Range(Cells(n + 4, 2), Cells(n + 5, 3)).Select With Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithFor j = 1 To n Cells(j + 3, 2) = j k = 0 For i = 1 To 12 R = Rnd k = k + R Next i x = M + Desv * (k - 6) Cells(j + 3, 3).Value = xNext jRange("A1").SelectEnd Sub
172
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Otra forma de generar variables aleatorias con distribución normal por medio de macro de Excel
Para generar variables con distribución a través de una macro, se debe tener en cuenta:a. La media es 20.b. La desviación estándar es 4.c. X = variable normal por generar mediante la función estadística de Excel: Nor-
mInv (R,M,Desv).d. M = valor de media de la distribución normal.e. Desv = valor de la desviación estándar de la distribución normal.
El conjunto de instrucciones será:
For j = 1 To n Cells(j+3,2).Value = j R = Rnd X = Round(Application.Worksheetfunction.NormInv(R,M,Desv),3) Cells(j+3,3).Value = X Next j
Generación de variables aleatorias mediante la distribución lognormal
La distribución lognormal tiene la siguiente función de densidad:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
173
Cole
cción
1
Generación de variables aleatorias con distribución lognormal mediante macro de Excel
Para generar variables con distribución a través de una macro, se debe tener en cuenta:a. La media es 3,5.b. La desviación estándar es 0,5.c. X = variable normal por generar mediante la función estadística de Excel: LogInv
(R,M,Desv).d. M = valor de media de la distribución normal.e. Desv = valor de la desviación estándar de la distribución normal.
El conjunto de instrucciones será: For j = 1 To n Cells(j+3,2).Value = j R = Rnd X = Round(Application.Worksheetfunction.LogInv(R,M,Desv),3) Cells(j+3,3).Value = X Next j
Ejemplo 4.12
Simulación de proceso de fabricación de dos etapas en serie mediante el método de convolución. Un proceso de fabricación de una pieza consta de dos etapas: la primera tiene una distribución de t1 minutos y la segunda dura t2 minutos. Si t1 sigue una dis-tribución de probabilidad empírica como lo muestra la figura a y t2 una distribución de probabilidad empírica como la muestra también la figura b de la figura 4.2.
174
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 4.1. Gráfica de la distribución empírica para la variable t1 y t2
El tiempo que transcurre entre la llegada de la pieza a la estación de proceso de fabri-cación sigue una distribución exponencial con media de 3 minutos/pieza; el proceso está a cargo de un operario y el tiempo de tránsito de una etapa a la otra es de 0,5 minutos.
Determinar:a. El número promedio de piezas en el sistema (L).b. El número promedio de piezas en la cola (Lq).c. El tiempo promedio que espera una pieza en el sistema (W).d. El tiempo promedio que espera una pieza en la cola (Wq).e. El porcentaje de inactividad en las etapas (Po).
Para el desarrollo de este ejemplo se debe tener en cuenta lo siguiente:
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
175
Cole
cción
1
Figura 4.2. Generación de las funciones de densidad de probabildad de la variable t1
Generación de la variable t1
176
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 4.3. Generación de las funciones de densidad para variable t2
Generación de la variable t2
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
177
Cole
cción
1
Procedimiento 4.18. Macro para desarrollar proceso de dos etapas en serie
Sub EtapaProcesos()Dim M As Integer, TiempLlegada As Double, Medido As DoubleDim t1 As Double, t2 As Double, inicio, salida As Double, W, R, R1 As DoubleDim Wq As Double, sumat, sumat1, sumat2 As Double, K As Integer, x As IntegerDATOSINICIALESK = Cells(1, 13).ValueM = InputBox(“Digite el tiempo medio de llegada:”): Cells(1, 2).Value = Mtransito = InputBox(“Digite el tiempo de transito entre procesos:”)Sum = 0For i = 1 To KR = Rnd: R1 = Application.WorksheetFunction.Ln(1 - R)TiempLlegada = (-1) * M * R1: Cells(i + 3, 2).Value = TiempLlegadaCells(4, 4).Value = Cells(4, 2).ValueSum = Sum + TiempLlegada: Cells(i + 3, 3).Value = SumNext iFor i = 1 To Kinicio = Cells(i + 3, 4).Valuet1 = Etapa1: Cells(i + 3, 5).Value = t1t2 = Etapa2: Cells(i + 3, 7).Value = t2Cells(i + 3, 6).Value = transitosalida = inicio + t1 + transito + t2: Cells(i + 3, 8).Value = salidainicio = Application.WorksheetFunction.Max(Cells(i + 4, 3).Value, Cells(i + 3, 8).Value)Cells(i + 4, 4).Value = inicio: Medido = Cells(i + 3, 3).ValueW = salida - Medido: Cells(i + 3, 9).Value = WWq = salida - Medido - (t1 + t2): Cells(i + 3, 10).Value = Wq For x = 4 To 10 Cells(K + 4, x).Value = “” Next xNext isumat1 = Application.WorksheetFunction.Sum(Cells(4, 5), Cells(K + 3, 5))sumat2 = Application.WorksheetFunction.Sum(Cells(4, 7), Cells(K + 3, 7))sumat = sumat1 + sumat2Cells(2, 4).Value = sumatCells(2, 6).Value = Application.WorksheetFunction.Sum(Cells(4, 10), Cells(K + 3, 10))Cells(2, 10).Value = Application.WorksheetFunction.Sum(Cells(4, 9), Cells(K + 3, 9))Cells(2, 8).Value = 100 * (Cells(2, 4).Value / (Application.WorksheetFunction.Max(Cells(4, 8), Cells(K + 3, 8))))
178
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(1, 6).Value = (Cells(2, 6).Value) / (Application.WorksheetFunction.Max(Cells(4, 8), Cells(K + 3, 8)))Cells(1, 4).Value = (Cells(2, 10).Value) / (Application.WorksheetFunction.Max(Cells(4, 8), Cells(K + 3, 8)))Cells(1, 10).Value = (Application.WorksheetFunction.Average(Cells(4, 10), Cells(K + 3, 10)))Cells(1, 8).Value = (Application.WorksheetFunction.Average(Cells(4, 10), Cells(K + 3, 10)))Cells(2, 2).Value = (1 - (Cells(2, 4).Value)) / (Application.WorksheetFunction.Max(Cells(4, 8), Cells(K + 3, 8)))End Sub
Function Etapa1() As DoubleDim RO1 As DoubleR1 = RndIf R1 <= 0.50 ThenRO1 = (9 / 4) - 4 * R1Etapa1 = (3/ 2) - Sqr(RO1)Elseif R1 > 0.50 and R1 <=0.75 thenEtapa1 = 4 * R1 – 1ElseEtapa1 = 0End IfEnd Function
Function Etapa2() As DoubleDim RO2, RO3 As DoubleR2 = RndIf R2 <= 0.25 ThenEtapa2 = 4 * R2ElseIf R2 > 0.25 And R2 <= 0.50 ThenRO2 = 2*R2 - (7/ 16)Etapa2 = (3 / 4) + Sqr(RO2)Elseif R2 >0.50 and R2 <=0.75 thenRO3 = (45/16) -2*R2Etapa2 = (9 / 4) + Sqr(RO3)ElseEtapa2 = = 4*R2 -1End IfEnd Function
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
179
Cole
cción
1
Sub DATOSINICIALES()Dim K As IntegerActiveWindow.DisplayGridlines = FalseRange(“A1:N2000”).ClearContentsRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de Llegadas”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de Inactividad(Po)”Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Número Promedio de Piezas en el Sistema (L)”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Suma de los Tiempo de Procesos”Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Número Promedio de Piezas en la Cola (Lq)”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Suma de los Tiempos de Espera en la Cola”Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Tiempo Promedio de Espera de una Pieza en el sistema(W)”Range (“G2”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de Utilización (%)”Range(“I1”).Select: ActiveCell.FormulaR1C1 = “Tiempo Promedio de Espera de una Pieza en la Cola(Wq)”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Suma de los Tiempo de Espera en el Sistema”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Piezas”Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Tiempo entre Llegadas”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegada”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio en la Etapa 1 (Min)”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de proceso en la Etapa 1 (Min)”Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Tránsito (Min)”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de proceso en la Etapa 2 (Min)”Range(“H3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Salida de los Procesos (Min)”Range(“I3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Espera en el Sistema (Min)”Range(“J3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Espera en la Cola (Min)”Range(“A1:J2”).SelectSelection.RowHeight = 126K = InputBox(“Digite el número de Piezas:”)Cells(1, 13).Value = KRange(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A1:J” & (K + 3)).Select
180
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("A1:A2,C1:C2,E1:E2,G1:G2,I1:I2").SelectSelection.Interior.ColorIndex = 44Range("A3:J3").SelectSelection.Interior.ColorIndex = 6End Sub
Ejercicios
1. En un centro de torneado llegan las piezas con un tiempo promedio de 3 minutos con distribución exponencial. El tiempo de torneado es una variable aleatoria con distribución empírica que se indica a continuación, de acuerdo con el siguiente comportamiento:
¿Cuántas piezas se producirán en una jornada laboral de 8 horas diarias?
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
181
Cole
cción
1
2. El tiempo de entrega en días que hace un proveedor de un lote determinado de artículos a un distribuidor es una variable aleatoria con distribución de probabi-lidad Beta (3, 5, 1, 5). El tiempo de entrega que hace el distribuidor a sus clientes también es una variable aleatoria con distribución de probabilidad empírica, como se muestra en la siguiente gráfica:
Simule hasta 100 lotes para determinar la probabilidad de que el proveedor incumpla con el pedido generando faltantes.
3. En una planta de manufactura se procesa un producto codificado como A100, que es formado por el ensamblaje de tres componentes codificados, respectivamente, B200, C200 y D300. La función de densidad de probabilidad para el tiempo entre llegadas de B200 es una distribución exponencial con media de 15 minutos; esta componente se procesa en un torno cuyo tiempo es una variable aleatoria con distribución de probabilidad triangular T(3,5,7) minutos, la componente C200; el tiempo entre llegadas es una variable aleatoria con una distribución de probabilidad Erlang con media de 12 min y parámetro de forma k = 4, que es procesada en una fresa cuyo tiempo es una variable aleatoria con distribución de probabilidad normal, N(5, 0.3) minutos. En cambio, para la componente D300, su tiempo entre llegadas
182
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
también es una variable aleatoria con distribución Weibull, W (9,2,10), que pasa a ser procesada en un taladro cuyo tiempo de proceso es una variable aleatoria con distribución uniforme, U (3, 5) minutos. Estas tres componentes pasan a una mesa de ensamble, siendo su tiempo de ensamble una variable aleatoria con distribución exponencial con media de 5 minutos. Simule para producir 100 productos y deter-mine el tiempo promedio de espera de cada componente.
4. Una célula de manufactura está compuesta por un operario que atiende un torno CNC y dos bandas transportadoras. Esta célula está conformada para producir una pieza determinada. El tiempo entre llegadas de la pieza a la banda transportadora de entrada es una variable aleatoria con distribución exponencial con media de 25 min por cada pieza y se mueve a través de la banda. El operario recoge la pieza en la Banda_Entrada y la lleva al torno con las siguientes operaciones y sus respectivos tiempos:
• Situar la pieza en el torno y ponerla en funcionamiento, 1 minuto.• Torneado de la pieza, su tiempo de proceso según una distribución de probabi-
lidad Gamma G (2,9) minutos.• Descargar la pieza torneada, 2 minutos.• Al terminar la operación de torneado, el operario lleva la pieza a la banda
transportadora de salida, donde la pieza se mueve a través de la banda para su despacho.
• Simule una llegada de 100 piezas y determine el tiempo promedio que espera una pieza al ser procesado el factor de utilización del torno.
5. Una célula de manufactura está compuesta por un operario que atiende una cor-tadora automática (sierra mecánica) y dos tornos CNC idénticos. Esta célula está conformada para producir una pieza determinada. El tiempo de operación de cor-tado y torneado es una variable aleatoria que tiene una distribución de probabilidad
GENERACIÓN DE vARIABLES ALEATORIAS CONTINUAS
183
Cole
cción
1
exponencial con media 10 y 15 minutos, respectivamente, debido a la variabilidad de las dimensiones de la pieza.
El tiempo entre llegadas de la pieza a la recepción es también una variable aleatoria que tiene una distribución de probabilidad triangular T (15, 20,35) minutos. Simule una llegada de 100 piezas y determine el tiempo promedio que espera una pieza al ser procesada el factor de utilización de la sierra mecánica y los tornos.
6. Una pieza se produce en un sistema de cuatro máquinas agrupadas en serie; el tiempo entre llegadas de las piezas es una variable aleatoria con distribución expo-nencial con media de 10 minutos. El tiempo de tránsito de una máquina a otra es de un minuto y todos los tiempos de proceso son de tipo Erlang, con media que se mostrará en el siguiente cuadro y parámetro de forma k = 3. Hay un tipo de falla que consiste en atascamiento de la máquina y, por tanto, se usan las distribuciones exponenciales para los tiempos de funcionamiento y las distribuciones uniformes para los tiempos de reparaciones. Los datos para este sistema se presentan en la siguiente tabla (todos los tiempos están en minutos):
Número de la máquina
Medias de tiempo de proceso
Medias de falla con tiempo de funcionamiento Tiempo de reparación
1 8,5 475 (20,30)2 8,6 570 (25,35)3 8,3 665 (30,45)4 8,8 475 (20,30)
Simule las llegadas de 200 piezas para determinar el porcentaje de tiempo que cada máquina pasa en estado de falla y el promedio que espera una pieza para procesarse en cada máquina.
184
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
7. Si se define t como el tiempo que transcurre en minutos antes de que falle un torno, cuyo tiempo sigue una distribución de probabilidad de Pareto dada por :
Si t ≥ t0
El valor α = 4 y t0 = 250 minutos.
8. El tiempo de torneado dado en minutos es una variable aleatoria con distribución de probabilidad:
Si t ≥ 5
Simule 1000 piezas para observar el comportamiento del tiempo de funcionamiento del torno.
9. Una determinada empresa realiza sus planes de producción con una anticipación de 15 días, y que por cada unidad del producto que fabrica necesita una unidad de un tipo de materia prima. La solicitud de la materia prima la puede realizar en cualquiera de esos 15 días. Ahora bien, si se hace el pedido demasiado tarde y se retrasa la producción, hay una pérdida de $4.500 por año de retraso. Se supone que los pedidos están fijados en 500 unidades de materia prima. Si, por otra parte, el pedido llega demasiado pronto, hay un costo de mantenimiento de inventario estimado en $3 por unidad por año. El tiempo de espera en días, hasta que la fábrica sirve la materia prima, es una variable aleatoria con distribución de probabilidad Gamma con β = 205 y α = 5. La empresa tiene un especial interés en determinar la fecha en la que se debe realizar el pedido con vistas a tener un costo total mínimo.
Generación de variables aleatorias discretas
Las variables aleatorias discretas pueden servir para describir una variedad de fenómenos casuales en los cuales ocurre el conteo de enteros. El patrón de núme-ros de artículos defectuosos en un lote es uno de los ejemplos más utilizados.La
función de densidad de probabilidad se denotará por medio de p(x), donde F(x) es la función de distribución acumulativa, que se describe así:
F(x) = función de distribución acumulativa =
5
186
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Distribución probabilidad de Bernoulli
La función de densidad de probabilidad de la distribución de Bernoulli está dada por:
p = probabilidad de éxitoq = probabilidad de fracaso = 1 – plos valores de la variable x sona.) x = 0 si la probabilidad es 1-pb.) x = 1 si la probabilidad es ppara la función de probabilidad acumulativa se tiene
Para generar variables aleatorias binarias se tiene:
Ejemplo 5.1
Supóngase que una máquina produce una lote de piezas; la probabilidad de que pro-duzca lotes defectuosos es p = 0,20 (éxito) en un día. Simular 300 lotes (20 corridas y 15 réplicas):
La macro se realizará teniendo estos aspectos:a. Se evaluará mediante una condicional si el lote es rechazado o aceptado, luego se
contará la cantidad de lote rechazado mediante la función estadística “Countif ()”.b. Se calculará la probabilidad de que el lote sea rechazado durante 20 corridas
(número de lotes).c. Se determinará el promedio, la mediana, el valor máximo, el valor mínimo, la
varianza y la desviación estándar de las 15 réplicas.d. Cada réplica determinará la cantidad de lote rechazado por la generación del
número aleatorio (R).
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
187
Cole
cción
1
Procedimiento 5.1. Macro para generar variables aleatorias de tipo Bernoulli
Sub Bernoulli() Dim p, q As Double, prob As Double, n As Integer, k As Integer, prom As Double Dim b As Double, v As Double Limpiar ActiveWindow.DisplayGridlines = False Cells.Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Font.Bold = True End With n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n k = InputBox(“Digite el número de réplicas:”)inicio: p = InputBox(“Digite la probabilidad de éxito:”): Cells(1, 2).Value = p If p >= 1 Then MsgBox “La probabilidad de éxito no debe ser mayor o igual 1”, vbOKOnly, “! ERROR!” GoTo inicio Else q = 1 - p End IfRange(“A2:G2,D4:D9”).Select Selection.Borders(xlEdgeTop).Weight = xlMedium Selection.Borders(xlEdgeBottom).Weight = xlMedium Selection.Interior.ColorIndex = 46 Range(“A1”).Select: ActiveCell.FormulaR1C1 = “p=” Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Lote Rechazado” Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de lote” Range(“B2”).Select: ActiveCell.FormulaR1C1 = “Números de unidades defectuosas” Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Estado del lote” Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Número de lotes rechazados” Range (“E2”).Select: ActiveCell.FormulaR1C1 = “Prob. de Rechazos” Range (“F2”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.” Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Cantidad de lotes rechazados” Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Promedio” Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Mediana” Range(“D6”).Select: ActiveCell.FormulaR1C1 = “Valor Máximo”
188
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range("D7").Select: ActiveCell.FormulaR1C1 = "Valor mínimo" Range("D8").Select: ActiveCell.FormulaR1C1 = "varianza" Range ("D9").Select: ActiveCell.FormulaR1C1 = "Desv. Estándar"For i = 1 To k For j = 1 To n Cells(j + 2, 1) = j R = Rnd If R >= q Then x = 1: Cells(j + 2, 2).Value = x Cells(j + 2, 3) = "Lote Rechazado" Else x = 0: Cells(j + 2, 2).Value = x Cells(j + 2, 3) = "Lote Aceptado" End If Next j Cells(i + 2, 6).Value = i Cells(3, 4).Value = Application.WorksheetFunction.CountIf(Range(Cells(3, 3), Cells(n + 2, 3)), Cells(1, 3)) Cells(i + 2, 7).Value = Cells(3, 4).Value prob = (Cells(3, 4).Value) / n: Cells(3, 5).Value = probNext iCells(4, 5).Value = Application.Average(Range("G3:G" & (k + 2)))Cells(5, 5).Value = Application.Median(Range("G3:G" & (k + 2)))Cells(6, 5).Value = Application.Max(Range("G3:G" & (k + 2)))Cells(7, 5).Value = Application.Min(Range("G3:G" & (k + 2)))Cells(8, 5).Value = Application.Var(Range("G3:G" & (k + 2)))Cells(9, 5).Value = Application.StDev(Range("G3:G" & (k + 2)))Cells(1, 1).SelectEnd Sub
Distribución de probabilidad geométrica
La función de densidad de probabilidad de la distribución geométrica está dada por: p(x) = p.qx-1 ; x = 1,2,3,…..∞.p = probabilidad de éxito en una sola prueba.q = probabilidad de fracaso en una sola prueba = 1 – p.
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
189
Cole
cción
1
x = variable aleatoria que indica el número de pruebas independientes hasta la ocurrencia del primer éxito.F(x) = función de probabilidad acumulativa.R = número aleatorio.E(x) = media de la distribución geométrica.V(x) = varianza de la distribución geométrica.
Para generar variables aleatorias tenemos:
Ejemplo 5.2
Supóngase que una máquina produce una determinada pieza, la probabilidad de que produzca piezas defectuosas es p = 0,50; si un lote tiene 4 o más piezas defectuosas, se rechaza el lote; en caso contrario se acepta. Simular 300 lotes (20 corridas y 15 réplicas) para determinar:
1. El número de lotes rechazados.2. Probabilidad de que se rechace un lote.3. Número promedio de lotes rechazados.4. La mediana.5. Valores máximo y mínimo de lotes rechazados.6. Varianza y desviación estándar.
190
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Desarrollo:Se evaluará mediante una condicional si el lote es rechazado o aceptado; luego se
contará la cantidad de lote rechazado mediante la función estadística “Countif ()”. Se calculará la probabilidad de que el lote sea rechazado durante 20 corridas (número de lotes). Se determinará el promedio, la mediana, el valor máximo, el valor mínimo, la varianza y la desviación estándar de las 15 réplicas.
Para realizar la macro se debe tener en cuenta:1. Se creará una función de Excel llamada Ln (logaritmo natural) para generar la
variable aleatoria tipo geométrica (DE), que significa la variable de número de defectuosos.
2. Cada réplica determinará la cantidad de lote rechazado por la generación del número aleatorio (R).
Procedimiento 5.2. Macro para generar variables aleatorias de tipo geométrica
Sub Geometrica() Dim p, q As Double, prob As Double, N As Integer, k As Integer, prom As Double Dim b As Double, v As Double, DE As Integer, NU, D As Double Limpiar ActiveWindow.DisplayGridlines = False Cells.Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Font.Bold = True End With N = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = N k = InputBox(“Digite el número de réplicas:”)inicio: p = InputBox(“Digite la probabilidad de éxito:”): Cells(1, 2).Value = p If p >= 1 Then MsgBox “La probabilidad de éxito no debe ser mayor o igual 1”, vbOKOnly, “! ERROR!”
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
191
Cole
cción
1
GoTo inicio Else q = 1 - p End IfRange(“A2:G2,D4:D9”).Select Selection.Borders(xlEdgeTop).Weight = xlMedium Selection.Borders(xlEdgeBottom).Weight = xlMedium Selection.Interior.ColorIndex = 46 Range(“A1”).Select: ActiveCell.FormulaR1C1 = “p=” Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Lote Rechazado” Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de lote” Range(“B2”).Select: ActiveCell.FormulaR1C1 = “Números de unidades defectuosas” Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Estado del lote” Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Número de lotes rechazados” Range (“E2”).Select: ActiveCell.FormulaR1C1 = “Prob. de Rechazos” Range (“F2”).Select: ActiveCell.FormulaR1C1 = “Réplica Num.” Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Cantidad de lotes rechazados” Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Promedio” Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Mediana” Range(“D6”).Select: ActiveCell.FormulaR1C1 = “Valor Máximo” Range(“D7”).Select: ActiveCell.FormulaR1C1 = “Valor mínimo” Range(“D8”).Select: ActiveCell.FormulaR1C1 = “varianza” Range (“D9”).Select: ActiveCell.FormulaR1C1 = “Desv. Estándar”For i = 1 To k For j = 1 To N Cells(j + 2, 1) = j R = Rnd NU = Application.WorksheetFunction.Ln(R): D = Application.WorksheetFunction.Ln(q) DE = 1 + Int(NU / D): Cells(j + 2, 2).Value = DE If DE >= 4 Then Cells(j + 2, 3) = “Lote Rechazado” Else Cells(j + 2, 3) = “Lote Aceptado” End If Next j Cells(i + 2, 6).Value = i Cells(3, 4).Value = Application.WorksheetFunction.CountIf(Range(Cells(3, 3), Cells(N + 2, 3)), Cells(1, 3)) Cells(i + 2, 7).Value = Cells(3, 4).Value prob = (Cells(3, 4).Value) / N: Cells(3, 5).Value = prob
192
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Next iCells(4, 5).Value = Application.Average(Range("G3:G" & (k + 2)))Cells(5, 5).Value = Application.Median(Range("G3:G" & (k + 2)))Cells(6, 5).Value = Application.Max(Range("G3:G" & (k + 2)))Cells(7, 5).Value = Application.Min(Range("G3:G" & (k + 2)))Cells(8, 5).Value = Application.Var(Range("G3:G" & (k + 2)))Cells(9, 5).Value = Application.StDev(Range("G3:G" & (k + 2)))Cells(1, 1).SelectEnd Sub
Distribución de probabilidad binomial
Una distribución binomial existe cuando se satisfacen las siguientes condiciones:a. Se realiza un experimento n veces.b. Cada realización es independiente de los demás.c. El espacio de la prueba de cada experimento tiene dos elementos.
La función de densidad de probabilidad viene dada por:
Donde:x = número de éxitosn =número de ensayosp = probabilidad de éxitoq = probabilidad de fracaso
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
193
Cole
cción
1
Generación de variables aleatorias de tipo binomial
Método de convolución: La variable aleatoria binomial con parámetros n y p puede ser generada a través de la
suma de n variables con distribución Bernoulli: X = variable aleatoria binomial Xi = variable aleatoria de Bernoulli
X=
Generación de variables aleatorias por macro
La macro para generar variables aleatorias de tipo binomial se hará en dos formas:1. Método de convolución 2. Método de Montecarlo
Método de convolución:Este método se explica mediante el siguiente diagrama de flujo.
194
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 5.1. Diagrama de flujo para generar variables aleatorias binomiales
Método de Montecarlo:Este método primero calcula las probabilidades acumulativas mediante la función
Excel “BinomDist (x, n, p, 1)”, luego se generan variables aleatorias con la función “Vlookup ( )” de Excel.
Procedimiento 5.3. Macro para generar variables binomiales por el método de convolución
Sub Convolucion()Dim x As Integer, p As Double, n As IntegerActiveWindow.DisplayGridlines = FalseRange(“A7:K2000”).ClearContentsRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Probabilidad de Exito (p)=”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de Lotes”Range(“B2”).Select: ActiveCell.FormulaR1C1 = “Número de Unidades de defectuosas (convolución)”Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
195
Cole
cción
1
.Font.Name = "Arial" .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd Withlote = InputBox("Introduzca el número de lotes:")Range("A2:CB" & (lote + 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("A2:B2").SelectSelection.Interior.ColorIndex = 44n = InputBox("Digite el número de veces de experimentos"): Cells(1, 3).Value = nRange("A3:B" & (lote + 2)).ClearContentsinicio:p = InputBox("Digite el valor de p"): Cells(1, 2).Value = pIf (p > 1) ThenMsgBox "La probabilidad de éxito no debe ser mayor o igual que 1", vbOKOnly, "¡ERROR¡"GoTo inicioElseFor j = 1 To loteCells(j + 2, 1).Value = jSum = 0For K = 1 To nR = RndIf (R <= p) Thenx = 0Elsex = 1End IfSum = Sum + xNext KCells(j + 2, 2).Value = SumNext jEnd IfEnd Sub
196
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 5.4. Macro para generar variables binomiales por el método de Montecarlo
Sub Montecarlo()Dim Rango1 As Range, n As Integer, p As Double, x, exito As IntegerActiveWindow.DisplayGridlines = FalseRange(“D1:K2000”).ClearContentsRange(“D2”).Select: ActiveCell.FormulaR1C1 = “Número de Éxitos (X)”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Probabilidad Acumulativa”Range(“F2”).Select: ActiveCell.FormulaR1C1 = “Cota Inferior de la Probabilidad”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Cota Superior de la Probabilidad”Range(“H2”).Select: ActiveCell.FormulaR1C1 = “Número de Éxitos (X)”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Número de lotes”Range(“J2”).Select: ActiveCell.FormulaR1C1 = “Número de Unidades de defectuosas (montecarlo)”Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd Withlote = InputBox(“Introduzca el número de lotes:”)Range(“I2:J” & (lote + 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange(“D2:J2”).SelectSelection.Interior.ColorIndex = 44n = InputBox(“Digite el número de veces de experimentos”): Cells(1, 3).Value = nexito = InputBox(“Digite el Número de éxitos (X)”): Cells(1, 4).Value = exitoRange(“D2:H” & (exito + 2)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
197
Cole
cción
1
.Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithSet Rango1 = Worksheets(1).Range("$F$3:$H" & (exito + 2))inicio:p = InputBox("Digite el valor de p"): Cells(1, 2).Value = pIf (p > 1) ThenMsgBox "La probabilidad de éxito no debe ser mayor o igual que 1", vbOKOnly, "¡ERROR¡"GoTo inicioElseCells(3, 6).Value = 0For i = 1 To exitoCells(i + 2, 4).Value = i - 1Cells(i + 2, 8).Value = i - 1x = Cells(i + 2, 4).Valueb = Application.BinomDist(x, n, p, 1): Cells(i + 2, 5).Value = bCells(i + 2, 7).Value = Cells(i + 2, 5).ValueCells(i + 3, 6).Value = Cells(i + 2, 7).ValueCells(exito + 3, 6).Value = ""Next iEnd IfFor j = 1 To loteCells(j + 2, 9).Value = jR = RndCells(j + 2, 10).Value = Application.VLookup(R, Rango1, 3)Next jEnd Sub
198
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Distribución de probabilidad hipergeométrica
La función de densidad de probabilidad de la distribución hipergeométrica está dada por:
x = variable aleatoria que indica muestra de éxitosn = número de la muestraM = población éxitoN = número de la población
Seguidamente se describirá esta variable aleatoria en forma general. Para tal fin, considérese un lote que contiene N unidades de un determinado objeto, de los cuales hay M defectuosos (M ≤ N). Se eligen n objetos sin reemplazamientos (n ≤ N). La variable aleatoria que describe el número de unidades defectuosas recibe el nombre de hipergeométrica.
Generación de variables aleatorias de tipo hipergeométrica
Suponiendo que el muestreo ocurre en forma secuencial, es posible considerar el pro-cedimiento como una secuencia de pruebas de Bernoulli en las cuales la probabilidad de seleccionar un artículo con la característica (éxito) es una función del número que la tiene.
En la primera n pruebas, la probabilidad de éxito es M / N; si la primera prueba da como resultado un éxito, la probabilidad de éxito en la segunda prueba es (M – 1) / (N – 1). Si la primera prueba es un fracaso, la probabilidad de éxito en la segunda prueba
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
199
Cole
cción
1
es M / (N – 1). En la prueba r-ésima la probabilidad de éxito es (M – q) / (N – r +1), q es el número de éxitos en r – 1 pruebas anteriores.
Generación de variables aleatorias de tipo hipergeométrica por macro
La macro para generar variables aleatorias de tipo hipergeométrica se hará mediante el método de convolucion. Este método se explica mediante el siguiente diagrama de flujo.
Figura 5.2. Diagrama para generar variables aleatorias de tipo hipergeométrico
200
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 5.5. Macro para generar variables de tipo
hipergeométrica por el método de convolución
Sub Hipergeom1()Dim N As Integer, M As Integer, p As Double, R As Double, Prob As DoubleActiveWindow.DisplayGridlines = FalseRange(“A1:K2000”).ClearContentsK = InputBox(“Digite el Número de Población N:”): Cells(1, 2).Value = KRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Número de la Población”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de la Muestra”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Número de la Población Éxito”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Número de Aceptables”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Probabilidad de Aceptable”Range(“A6”).Select: ActiveCell.FormulaR1C1 = “Poblacion Numero”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Variable Generada”Range(“C6”).Select: ActiveCell.FormulaR1C1 = “Estado”Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A1:B5,A6:C” & (K + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange(“A1:A5,A6:C6”).SelectSelection.Interior.ColorIndex = 44Cells(3, 3) = “Aceptable”Inicio:M = InputBox(“Introduzca el número de la población de éxito M:”): Cells(3, 2).Value = MIf (M < K) Then
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
201
Cole
cción
1
Comenzar: S = InputBox("Introduzca el número de la muestra S:"): Cells(2, 2).Value = SIf (S <= K Or S <= M) ThenFor j = 1 To KCells(j + 6, 1).Value = jSum = 0: N = Cells(1, 2).Value: M = Cells(3, 2).ValueFor i = 1 To SR = Rnd: p = (M / N)If (R >= p) ThenX = 1: M = M - 1ElseX = 0: N = N - 1: M = M - 1End IfSum = Sum + XNext iCells(6 + j, 2).Value = SumIf (Sum >= 5) ThenCells(6 + j, 3) = "Aceptable"ElseCells(6 + j, 3) = " No Aceptable"End IfNext jCells(4, 2).Value = Application.WorksheetFunction.CountIf(Range(Cells(7, 3), Cells(36, 3)), Cells(3, 3))Prob = (Cells(4, 2).Value) / K: Cells(5, 2).Value = ProbElseMsgBox "El número de la muestra debe ser menor o igual que el número de la población", vbOKOnly, "ERROR"GoTo ComenzarEnd IfElseMsgBox "El número de la población de éxito debe ser menor o igual que el número de la pobla-ción", vbOKOnly, "ERROR"GoTo InicioEnd IfEnd Sub
202
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Distribución de probabilidad Poisson
La función de densidad de probabilidad de la distribución Poisson está dada por:
Donde X se denomina como variable aleatoria con distribución Poisson. El paráme-tro de esta distribución es λ. Para simular valores de una variable aleatoria de Poisson de parámetro λ, se partirá de valores simulados en una variable aleatoria exponencial.
Método de aceptación y rechazo:En efecto, si ocurren x sucesos en el intervalo [0, t], la suma de los tiempos transcu-
rridos entre los x sucesos debe menor que t. Así, si Xi es el tiempo transcurrido entre los x sucesos i – 1 e i, se tiene:
Así, como los Xi siguen una distribución exponencial con parámetro λ, se simulan valores sucesivos de Xi hasta que:
Es decir, K es el número de sucesos que hacen:
Por tanto, han ocurrido K – 1 sucesos antes del instante t y el k –ésimo ocurre en un tiempo posterior a t. Por consiguiente, el valor x , simulado de una variable aleatoria de Poisson de parámetro λ, será x = K – 1. Si se desea, como es lo habitual, simular valores de una variable aleatoria de Poisson de parámetro λ, entonces se considera el intervalo (0, t] y x = k – 1 será el valor simulado de una variable aleatoria de Poisson de parámetro λ, si se verifica lo siguiente:
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
203
Cole
cción
1
Además, los valores simulados de una variable aleatoria exponencial con parámetro λ se obtienen a través de la expresión:
Donde Ri es el número aleatorio i, se tiene que el valor simulado en la variable alea-toria de Poisson con parámetro λ es x = k – 1, si se cumple:
O, lo que es lo mismo, si:
El siguiente diagrama de flujo permite generar valores de una variable aleatoria con distribución Poisson, a través del método descrito.
Figura 5.3. Diagrama de flujo para generar variables aleatorias de tipo Poisson
204
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Generación de variables aleatorias de tipo Poisson por macro
La macro para generar variables aleatorias de tipo Poisson se hará mediante el método de convolución.
Procedimiento 5.6. Macro para generar variables aleatorias
de tipo Poisson por el método de convolución
Sub POISSON()Dim N As Integer, M As DoubleActiveWindow.DisplayGridlines = FalseLimpiarborrarRange(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“B3”).Select: ActiveCell.FormulaR1C1 = “Generacion de Variables de Poissón”Range(“B3:D4”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“B5”).Select: ActiveCell.FormulaR1C1 = “Valor de Lambda”Selection.Interior.ColorIndex = 20Selection.MergeN = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = NRange(“B8:D8”).Select Selection.Interior.ColorIndex = 6 Range(“B9:D” & (N + 8)).Select Selection.Interior.ColorIndex = 19 Range(“B8”).Select: ActiveCell.FormulaR1C1 = “Número de corrida” Range(“C8”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios” Range(“D8”).Select: ActiveCell.FormulaR1C1 = “Variable Generada”M = InputBox(“Introduzca el valor de la media:”): Cells(5, 3).Value = M
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
205
Cole
cción
1
For j = 1 To NCells(j + 8, 2).Value = jY = 0: X = 0Inicio:R = Rnd: Cells(j + 8, 3).Value = RV = (-1) * (Application.WorksheetFunction.Ln(1 - R) / M)Y = Y + VIf (Y > 1) ThenCells(j + 8, 4).Value = XElseX = X + 1Cells(8 + j, 4).Value = XGoTo InicioEnd IfNext jEnd Sub
Ejemplo 5.3
La demanda diaria de equipos médicos en una supertienda es una variable aleatoria con distribución binomial con parámetros n = 4 y p = 0,45. Se hace un pedido Q = 10 equipos siempre que en el almacén haya 4 o menos equipos. Inicialmente hay en inventarios 12 equipos, se supone que si acude un cliente a comprar un equipo y en ese momento no hay existencias en el almacén, se ha perdido la venta. El tiempo que transcurre, en días, entre la fecha en que se hace el pedido y la fecha en que la fábrica lo sirve es una variable aleatoria con distribución geométrica de parámetro p = 0,40. se requiere simular este comportamiento para 24 días con el propósito de conocer cuánto se ha dejado de vender en promedio.
Desarrollo:La definición de variables para la macro es:a. Di = día de la simulación i.b. DSi = demanda simulada para el día i.c. TEi = tiempo de espera simulado para el día i.
206
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
d. NVi = número de equipos vendidos el día i.e. FEi = número de equipos no vendidos por falta de existencias el día i.f. NTi = número de equipos en el almacén el día i.g. Tj = número de equipos recibidos en el pedido j.
Para realizar la macro se debe tener en cuenta:a. Se creará una función de Excel denominada binomial con dos parámetros, n y
p1.b. Se obtendrá otra función de Excel denominada geométrica con un parámetro,
q2.c. Luego una función de Excel llamada Ln (logaritmo natural) para generar la
variable aleatoria tipo geométrica, que significa el tiempo de entrega.d. Cada réplica determinará el número de equipos no vendidos en promedio.
Procedimiento 5.7. Macro para desarrollar ejemplo inventario de equipos médicos
Sub Equipos()Dim TE As Integer, PRO As Integer, DS As Integer, Rep As IntegerDim NV As Integer, FE As Integer, NT As Integer, T As Integer, n As IntegerDim p1 As Single, p2 As Double, q As Double, R As Double, k As IntegerActiveWindow.DisplayGridlines = FalseRange(“A1:P2000”).ClearContentsRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Generacion de Variables Binomiales y Geométricas”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Parámetro Binomial (n)”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Probabilidad Binomial”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Probabilidad Geométrica”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Numeros de Días”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “Demanda Generada(DS)”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Número de Equipos Vendidos (NV)”Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Número de Equipos en el Almacén (NT)”Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Número de equipos no vendidos”Range(“F5”).Select: ActiveCell.FormulaR1C1 = “Tiempo de espera (TE)”Range(“G5”).Select: ActiveCell.FormulaR1C1 = “Número de equipos recibidos(T)”Range (“H5”).Select: ActiveCell.FormulaR1C1 = “Replicas Num.”
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
207
Cole
cción
1
Range(“I5”).Select: ActiveCell.FormulaR1C1 = “Promedio de Equipos no vendidos”Range(“J5”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Entrega generado”Range(“A2:A4”).SelectSelection.Interior.ColorIndex = 44Range(“A5:J5”).SelectSelection.Interior.ColorIndex = 6dia = InputBox(“Digite el número de Dias:”): Cells(4, 4).Value = diap1 = InputBox(“Digite la Probablidad de éxito de la Binomial”): Cells(3, 2).Value = p1p2 = InputBox(“Digite la Probablidad de éxito de la Geométrica”): Cells(4, 2).Value = p2n = InputBox(“Digite el número de ensayos o parámetro de binomial”): Cells(2, 2).Value = nRange(“A1:J1”).SelectSelection.MergeSelection.Interior.ColorIndex = 20Range(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A2:B4,J5:J15,A5:G” & (dia + 6)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithPRO = 4Rep = InputBox(“Digite el número de Replicas (No mayor que 25):”, “NUMERO DE REPLICAS”)If (Rep > 25) ThenMsgBox “El número de replicas excede a la capacidad de corridas”, vbOKOnly, “!! LO SIENTO !!”Exit SubEnd IfRange(“H5:I” & (Rep + 5)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin
208
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithFor i = 1 To RepVar = “REPLICA NUMERO “ + Str(i)MsgBox Var, vbOKOnly, “REPLICAS”Cells(i + 5, 8).Value = i‘Generación de la demandaCells(6, 1).Value = 0For k = 1 To diaCells(k + 6, 1).Value = kCells(k + 6, 2).Value = BINOMIALNext k‘Generacion de los tiempos de entregaFor j = 6 To 15p2 = Cells(4, 2).ValueR = Rndq = 1 - p2Cells(j, 10).Value = Geometrica(R, q)Next jCells(6, 4).Value = 10‘Número de equipos vendidos en el diaj = 6For k = 1 To diaNV = Cells(k + 6, 2).ValueNT = (Cells(k + 5, 4).Value) - NVIf (NT <= PRO) And (TE <= -1) Then Cells(k + 6, 6).Value = Cells(j, 10).Value Cells(k + 6, 3).Value = NV Cells(k + 6, 4).Value = NT + Cells(k + 6, 7).Value TE = Cells(k + 6, 6).Value j = j + 1 If (Cells(k + 6, 4).Value > 0) Then Cells(k + 6 + TE, 7).Value = 10 - (Cells(k + 6, 4).Value) Else Cells(k + 6 + TE, 7).Value = 10 End If
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
209
Cole
cción
1
Else Cells(k + 6, 3).Value = NV Cells(k + 6, 4).Value = NT + Cells(k + 6, 7).Value End If If (NT <= 0) Then Cells(k + 6, 4).Value = 0 If (Cells(k + 7, 2).Value > Cells(k + 6, 4).Value) Then Cells(k + 6, 3).Value = Cells(k + 5, 4) FE = Cells(k + 6, 2).Value - Cells(k + 6, 3).Value Cells(k + 6, 5).Value = FE Else Cells(k + 6, 3).Value = 0 FE = Cells(k + 6, 2).Value Cells(k + 6, 5).Value = FE End If If (Cells(k + 6, 7).Value <> 0) Then Cells(k + 6, 4).Value = Cells(k + 6, 7).Value End If End If TE = TE - 1 Cells(dia + 1, 5).Value = "" Cells(dia + 1, 6).Value = "" Cells(dia + 1, 7).Value = "" Next k dia = Cells(4, 4).Value Range("A" & (dia + 7)).Select: ActiveCell.FormulaR1C1 = "TOTAL" Cells(dia + 7, 5).Value = Application.WorksheetFunction.Sum(Range(Cells(7, 5), Cells(dia + 6))) Cells(i + 5, 9).Value = Cells(dia + 7, 5)Next iRange("H" & (Rep + 6)).Select: ActiveCell.FormulaR1C1 = "PROMEDIO"Cells(Rep + 6, 9).Value = Application.WorksheetFunction.Average(Range(Cells(6, 9), Cells(Rep + 5, 9)))End Sub
210
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Function BINOMIAL(n As Variant, p1 As Single) As IntegerDim R As Doublep1 = Cells(3, 2).Value: n = Cells(2, 2).ValueSum = 0For k = 1 To nR = RndIf (R <= p1) Thenx = 0Elsex = 1End IfSum = Sum + xNext kBINOMIAL = SumEnd Function
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Geometrica(q2 As Double) As IntegerDim R1 As DoubleR1 = RndGeometrica = 1 + Int(Ln(R1) / Ln(q2))End Function
Ejercicios
1. Se tiene el siguiente juego de lanzamiento de monedas al aire, realizado por dos amigos: Pedro y Juan. El juego consiste en lanzar una moneda (p = 0,50 si sale cara) al aire hasta que la diferencia entre el número de caras y el de sellos sea igual a tres. Pedro debe pagar a Juan $100 por cada lanzamiento que haga y recibirá $1.000 cuando la diferencia entre el número de caras y el de sellos (número de sellos menos el de caras) sea igual a tres.
GENERACIÓN DE vARIABLES ALEATORIAS DISCRETAS
211
Cole
cción
1
Simule 40 observaciones de lanzamiento de la moneda utilizando, para generar cara o sello una distribucion Bernoulli.
2. La demanda diaria de una empresa de buses de turismo es una variable aleatoria con distribución binomial B (10, 0.60). Esta empresa dispone de 10 buses de turismo, siendo el costo fijo operativo de $10.000 diarios por bus. A veces la empresa necesita subcontratar buses de turismo de otra empresa, ya que tiene una demanda superior a los 10 buses de que dispone. La subcontratación es una variable aleatoria con una distribucion binomial B (6, 0.55), el costo de subcontratacion por bus es de $15.000 diarios, en caso de conseguirla. Cuando no es así, y no consigue subcontratar tantos buses para poder garantizar la demanda de servicio, entonces sufre una pérdida por bus de $80.000 por servicio no cumplido. Simula 50 días para replantear el número de buses de turismo que debería tener en aras de minizar el costo promedio total.
3. Considérese un lote que contiene 100 unidades de un determinado objeto, de los cuales hay 15 defectuosos. Se eligen 6 objetos para examinarlos sin reemplaza-miento. La variable aleatoria que describe el número de unidades defectuosas recibe el nombre de hipergeométrica.
Si el número de defectuosas es mayor o igual a 5, se considera el lote como rechazado; en caso contrario, se acepta. Se supone que hay un costo por unidad examinada de $5. Si un lote se rechaza, se elimina completamente a un costo de $6 por unidad. Por otra parte, si se acepta un lote y posteriormente este resulta ser defectuoso, se ocasiona un costo de $40 por unidad defectuosa. Simule 100 lotes para determinar el costo promedio de rechazo, el costo promedio de aceptación y el costo promedio total por lote.
4. Un torno CNC, cuando funciona perfectamente puede producir una utilidad de $100 por hora a una empresa manufacturera. Sin embargo, esta máquina tiene
212
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
tendencia a fallar en momentos inesperados e impredecibles. Supóngase que el número de fallas durante cualquier periodo de 48 horas es una variable aleatoria con distribucion Poisson con parametro de 2 fallas. Si la máquina falla 5 veces durante 48 horas, la pérdida ocasionada (la improductividad de la máquina más la reparacion) equivale a $30. Simule 1000 horas para determinar la utilidad promedia.
5. Un mecanismo se inspecciona al finalizar cada día para ver si aún funciona ade-cuadamente. El número de inspecciones necesarias es una variable aleatoria con distribución geométrica con probabilidad (p = 0,35). Simule 30 días para calcular la probabbildad de que ocurran por lo menos 5 inspecciones diarias.
6. Una estación de gasolina abre diariamente en la mañanas a las 8:00 a.m. y cierra a las 8:00 p.m. A los empleados que atiende esta gasolinería se les paga generalmente $200 al día. La llegada de los automóviles que solicitan servicio sigue una distribu-cion de Poisson, con una llegada promedio igual 10 autos por hora. El tiempo de servicio por carro es una variable aleatoria con distribucion geométrica, BE (0,30) minutos. Cuando excede de 3 el número de automóviles que esperan el servicio, entonces los clientes disgustados abandonan la gasolinería sin esperar el servicio. Simule para derminar el número de operarios que debe contratar la estación de gasolina, sabiendo que las ganacias que deja a cada automóvil servido son de $5.
Modelos de simulación de líneas de espera con distribución de probabilidad teórica
En los capítulos anteriores se han simulado fenómenos de espera; ahora, se abordará el problema de diseñar modelos de simulación de líneas de espera para observar las características del fenómeno de espera analizando su comportamiento a lo
largo del tiempo. La ventaja de este análisis estriba en que de esta forma se controlará el fenómeno de espera, pudiendo cambiar los parámetros y las reglas de decisión a volun-tad del experimentador. Además, mientras que el estudio real del comportamiento de la línea de espera puede llevar días hasta inclusive meses, su funcionamiento a través de la simulación se puede realizar en pocos minutos mediante una macro de Excel.
A lo largo de este capítulo, se supone que el usuario está familiarizado con la termino-logía existente en la teoría de colas, y que además tiene acceso a las referencias comunes sobre estos tópicos, las cuales se citarán en los lugares adecuados en el desarrollo del capítulo.
Elementos de simulación para los modelos de líneas de espera
A continuación se presentarán formulaciones básicas que servirán como medidas de desempeño o eficiencia de la simulación de líneas de espera con las nomenclaturas que se enuncian a continuación:
6
214
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Wi = tiempo promedio que espera un cliente i en el sistema.
Wqi = tiempo promedio que espera un cliente i en la cola.
Tn = tiempo acumulado de la última llegada.
ta(i) = variable aleatoria del tiempo entre llegadas generada por una distribución de probabilidad para el cliente i.
ts(i) = variable aleatoria del tiempo de servicio generada por una distribución de probabilidad para el cliente i.
t0(i) = tiempo inactivo del servidor para el cliente i.
TLL(i) = tiempo medido de llegadas (tiempo acumulado) para el cliente i.
Ti(i) = tiempo de inicio de servicio.
Tt(i) = tiempo de terminación o tiempo de salida.
Wprom = tiempo promedio de espera total en el sistema.
Wqprom = tiempo promedio de espera total en la cola.
L = número promedio de clientes en el sistema.
Lq = número promedio de clientes en la cola.
U = utilización del sistema.
P0 = probabilidad o porcentaje de inactivo.
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
215
Cole
cción
1
Las formulaciones básicas para las medidas de desempeño para simualcion de líneas de espera son:
Modelo de líneas de espera con un solo servidor
En esta sección se presentan cuatro ejemplos de líneas de espera para programar expe-rimentos de simulación a través de macro de Excel.
216
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo 6.1
Simular una estación de gasolina en la que los tiempos entre llegadas de los automóviles al sistema estan distribuidos normalmente con media de 1,5 minutos y desviación están-dar de 0,33 minutos, y que el tiempo de servicio por automóvil está distribuido en forma exponencial con una media de 2,5 minutos. Realizar la simulación para 20 automóviles y determinar sus medidas de desempeño.
Procedimiento 6.1. Macro de líneas de espera con un solo servidor
Sub Unsoloservidor()Dim R1 As Double, Tentrellegadas(1 To 10000) As Double, Tservicio(1 To 10000) As DoubleDim R2 As Double, Tmedido(1 To 10000) As Double, inicio(1 To 10000) As Double, Tfinal(1 To 10000) As DoubleDim W(1 To 10000) As Double, Wq(1 To 10000) As Double, Media As Double, Desv As DoubleDim P0, Wprom, Wqprom, L, Lq As Double, inactivo(1 To 10000) As DoubleLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nMedia = InputBox(“Introduzca el valor de la media del tiempo entre llegadas:”): Cells(5, 13).Value = MediaDesv = InputBox(“Introduzca la desviación estándar del tiempo entre llegadas:”): Cells(6, 13).Value = DesvM = InputBox(“Introduzca la media del tiempo de servicio:”): Cells(7, 13).Value = MCellsSelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 11 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange(“B3:J3”).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
217
Cole
cción
1
.Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithSelection.MergeActiveCell.FormulaR1C1 = “SIMULACIÓN DE LINEAS DE ESPERA UN SOLO SERVIDOR”Range(“B4”).Select: ActiveCell.FormulaR1C1 = “Automóvil”Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Tiempo entre llegadas”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Tiempo de medido de llegadas”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Tiempo de inicio de servicio”Range(“F4”).Select: ActiveCell.FormulaR1C1 = “Tiempo de servicio”Range(“G4”).Select: ActiveCell.FormulaR1C1 = “Terminacion de servicio”Range(“H4”).Select: ActiveCell.FormulaR1C1 = “Tiempo de espera del automóvil en el sistema”Range(“I4”).Select: ActiveCell.FormulaR1C1 = “Tiempo de espera del automóvil en la cola”Range(“J4”).Select: ActiveCell.FormulaR1C1 = “Tiempo inactivo del servidor”Range(“B4:J4”).SelectWith Selection .Interior.ColorIndex = 46 .ReadingOrder = xlContext .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium End WithRange(Cells(5, 2), Cells(n + 4, 10)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(Cells(5, 12), Cells(12, 13)).SelectSelection.Interior.ColorIndex = 20 Range(“L5”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de llegadas” Range(“L6”).Select: ActiveCell.FormulaR1C1 = “Desviacion estándar del tiempo de llegadas” Range(“L7”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de servicio” Range(“L8”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema” Range(“L9”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de tiempo del servidor desocupado”
218
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“L10”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en la cola” Range(“L11”).Select: ActiveCell.FormulaR1C1 = “Número promedio de autos en el sistema” Range(“L12”).Select: ActiveCell.FormulaR1C1 = “Número promedio de autos en la cola” Range(Cells(5, 12), Cells(12, 13)).Select Columns(“L:L”).EntireColumn.AutoFit With Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithFor j = 1 To n Cells(j + 4, 2) = j R1 = Rnd: Tentrellegadas(j) = Round(Application.NormInv(R1, Media, Desv), 2) Cells(j + 4, 3).Value = Tentrellegadas(j) R2 = Rnd: Tservicio(j) = Round((-1) * M * (Application.Ln(1 - R2)), 2) Cells(j + 4, 6).Value = Tservicio(j)Next jFor i = 1 To n Tentrellegadas(i) = Cells(i + 4, 3).Value: Tmedido(i) = Cells(i + 4, 4).Value inicio(i) = Cells(i + 4, 5).Value: Tservicio(i) = Cells(i + 4, 6).Value Tfinal(i) = Cells(i + 4, 7).Value: W(i) = Cells(i + 4, 8).Value Wq(i) = Cells(i + 4, 9).Value: inactivo(i) = Cells(i + 4, 10).ValueNext iTmedido(1) = Tentrellegadas(1): Cells(5, 4).Value = Tmedido(1)inicio(1) = Tmedido(1): Cells(5, 5).Value = Round(inicio(1), 2)Tfinal(1) = inicio(1) + Tservicio(1): Cells(5, 7).Value = Tfinal(1)W(1) = Tfinal(1) - Tmedido(1): Cells(5, 8).Value = Round(W(1), 2)Wq(1) = Tfinal(1) - Tmedido(1) - Tservicio(1): Cells(5, 9).Value = Round(Wq(1), 2)inactivo(1) = 0: Cells(5, 10).Value = inactivo(1)For i = 2 To nTmedido(i) = Tmedido(i - 1) + Tentrellegadas(i): Cells(i + 4, 4).Value = Tmedido(i)inicio(i) = Application.Max(Tmedido(i), Tfinal(i - 1)): Cells(i + 4, 5).Value = inicio(i)Tfinal(i) = inicio(i) + Tservicio(i): Cells(i + 4, 7).Value = Tfinal(i)W(i) = Tfinal(i) - Tmedido(i): Cells(i + 4, 8).Value = Round(W(i), 2)Wq(i) = Tfinal(i) - Tmedido(i) - Tservicio(i): Cells(i + 4, 9).Value = Round(Wq(i), 2)inactivo(i) = inicio(i) - Tfinal(i - 1): Cells(i + 4, 10).Value = inactivo(i)Next iWprom = Application.Average(Range(“H5:H” & (n + 4))): Cells(8, 13).Value = Round(Wprom, 2)
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
219
Cole
cción
1
P0 = (Application.Sum(Range("J5:J" & (n + 4)))) / ((Application.Max(Range("G5:G" & (n + 4)))) - Cells(5, 5).Value)Cells(9, 13).Value = P0Range("M9").SelectSelection.NumberFormat = "0.00%"Wqprom = Application.Average(Range("I5:I" & (n + 4))): Cells(10, 13).Value = Round(Wqprom, 2)L = (Application.Sum(Range("H5:H" & (n + 4)))) / ((Application.Max(Range("G5:G" & (n + 4)))) - Cells(5, 5).Value)Cells(11, 13).Value = Round(L, 0)Lq = (Application.Sum(Range("I5:I" & (n + 4)))) / ((Application.Max(Range("G5:G" & (n + 4)))) - Cells(5, 5).Value)Cells(12, 13).Value = Round(Lq, 0)Range("A1").SelectEnd Sub
Ejemplo 6.2
Una supertienda abre diariamente en las mañanas a las 9:00 a.m. y cierra a las 9:00 p.m. Los clientes llegan a una caja para pagar sus compras, siendo la llegada una variable aleatoria con distribución exponencial con media de 6 minutos. El tiempo de servicio por cliente está distribuido exponencialmente con una media de 5 minutos. Simular para 20 clientes y determinar sus medidas de desempeño.
Para realizar esta macro se tiene en cuenta:a. Se captura el tiempo de entrada con formato horario de la forma “h: mm:ss”.b. El tiempo medido de llegada, el tiempo de inicio de servicio y el tiempo de
terminación de servicio se convierte en formato horario de la forma “h: mm:ss”.c. Para las formulaciones, el formato “h:mm:ss” se convierte a númerosd. Hacer previamente una macro denominada “DATOSINICIALES”
220
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 6.2. Macro para simulación de líneas de espera con formato horario
Sub DATOSINICIALES()ActiveWindow.DisplayGridlines = FalseRange(“A4”).Select: ActiveCell.FormulaR1C1 = “Simulacion de Linea de Espera con un solo Servidor”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “ENTRADA”Range(“D6”).Select: ActiveCell.FormulaR1C1 = “Media”Range(“E6”).Select: ActiveCell.FormulaR1C1 = “L”Range(“F6”).Select: ActiveCell.FormulaR1C1 = “Lq”Range(“G6”).Select: ActiveCell.FormulaR1C1 = “W”Range(“H6”).Select: ActiveCell.FormulaR1C1 = “Wq”Range(“I6”).Select: ActiveCell.FormulaR1C1 = “Po”Range(“J6”).Select: ActiveCell.FormulaR1C1 = “Utilización Promedio de la Instalacion”Range(“A7”).Select: ActiveCell.FormulaR1C1 = “Distribución del Tiempo entre Llegadas”Range(“A9”).Select: ActiveCell.FormulaR1C1 = “Distribución del Tiempo de Servicio”Range(“A11”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Entrada”Range(“A13”).Select: ActiveCell.FormulaR1C1 = “Clientes”Range(“B13”).Select: ActiveCell.FormulaR1C1 = “Tiempo Entre Llegadas (Min)”Range(“C13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Servicio (Min)”Range(“D13”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegadas”Range(“E13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Iniciación de Servicio”Range(“F13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Terminación de Servicio”Range(“G13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Espera de Un Cliente en el Sistema (Min)”Range(“H13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Espera de Un Cliente en la cola(Min)”Range(“I13”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inactivo del Servidor (Min)”Range(“K13”).Select: ActiveCell.FormulaR1C1 = “Conversiones”Range(“K14”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Llegadas”Range(“L14”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Iniciación de Servicio”Range(“M14”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Salida”Range(“A4:J4”).SelectSelection.MergeSelection.Interior.ColorIndex = 6Range(“A7:C7,A9:C9,A11:C11”).SelectSelection.MergeRange(“A1:Z1000”).SelectWith Selection .Font.Bold = True
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
221
Cole
cción
1
.Font.Name = "Arial" .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange("D6:J7,A7,A9:D9,A11:D11").SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("D6:J6").SelectSelection.Interior.ColorIndex = 38Range("A7,A9,A11").SelectSelection.Interior.ColorIndex = 44Range("A13:A14,B13:B14,C13:C14,D13:D14,E13:E14,F13:F14,G13:G14,H13:H14,I13:I14").SelectSelection.MergeRange("K13:M13").SelectSelection.MergeSelection.Interior.ColorIndex = 6Range("A13:I13,K14:M14").SelectSelection.Interior.ColorIndex = 38End Sub
Sub Unsoloservidor2()Dim R1 As Double, Tentrellegadas(1 To 10000) As Double, Tservicio(1 To 10000) As DoubleDim R2 As Double, Tmedido(1 To 10000) As Double, inicio(1 To 10000) As Double, Tfinal(1 To 10000) As DoubleDim W(1 To 10000) As Double, Wq(1 To 10000) As Double, Media As DoubleDim P0, Wprom, Wqprom, L, Lq As Double, inactivo(1 To 10000) As DoubleDim Medprima(0 To 10000), Inicioprima(0 To 10000), Finalprima(0 To 10000) As DoubleLimpiarDATOSINICIALESRange(“D7:J11”).ClearContentsn = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = nMedia = InputBox(“Introduzca el valor de la media del tiempo entre llegadas:”): Cells(7, 4).Value = Media
222
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
M = InputBox(“Introduzca la media del tiempo de servicio:”): Cells(9, 4).Value = MTiempoentrada = InputBox(“Digite el tiempo de entrada (H:MM):”): Cells(11, 4) = TiempoentradaRange(Cells(15, 1), Cells(n + 15, 9)).SelectWith Selection .Font.Size = 11 .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(Cells(15, 11), Cells(n + 15, 13)).SelectWith Selection .Font.Size = 11 .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithMedprima(0) = (Hour(Cells(11, 4).Value) * 60) + Minute(Cells(11, 4).Value): Cells(15, 11).Value = Medprima(0)Cells(15, 12).Value = Medprima(0)For j = 1 To n Cells(j + 15, 1) = j R1 = Rnd Tentrellegadas(j) = Round((-1) * Media * (Application.Ln(1 - R1)), 2) Cells(j + 15, 2).Value = Tentrellegadas(j) R2 = Rnd Tservicio(j) = Round((-1) * M * (Application.Ln(1 - R2)), 2) Cells(j + 15, 3).Value = Tservicio(j)Next jFor i = 1 To n Tmedido(i) = Cells(i + 15, 4).Value inicio(i) = Cells(i + 15, 5).Value Tfinal(i) = Cells(i + 15, 6).Value W(i) = Cells(i + 15, 7).Value Wq(i) = Cells(i + 15, 8).Value inactivo(i) = Cells(i + 15, 9).Value
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
223
Cole
cción
1
Next iRange("D16:F" & (n + 15)).SelectSelection.NumberFormat = "h:mm:ss"Medprima(1) = Tentrellegadas(1) + Medprima(0): Cells(16, 11).Value = Medprima(1)Tmedido(1) = (Medprima(1) / (24 * 60)): Cells(16, 4) = Tmedido(1)Inicioprima(1) = Medprima(1): Cells(16, 12).Value = Inicioprima(1)inicio(1) = Tmedido(1): Cells(16, 5) = inicio(1)Finalprima(1) = Inicioprima(1) + Tservicio(1): Cells(16, 13).Value = Finalprima(1)Tfinal(1) = (Finalprima(1) / (24 * 60)): Cells(16, 6).Value = Tfinal(1)W(1) = Finalprima(1) - Medprima(1): Cells(16, 7).Value = Round(W(1), 2)Wq(1) = Finalprima(1) - Medprima(1) - Tservicio(1): Cells(16, 8).Value = Round(Wq(1), 2)inactivo(1) = 0: Cells(16, 9).Value = inactivo(1)For i = 2 To nMedprima(i) = Medprima(i - 1) + Tentrellegadas(i): Cells(i + 15, 11).Value = Medprima(i)Tmedido(1) = (Medprima(i) / (24 * 60)): Cells(i + 15, 4) = Tmedido(1)Inicioprima(i) = Application.Max(Medprima(i), Finalprima(i - 1)): Cells(i + 15, 12).Value = Inicioprima(i)inicio(i) = (Inicioprima(i) / (24 * 60)): Cells(i + 15, 5).Value = inicio(i)Finalprima(i) = Inicioprima(i) + Tservicio(i): Cells(i + 15, 13).Value = Finalprima(i)Tfinal(i) = (Finalprima(i) / (24 * 60)): Cells(i + 15, 6).Value = Tfinal(i)W(i) = Finalprima(i) - Medprima(i): Cells(i + 15, 7).Value = Round(W(i), 2)Wq(i) = Finalprima(i) - Medprima(i) - Tservicio(i): Cells(i + 15, 8).Value = Round(Wq(i), 2)inactivo(i) = Inicioprima(i) - Finalprima(i - 1): Cells(i + 15, 9).Value = inactivo(i)Next iL = (Application.Sum(Range("G16:G" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7, 5).Value = LLq = (Application.Sum(Range("H16:H" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7, 6).Value = LqWprom = Application.Average(Range("G16:G" & (n + 15))): Cells(7, 7).Value = Round(Wprom, 2)Wqprom = Application.Average(Range("H16:H" & (n + 15))): Cells(7, 8).Value = Round(Wqprom, 2)P0 = (Application.Sum(Range("I16:I" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7, 9).Value = P0U = (Application.Sum(Range("C16:C" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7, 10).Value = URange("I7:J7").SelectSelection.NumberFormat = "0.00%"Range(“A4”).selectEnd Sub
224
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo 6.3
Un centro mecanizado atendido por un operario recibe dos tipos de piezas: tipo A y tipo B. Se ha estimado que ambos tipos de piezas llegan al centro mecanizado en la pro-porción del 45% para los del tipo A y 55% para los del tipo B. El centro de mecanizado está acondicionado para recibir a las piezas del tipo A y otra las del tipo B. El tiempo entre llegadas de las piezas es una variable aleatoria con distribución de probabilidad uniforme entre 10 y 15 minutos. El tiempo que tarda en procesar la pieza de tipo A es una variable aleatoria que sigue una distribución exponencial con media de 12 minutos, mientras que el tiempo de procesamiento de la pieza de tipo B es también una variable aleatoria que sigue una distribución Erlang con parámetro de forma igual a 5, parámetro de escala igual a 2 y valor mínimo de 6 minutos. Simule para 30 piezas y obtenga las medidas de desempeño.
Se realiza la macro en dos partes: una denominada “cuadricular” y otra “DosPiezas”La macro se configura como se describe a continuación:a. Especificar el tipo de pieza.b. Un tiempo entre llegadas para todas las piezas.c. Un tiempo medido de llegada de todas las piezas.d. Un tiempo de inicio, un tiempo de servicio, un tiempo de despacho, un tiempo
de espera en el sistema y un tiempo de espera en la cola para cada pieza.e. Un tiempo de comienzo, el tiempo de terminación y el tiempo inactivo de la
máquina.
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
225
Cole
cción
1
Procedimiento 6.3. Macro para la simulación de llegadas de varios tipo de piezas
Sub Cuadricular()ActiveWindow.DisplayGridlines = FalseRange(“A2”).Select: ActiveCell.FormulaR1C1 = “Simulacion de Linea de Espera con un solo Servidor con Llegada de Dos Piezas”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Piezas”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “Tipo de Pieza”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Tiempo Entrellegadas”Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegadas”Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Pieza Tipo A”Range(“E6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio de Servicio”Range(“F6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Servicio”Range(“G6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“H6”).Select: ActiveCell.FormulaR1C1 = “W”Range(“I6”).Select: ActiveCell.FormulaR1C1 = “Wq”Range(“J5”).Select: ActiveCell.FormulaR1C1 = “Pieza Tipo B”Range(“J6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio de Servicio”Range(“K6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Servicio”Range(“L6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“M6”).Select: ActiveCell.FormulaR1C1 = “W”Range(“N6”).Select: ActiveCell.FormulaR1C1 = “Wq”Range(“O5”).Select: ActiveCell.FormulaR1C1 = “Máquina”Range(“O6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Comienzo”Range(“P6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Terminación”Range(“Q6”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inactividad”Range(“A2:Q2”).SelectSelection.MergeSelection.Interior.ColorIndex = 6Range(“A5:A6,B5:B6,C5:C6,D5:D6,E5:I5,J5:N5,O5:Q5”).SelectSelection.MergeRange(“A1:Z1000”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd With
226
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range("A2,A5:Q6").SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("A5:Q6").SelectSelection.Interior.ColorIndex = 43End Sub
Sub Dospiezas()Dim R1 As Double, Tentrellegadas(1 To 10000) As Double, TservicioA(1 To 10000) As Double, TservicioB(1 To 10000) As DoubleDim R2 As Double, Tmedido(1 To 10000) As Double, inicioA(1 To 10000) As Double, inicioB(1 To 10000) As DoubleDim TfinalA(1 To 10000) As Double, TfinalB(1 To 10000) As Double, WB(1 To 10000) As Double, WqB(1 To 10000) As DoubleDim WA(1 To 10000) As Double, WqA(1 To 10000) As Double, Media As Double, k As Integer, lambda As IntegerDim P0, WAprom, WBprom, WAqprom, WBqprom, L1, L2, Lq1, Lq2 As Double, inactivo(1 To 10000) As Double, min As DoubleDim termina(1 To 10000) As Double, comienzo(1 To 10000) As DoubleLimpiarCuadricularn = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = na = InputBox(“Introduzca el valor mínimo del tiempo entre llegadas:”): Cells(7, 19).Value = ab = InputBox(“Introduzca el valor máximo del tiempo entre llegadas:”): Cells(8, 19).Value = bMedia = InputBox(“Introduzca la media del tiempo de procesamiento de la pieza A:”): Cells(9, 19).Value = Mediak = InputBox(“Introduzca el parámetro de forma del tiempo de procesamiento de la pieza B:”): Cells(10, 19).Value = klambda = InputBox(“Introduzca el parámetro de escala del tiempo de procesamiento de la pieza B:”): Cells(11, 19).Value = lambdamin = InputBox(“Introduzca el valor mínimo del tiempo de procesamiento de la pieza B:”): Cells(12, 19).Value = minRange(Cells(7, 1), Cells(n + 6, 17)).SelectWith Selection
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
227
Cole
cción
1
.Font.Bold = True .Font.Name = “Arial” .Font.Size = 11 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(Cells(7, 18), Cells(22, 19)).SelectSelection.Interior.ColorIndex = 20 Range(“R7”).Select: ActiveCell.FormulaR1C1 = “Valor mínimo del tiempo entre llegadas” Range(“R8”).Select: ActiveCell.FormulaR1C1 = “Valor máximo del tiempo entre llegadas” Range(“R9”).Select: ActiveCell.FormulaR1C1 = “La media del tiempo de proceso de la Pieza A” Range(“R10”).Select: ActiveCell.FormulaR1C1 = “Parámetro de forma del tiempo de proceso de la pieza B” Range(“R11”).Select: ActiveCell.FormulaR1C1 = “Parámetro de escala del tiempo de proceso de la pieza B” Range(“R12”).Select: ActiveCell.FormulaR1C1 = “Valor mínimo del tiempo de proceso de la pieza B” Range(“R13”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema de la pieza A” Range(“R14”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema de la pieza B” Range(“R15”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en la cola de la pieza A” Range(“R16”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en la cola de la pieza B” Range(“R17”).Select: ActiveCell.FormulaR1C1 = “Número promedio de piezas A en el sistema” Range(“R18”).Select: ActiveCell.FormulaR1C1 = “Número promedio de piezas B en el sistema” Range(“R19”).Select: ActiveCell.FormulaR1C1 = “Número promedio de piezas A en cola” Range(“R20”).Select: ActiveCell.FormulaR1C1 = “Número promedio de piezas B en cola” Range(“R21”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de tiempo de la máquina desocupada” Range(“R22”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de utilizacion de la máquina” Columns(“R:R”).EntireColumn.AutoFit Range(Cells(7, 18), Cells(22, 19)).Select
228
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
With Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .ReadingOrder = xlContext .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithFor i = 1 To n Cells(i + 6, 1).Value = i R = Rnd If R <= 0.45 Then Cells(i + 6, 2).Value = “A” Else Cells(i + 6, 2).Value = “B” End If Tentrellegadas(i) = a + (b - a) * R: Cells(i + 6, 3).Value = Round(Tentrellegadas(i), 2) If i = 1 Then Tmedido(1) = Tentrellegadas(1): Cells(i + 6, 4).Value = Round(Tmedido(1), 2) Else Tmedido(i) = Tmedido(i - 1) + Tentrellegadas(i): Cells(i + 6, 4).Value = Round(Tmedido(i), 2) End IfNext iFor i = 1 To n If Cells(i + 6, 2) = “A” Then R1 = Rnd TservicioA(i) = (-1) * (Media) * (Application.Ln(1 - R1)) If i = 1 Then inicioA(1) = Tmedido(1): Cells(7, 5).Value = Round(inicioA(1), 2) Cells(i + 6, 6).Value = Round(TservicioA(1), 2) TfinalA(1) = inicioA(1) + TservicioA(1): Cells(7, 7).Value = Round(TfinalA(1), 2) WA(1) = TfinalA(1) - Tmedido(1): Cells(7, 8).Value = Round(WA(1), 2) WqA(1) = TfinalA(1) - Tmedido(1) - TservicioA(1): Cells(7, 9).Value = Round(WqA(1), 2) comienzo(1) = Application.Max(inicioA(1), inicioB(1)): Cells(7, 15).Value = Round(comienzo(1), 2)
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
229
Cole
cción
1
termina(1) = TfinalA(1): Cells(7, 16).Value = Round(termina(1), 2) inactivo(1) = 0: Cells(7, 17).Value = Round(inactivo(1), 2) Else inicioA(i) = Application.Max(Tmedido(i), TfinalA(i - 1), TfinalB(i - 1)): Cells(i + 6, 5).Value = Round(inicioA(i), 2) Cells(i + 6, 6).Value = Round(TservicioA(i), 2) TfinalA(i) = inicioA(i) + TservicioA(i): Cells(i + 6, 7).Value = Round(TfinalA(i), 2) comienzo(i) = Application.Max(inicioA(i), inicioB(i)): Cells(i + 6, 15).Value = Round(comienzo(i), 2) termina(i) = TfinalA(i): Cells(i + 6, 16).Value = Round(termina(i), 2) WA(i) = TfinalA(i) - Tmedido(i): Cells(i + 6, 8).Value = Round(WA(i), 2) WqA(i) = TfinalA(i) - Tmedido(i) - TservicioA(i): Cells(i + 6, 9).Value = Round(WqA(i), 2) inactivo(i) = comienzo(i) - termina(i - 1): Cells(i + 6, 17).Value = Round(inactivo(i), 2) End If Else TservicioB(i) = Erlang(k, lambda, min) If i = 1 Then inicioB(1) = Tmedido(1): Cells(7, 10).Value = Round(inicioB(1), 2) Cells(7, 11).Value = Round(TservicioB(1), 2) TfinalB(1) = inicioB(1) + TservicioB(1): Cells(7, 12).Value = Round(TfinalB(1), 2) WB(1) = TfinalB(1) - Tmedido(1): Cells(7, 13).Value = Round(WB(1), 2) WqB(1) = TfinalB(1) - Tmedido(1) - TservicioB(1): Cells(7, 14).Value = Round(WqB(1), 2) comienzo(1) = Application.Max(inicioA(1), inicioB(1)): Cells(7, 15).Value = Round(comienzo(1), 2) termina(1) = TfinalB(1): Cells(7, 16).Value = Round(termina(1), 2) inactivo(1) = 0: Cells(7, 17).Value = Round(inactivo(1), 2) Else inicioB(i) = Application.Max(Tmedido(i), TfinalA(i - 1), TfinalB(i - 1)): Cells(i + 6, 10).Value = Round(inicioB(i), 2) Cells(i + 6, 11).Value = Round(TservicioB(i), 2) TfinalB(i) = inicioB(i) + TservicioB(i): Cells(i + 6, 12).Value = Round(TfinalB(i), 2) comienzo(i) = Application.Max(inicioA(i), inicioB(i)): Cells(i + 6, 15).Value = Round(comienzo(i), 2) termina(i) = TfinalB(i): Cells(i + 6, 16).Value = Round(termina(i), 2) WB(i) = TfinalB(i) - Tmedido(i): Cells(i + 6, 13).Value = Round(WB(i), 2) WqB(i) = TfinalB(i) - Tmedido(i) - TservicioB(i): Cells(i + 6, 14).Value = Round(WqB(i), 2) inactivo(i) = comienzo(i) - termina(i - 1): Cells(i + 6, 17).Value = Round(inactivo(i), 2) End If End If Next i
230
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
L1 = (Application.Sum(Range("H7:H" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(17, 19).Value = Round(L1, 0) L2 = (Application.Sum(Range("M7:M" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(18, 19).Value = Round(L2, 0) Lq1 = (Application.Sum(Range("I7:I" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(19, 19).Value = Round(Lq1, 0) Lq2 = (Application.Sum(Range("N7:N" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(20, 19).Value = Round(Lq2, 0) WAprom = Application.Average(Range("H7:H" & (n + 6))): Cells(13, 19).Value = Round(WAprom, 2) WBprom = Application.Average(Range("M7:M" & (n + 6))): Cells(14, 19).Value = Round(WBprom, 2) WAqprom = Application.Average(Range("I7:I" & (n + 6))): Cells(15, 19).Value = Round(Wqprom, 2) WBprom = Application.Average(Range("N7:N" & (n + 6))): Cells(16, 19).Value = Round(WAprom, 2) P0 = (Application.Sum(Range("Q7:Q" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(21, 19).Value = P0 U = ((Application.Sum(Range("F7:F" & (n + 6)))) + (Application.Sum(Range("K7:K" & (n + 6))))) / (termina(n) - comienzo(1)) Cells(22, 19).Value = U Range("S21:S22").Select Selection.NumberFormat = "0.00%"Range("A1").SelectEnd Sub
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Erlang(k As Integer, lambda As Integer, min As Double) As DoubleY = 0R = RndM = (1 / k * lambda)For Z = 1 To kY = Y + Ln(1 - R)Next ZErlang = (-1) * M * Y + lambda * (min)End Function
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
231
Cole
cción
1
Modelo de líneas de espera con varios servidores en serie
Considérese un sistema que conste de n estaciones de servicio que se encuentra ope-rando en serie. Las unidades de entrada que llegan al sistema se admiten en la primera estación de servicio y luego pasan a las siguientes estaciones. El tiempo entre llegadas se considera una variable aleatoria con una distribución de probabilidad conocida. El tiempo de servicio de cada una de las n estaciones de servicio se toma también como una variable aleatoria, pero en forma tal que cada una de ellas tenga su propia distribu-ción de probabilidad dada para los tiempos de servicio.
Ejemplo 6.4
Una pieza se procesa en una línea de producción de dos máquinas en serie. Debido a la variabilidad en los materiales, el tiempo que se requiere para procesar en la primera máquina es una variable aleatoria con una distribución de probabilidad Gamma, con parámetro de forma igual a 3 minutos y parámetro de escala igual a 1 minuto; el tiempo necesario para procesar la pieza en la segunda máquina es una variable aleatoria con distri-bución Erlang, con parámetro de forma de 4 minutos y parámetro de escala de 2 minutos. El tiempo entre de llegadas de las piezas a la línea de producción es una variable aleatoria con distribución de probabilidad triangular con tiempo mínimo de 3,5 minutos, el tiempo más probable de 5 minutos y el tiempo pesimista de 6,5 minutos. El tiempo de tránsito que gasta la pieza de una máquina a otra está distribuido uniformemente entre 0,5 y 1 minuto.
Suponga que entre máquinas no se permite inventario amortiguador; por consi-guiente, el trabajador 2 debe esperar a que el trabajador 1 termine su trabajo antes de que pueda comenzar la máquina 2.
Se requiere determinar: a. La simulación de 30 piezas.b. Número de pieza en el sistema.
232
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
c. Número de pieza en la cola.d. Tiempo promedio que una pieza permanece en el sistema.e. Tiempo promedio que una pieza espera ser atendida.f. Porcentaje de utilización de las máquinas.g. Cuánto tiempo tomará el proceso de 30 piezas.
Para hacer la macro, se realizan previamente las cuadrículas con sus respectivos datos, con el fin de evitar realizar procedimientos muy extensos.
Procedimiento 6.4. Macro para la simulación de varios servidores en serie
Sub Cuadricular02()ActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Simulacion de Linea de Espera con Dos Servidores”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de Piezas”Range(“B2”).Select: ActiveCell.FormulaR1C1 = “Valor Mínimo del Tiempo de Llegada”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Valor Más Probable del tiempo de Llegada”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Valor Máximo del Tiempo de Llegada”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “El Valor de alfa”Range(“F2”).Select: ActiveCell.FormulaR1C1 = “El Valor de Beta”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Parámetro de forma(K)”Range(“H2”).Select: ActiveCell.FormulaR1C1 = “Parámetro de Escala (Lambda”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Tiempo Promedio de Llegada”Range(“A5”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de Utilizacion de Máquina 1”Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Número Promedio de Piezas en el Sistema (L)”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de Utilización de Máquina 2”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Número Promedio de Piezas en la Cola (Lq)”Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Tiempo Promedio de Proceso Máquina 1”
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
233
Cole
cción
1
Range("G4").Select: ActiveCell.FormulaR1C1 = "Tiempo Promedio de Espera de una Pieza en el Sistema (W)"Range("G5").Select: ActiveCell.FormulaR1C1 = "Tiempo Promedio de Proceso Máquina 2"Range("A6").Select: ActiveCell.FormulaR1C1 = "Piezas"Range("B6").Select: ActiveCell.FormulaR1C1 = "Tiempo Entrellegadas"Range("C6").Select: ActiveCell.FormulaR1C1 = "Tiempo Medido de Llegadas"Range("D6").Select: ActiveCell.FormulaR1C1 = "MAQUINA 1"Range("D7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Inicio de Servicio"Range("E7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Proceso (Min)"Range("F7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Despacho"Range("F7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Despacho"Range("G6").Select: ActiveCell.FormulaR1C1 = "Tiempo de Tránsito"Range("H6").Select: ActiveCell.FormulaR1C1 = "MAQUINA 2"Range("H7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Inicio de Servicio"Range("I7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Proceso (Min)"Range("J7").Select: ActiveCell.FormulaR1C1 = "Tiempo de Despacho"Range("K6").Select: ActiveCell.FormulaR1C1 = "Tiempo de Salida de los Procesos (Min)"Range("L6").Select: ActiveCell.FormulaR1C1 = "Tiempo de Espera en el Sistema (Min)"Range("M6").Select: ActiveCell.FormulaR1C1 = "Tiempo de Espera en la Cola (Min)"Range("A1:M1").SelectSelection.MergeSelection.Interior.ColorIndex = 6Range("A6:A7,B6:B7,C6:C7,D6:F6,G6:G7,H6:J6,K6:K7,L6:L7,M6:M7").SelectSelection.MergeRange("A1,A2:H3,A6:M7").SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("A2:H2,A6:M6").SelectSelection.Interior.ColorIndex = 46Range("A4:A5,C4:C5,E4:E5,G4:G5,I4:I5").SelectSelection.Interior.ColorIndex = 44Range("A2:H2,A6:M6").SelectSelection.Interior.ColorIndex = 46Range("D6,H6").SelectSelection.Interior.ColorIndex = 44End Sub
234
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Sub Etapaproceso3()Dim M As Double, TentreLlegadas(1 To 10000) As Double, Tmedido(1 To 10000) As Double, Tservicio1(1 To 10000)Dim t1(1 To 10000) As Double, t2(1 To 10000) As Double, salida(1 To 10000) As Double, Tservicio2(1 To 10000)Dim W(1 To 10000), Wq(1 To 10000) As Double, inicio1(1 To 10000) As Double, inicio2(1 To 10000) As DoubleDim a As Double, b As Double, c As Double, k As Integer, lambda As Integer, alfa As Integer, beta As IntegerDim Final1(1 To 10000), Final2(1 To 10000) As DoubleLimpiarCuadricular02N = InputBox(“Introduzca el número de piezas a procesar:”): Cells(3, 1).Value = Na = InputBox(“Digite el valor mínimo del tiempo de llegadas:”): Cells(3, 2).Value = ab = InputBox(“Digite el valor más probable del tiempo de llegadas:”): Cells(3, 3).Value = bc = InputBox(“Digite el valor máximo del tiempo de llegadas:”): Cells(3, 4).Value = calfa = InputBox(“Digite el parámetro de forma(alfa) del tiempo de proceso de la máquina 1:”): Cells(3, 5).Value = alfabeta = InputBox(“Digite el parámetro de escala(beta) del tiempo de proceso de la máquina 1:”): Cells(3, 6).Value = betak = InputBox(“Digite el parámetro de forma(k) del tiempo de proceso de la máquina 2:”): Cells(3, 7).Value = klambda = InputBox(“Digite el parámetro de escala del tiempo de proceso de la máquina 2:”): Cells(3, 8).Value = alfaRange(Cells(8, 1), Cells(N + 7, 13)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Interior.ColorIndex = 6 End WithRange(“A1”).SelectFor i = 1 To NCells(i + 7, 1).Value = iTentreLlegadas(i) = Round(TiempoEntreLlegadas(a, b, c), 2)Cells(i + 7, 2).Value = TentreLlegadas(i) If i = 1 Then Tmedido(1) = TentreLlegadas(1): Cells(i + 7, 3).Value = Tmedido(1) Else
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
235
Cole
cción
1
Tmedido(i) = Tmedido(i - 1) + TentreLlegadas(i): Cells(i + 7, 3).Value = Tmedido(i) End IfNext iFor j = 1 To N t1(j) = Round(Etapa1(alfa, beta), 2): t2(j) = Round(Etapa2(k, lambda), 2) R = Rnd: transito = Round((0.5 + 0.5 * R), 2) If j = 1 Then inicio1(1) = Tmedido(1): Cells(8, 4).Value = inicio1(1): Cells(8, 5).Value = t1(1) Final1(1) = inicio1(1) + t1(1): Cells(8, 6).Value = Final1(1) Cells(8, 7).Value = transito: inicio2(1) = Final1(1) + transito Cells(8, 8).Value = inicio2(1): Cells(8, 9).Value = t2(1) Final2(1) = inicio2(1) + t2(1): Cells(8, 10).Value = Final2(1) salida(1) = Final2(1): Cells(8, 11).Value = salida(1) W(1) = salida(1) - Tmedido(1): Cells(8, 12).Value = W(1) Wq(1) = 0: Cells(8, 13).Value = Wq(1) Else inicio1(j) = Application.Max(Tmedido(j), Final1(j - 1)): Cells(j + 7, 4).Value = inicio1(j) Cells(j + 7, 5).Value = t1(j) Final1(j) = inicio1(j) + t1(j): Cells(j + 7, 6).Value = Final1(j) Cells(j + 7, 7).Value = transito: inicio2(j) = Final1(j) + transito Cells(j + 7, 8).Value = inicio2(j): Cells(j + 7, 9).Value = t2(j) Final2(j) = inicio2(j) + t2(j): Cells(j + 7, 10).Value = Final2(j) salida(j) = Final2(j): Cells(j + 7, 11).Value = salida(j) W(j) = salida(j) - Tmedido(j): Cells(j + 7, 12).Value = W(j) Wq(j) = salida(j) - Tmedido(j) - (t1(j) + t2(j)): Cells(j + 7, 13).Value = Wq(j) End IfNext j tllprom = Application.Average(Range(“B8:B” & (N + 7))): Cells(4, 2).Value = Round(tllprom, 2) L = Application.Sum(Range(“L8:L” & (N + 7))) / (Final2(N) - Tmedido(1)): Cells(4, 4).Value = Round(L, 2) Lq = Application.Sum(Range(“M8:M” & (N + 7))) / (Final2(N) - Tmedido(1)): Cells(4, 6).Value = Round(Lq, 2) Wprom = Application.Average(Range(“L8:L” & (N + 7))): Cells(4, 8).Value = Round(Wprom, 2) Wqprom = Application.Average(Range(“M8:M” & (N + 7))): Cells(4, 10).Value = Round(Wqprom, 2) U1 = (Application.Average(Range(“E8:E” & (N + 7)))) / (Application.Average(Range(“B8:B” & (N + 7)))): Cells(5, 2).Value = U1 U2 = (Application.Average(Range(“I8:I” & (N + 7)))) / (Application.Average(Range(“B8:B” & (N + 7)))): Cells(5, 4).Value = U2 t1prom = Application.Average(Range(“E8:E” & (N + 7))): Cells(5, 6).Value = t1prom t2prom = Application.Average(Range(“I8:I” & (N + 7))): Cells(5, 8).Value = t2promEnd Sub
236
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Function TiempoEntreLlegadas(a As Double, b As Double, c As Double) As DoubleDim R1 As VariantR1 = RndIf N <= (b - a) / (c - a) ThenD1 = (c - a) * (b - a) * R1: Triangular = a + Sqr(D1)ElseD2 = (c - a) * (c - b) * (1 - R1): Triangular = c - Sqr(D2)End IfTiempoEntreLlegadas = TriangularEnd Function
Function Etapa1(alfa As Integer, beta As Integer) As DoubleDim R2 As VariantR2 = RndEtapa1 = Application.GammaInv(R2, alfa, beta)End Function
Function Max(X1 As Variant, X2 As Variant) As VariantMax = Excel.WorksheetFunction.Max(X1, X2)End Function
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Etapa2(k As Integer, lambda As Integer) As DoubleY = 0R3 = RndM = (1 / k * lambda)For Z = 1 To kY = Y + Ln(1 - R3)Next ZErlang = (-1) * M * YEtapa2 = ErlangEnd Function
Modelo de líneas de espera con varios servidores en paralelo
Cuando se tiene un sistema de n estaciones de servicio que se encuentra operando en paralelo, las unidades de entrada que llegan al sistema se admiten en la primera estación
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
237
Cole
cción
1
de servicio que está desocupada, de acuerdo con la regla: primera en llegar, primera en ser servida. El tiempo entre llegadas se considera una variable aleatoria con una distri-bución de probabilidad conocida.
El tiempo de servicio se toma también como una variable aleatoria, pero en forma tal que cada estación de servicio tenga su propia distribución de probabilidad dada para los tiempos de servicio. A la llegada de una unidad de entrada al sistema, se evalúan todas las n estaciones de servicio, a fin de determinar si alguna de ellas está desocupada en ese momento. Si todas ellas están ocupadas, entonces ocurre un tiempo de espera hasta que se desocupa alguna estación. Cuando una estación queda desocupada antes de que llegue otra unidad al sistema, ocurre un tiempo de inactividad que dura hasta la llegada de otra unidad que entre a la estación de servicio desocupada.
Ejemplo 6.5
Una pieza se ensambla en una línea de ensamblaje de dos estaciones en paralelo. Debido a la variabilidad en los materiales, el tiempo de proceso en cada estación es una variable aleatoria con distribución de probabilidad exponencial una media del tiempo entre llegadas de 2,0 minutos; de la misma manera, el tiempo entre llegadas se comporta como una variable aleatoria con media de 1,5 minutos.
Se requiere determinar: a. La simulación de 50 piezas.b. Número de pieza en el sistema.c. Número de pieza en la cola.d. Tiempo promedio que una pieza permanece en el sistema.e. Tiempo promedio que una pieza espera ser atendida.f. Porcentaje de inactividad de las dos estaciones.
238
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Procedimiento 6.5. Macro para la simulación de líneas de espera con dos servidores en paralelo
Sub Cuadricular03()ActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“D8”).Select: ActiveCell.FormulaR1C1 = “MODELO DE SIMULACION DE DOS ESTACIONES DE TRABAJO EN PARALELO”Range(“D9”).Select: ActiveCell.FormulaR1C1 = “Piezas”Range(“E9”).Select: ActiveCell.FormulaR1C1 = “Tiempo Entrellegadas”Range(“F9”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegadas”Range(“G9”).Select: ActiveCell.FormulaR1C1 = “ESTACION DE TRABAJO 1”Range(“G10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio”Range(“H10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Proceso (Min)”Range(“I10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“J10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inactividad”Range(“K9”).Select: ActiveCell.FormulaR1C1 = “ESTACION DE TRABAJO 2”Range(“K10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio”Range(“L10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Proceso (Min)”Range(“M10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“N10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Tiempo de Inactividad”Range(“O9”).Select: ActiveCell.FormulaR1C1 = “PIEZA”Range(“O10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Comienzo”Range(“P10”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Salida”Range(“Q10”).Select: ActiveCell.FormulaR1C1 = “W”Range(“R10”).Select: ActiveCell.FormulaR1C1 = “Wq”Range(“D8:R8”).SelectSelection.MergeSelection.Interior.ColorIndex = 6Range(“D9:D10,E9:E10,F9:F10,G9:J9,K9:N9,O9:R9”).SelectSelection.MergeRange(“D8,D9:R10”).SelectWith Selection
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
239
Cole
cción
1
.Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("D8,D9:F9,G10:R10").SelectSelection.Interior.ColorIndex = 44Range("G9,K9,O9").SelectSelection.Interior.ColorIndex = 19End Sub
Sub Dosservidores2()Dim Tentrellegadas(1 To 10000) As Double, Tmedido(1 To 10000) As Double, Final2(1 To 10000) As DoubleDim ts1(1 To 10000) As Double, Final1(1 To 10000) As Double, W(1 To 10000) As Double, salida(1 To 10000) As DoubleDim Wq(1 To 10000) As Single, ts2(1 To 10000) As Double, Tinicio(1 To 10000) As Double, inactivo2(1 To 10000) As DoubleDim inicio1(1 To 10000) As Double, inicio2(1 To 10000) As Double, inactivo1(1 To 10000) As DoubleLimpiarCuadricular03n = InputBox(“Introduzca el número de piezas a procesar:”): Cells(7, 4).Value = nmedia1 = InputBox(“Digite la media del tiempo entre llegadas:”): Cells(11, 20).Value = media1media2 = InputBox(“Digite la media del tiempo de servicio:”): Cells(12, 20).Value = media2Range(Cells(11, 4), Cells(n + 10, 18)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Interior.ColorIndex = 19 End With Range(Cells(11, 19), Cells(18, 20)).Select Selection.Interior.ColorIndex = 20 Range(“S11”).Select: ActiveCell.FormulaR1C1 = “Media del tiempo entre llegadas” Range(“S12”).Select: ActiveCell.FormulaR1C1 = “Media del tiempo de servicio” Range(“S13”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema”
240
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“S14”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en la cola” Range(“S15”).Select: ActiveCell.FormulaR1C1 = “Número promedio de de piezas en el sistema” Range(“S16”).Select: ActiveCell.FormulaR1C1 = “Número promedio de piezas en la cola” Range(“S17”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de tiempo de la Estación 1 desocupada” Range(“S18”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de tiempo de la Estación 2 desocupada” Columns(“S:S”).EntireColumn.AutoFit Range(Cells(11, 19), Cells(18, 20)).Select With Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithFor i = 1 To nCells(i + 10, 4).Value = iTentrellegadas(i) = Round(TiempoEntreLlegadas, 2): Cells(i + 10, 5).Value = Tentrellegadas(i)ts1(i) = Round(Tiemposervicio, 2): ts2(i) = Round(Tiemposervicio, 2) If i = 1 Then Tmedido(1) = Tentrellegadas(1): Cells(11, 6).Value = Tmedido(1) Else Tmedido(i) = Tmedido(i - 1) + Tentrellegadas(i): Cells(i + 10, 6).Value = Tmedido(i) End IfNext iinicio1(1) = Tmedido(1): Cells(11, 7).Value = inicio1(1)Cells(11, 8).Value = ts1(1): Final1(1) = inicio1(1) + ts1(1)Cells(11, 9).Value = Final1(1): Tinicio(1) = Tmedido(1): Cells(11, 15).Value = Tinicio(1)salida(1) = Max(Final1(1), Final2(1)): Cells(11, 16).Value = salida(1)For j = 2 To n If Tmedido(j) < Final1(j - 1) Then Final1(j) = Final1(j - 1): Final2(j) = Final2(j - 1) If Tmedido(j) < Final1(j - 1) Then If Final2(j - 1) < Final1(j - 1) Then inicio1(j) = Max(Final1(j - 1), Tmedido(j)) inicio2(j) = Max(Final2(j - 1), Tmedido(j)): Cells(j + 10, 11).Value = inicio2(j) Cells(j + 10, 12).Value = ts2(j): Final2(j) = inicio2(j) + ts2(j) Cells(j + 10, 13).Value = Final2(j): Tinicio(j) = inicio2(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final2(j): Cells(j + 10, 16).Value = salida(j) Else
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
241
Cole
cción
1
inicio2(j) = Max(Final2(j - 1), Tmedido(j)) inicio1(j) = Max(Final1(j - 1), Tmedido(j)): Cells(j + 10, 7).Value = inicio1(j) Cells(j + 10, 8).Value = ts1(j): Final1(j) = inicio1(j) + ts1(j) Cells(j + 10, 9).Value = Final1(j): Tinicio(j) = inicio1(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final1(j): Cells(j + 10, 16).Value = salida(j) End If End If Else Final2(j) = Final2(j - 1) If Tmedido(j) > Final1(j - 1) Then If Final2(j - 1) > Final1(j - 1) Then inicio2(j) = Max(Final2(j - 1), Tmedido(j)) inicio1(j) = Max(Final1(j - 1), Tmedido(j)): Cells(j + 10, 7).Value = inicio1(j) Cells(j + 10, 8).Value = ts1(j): Final1(j) = inicio1(j) + ts1(j) Cells(j + 10, 9).Value = Final1(j): Tinicio(j) = inicio1(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final1(j): Cells(j + 10, 16).Value = salida(j) Else Final1(j) = Final1(j - 1): Final2(j) = Final2(j - 1): inicio1(j) = Max(Final1(j - 1), Tmedido(j)) inicio2(j) = Max(Final2(j - 1), Tmedido(j)): Cells(j + 10, 11).Value = inicio2(j) Cells(j + 10, 12).Value = ts2(j): Final2(j) = inicio2(j) + ts2(j) Cells(j + 10, 13).Value = Final2(j): Tinicio(j) = inicio2(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final2(j): Cells(j + 10, 16).Value = salida(j) End If Else Final2(j) = Final2(j - 1) If Tmedido(j) < Final1(j - 1) Then If Final2(j - 1) < Final1(j - 1) Then inicio1(j) = Max(Final1(j - 1), Tmedido(j)) inicio2(j) = Max(Final2(j - 1), Tmedido(j)): Cells(j + 10, 11).Value = inicio2(j) Cells(j + 10, 12).Value = ts2(j): Final2(j) = inicio2(j) + ts2(j) Cells(j + 10, 13).Value = Final2(j): Tinicio(j) = inicio2(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final2(j): Cells(j + 10, 16).Value = salida(j) Else Final2(j) = Final2(j - 1): inicio2(j) = Max(Final2(j - 1), Tmedido(j)) inicio1(j) = Max(Final1(j - 1), Tmedido(j)): Cells(j + 10, 7).Value = inicio1(j) Cells(j + 10, 8).Value = ts1(j): Final1(j) = inicio1(j) + ts1(j) Cells(j + 10, 9).Value = Final1(j): Tinicio(j) = inicio1(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final1(j): Cells(j + 10, 16).Value = salida(j) End If
242
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
End If 'Final2(j) = Final2(j - 1) inicio2(j) = Max(Final2(j - 1), Tmedido(j)) inicio1(j) = Max(Final1(j - 1), Tmedido(j)): Cells(j + 10, 7).Value = inicio1(j) Cells(j + 10, 8).Value = ts1(j): Final1(j) = inicio1(j) + ts1(j) Cells(j + 10, 9).Value = Final1(j): Tinicio(j) = inicio1(j) Cells(j + 10, 15).Value = Tinicio(j): salida(j) = Final1(j): Cells(j + 10, 16).Value = salida(j) End If End IfNext jFor x = 1 To nIf x = 1 Theninactivo1(x) = 0: Cells(x + 10, 10) = inactivo1(x)inactivo2(x) = Final1(x): Cells(x + 10, 14) = inactivo2(x)W(1) = salida(1) - Tinicio(1): Cells(x + 10, 17) = Round(W(1), 2)Wq(1) = Tinicio(1) - Tmedido(1): Cells(x + 10, 18) = Wq(1)Elseinactivo1(x) = inicio1(x) - Final1(x - 1): Cells(x + 10, 10) = inactivo1(x)inactivo2(x) = inicio2(x) - Final2(x - 1): Cells(x + 10, 14) = inactivo2(x)W(x) = salida(x) - Tinicio(x): Cells(x + 10, 17) = Round(W(x), 2)Wq(x) = Tinicio(x) - Tmedido(x): Cells(x + 10, 18) = Wq(x)End IfNext xWprom = Application.Average(Range("Q11:Q" & (n + 10))): Cells(13, 20).Value = WpromWqprom = Application.Average(Range("R11:R" & (n + 10))): Cells(14, 20).Value = WqpromT1n = Application.Max(Range("I11:I" & (n + 10))) - Tmedido(1)T2n = Application.Max(Range("M11:M" & (n + 10))) - Tmedido(1)L = (Wprom / (Max(T1n, T2n))): Cells(15, 20).Value = LLq = (Wqprom / (Max(T1n, T2n))): Cells(16, 20).Value = LqP01 = (Application.Average(Range("J11:J" & (n + 10)))) / (T1n): Cells(17, 20).Value = P01P02 = (Application.Average(Range("N11:N" & (n + 10)))) / (T2n): Cells(18, 20).Value = P02Range("T17:T18").SelectSelection.NumberFormat = "0.00%"Range("A1").SelectEnd Sub
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
243
Cole
cción
1
Function TiempoEntreLlegadas() As DoubleDim R1 As VariantR1 = Rndmedia1 = Cells(11, 20).ValueTiempoEntreLlegadas = (-1) * (media1) * (Application.Ln(1 - R1))End Function
Function Tiemposervicio() As DoubleDim R2 As VariantR2 = Rndmedia2 = Cells(12, 20).ValueTiemposervicio = (-1) * (media2) * (Application.Ln(1 - R2))End Function
Function Max(X1 As Variant, X2 As Variant) As VariantMax = Excel.WorksheetFunction.Max(X1, X2)End Function
Sub Limpiar()Range("AA7").Select Selection.Copy Range("A11:Z10000").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContents Range("A1").SelectEnd Sub
Ejercicios
1. Supóngase una entidad de servicio que cuenta con una cajera. El tiempo entre llega-das es una variable aleatoria con distribución uniforme de 1 a 8 minutos; en cambio, el tiempo de servicio es una variable aleatoria con distribución también uniforme de 1 a 6 minutos. Simular para 30 clientes y analizar sus medidas de desempeño.
244
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
2. Se tiene una estación de servicio en la que se requiere saber el comportamiento del sis-tema cuando tanto el tiempo entre llegadas de los clientes como el tiempo de servicio se encuentran distribuidos exponencialmente con medias iguales a 10 y 3 minutos, respectivamente. Simular el sistema para un periodo 480 minutos para determinar:
a. Número de piezas en el sistema.b. Número de piezas en la cola.c. Tiempo promedio que un cliente permanece en el sistema.d. Tiempo promedio que un cliente espera ser atendido.e. Porcentaje de utilización de la estación.
3. La fabricación de un cierto producto consiste en tres etapas básicas con sus res-pectivas máquinas. El tiempo que se requiere para procesarlo en la primera etapa es una variable aleatoria con una distribución de probabilidad uniforme entre 8 y 10 minutos. El tiempo necesario para procesarlo en la segunda etapa es también una variable aleatoria que está distribuida exponencialmente con una media a 8 minutos. El tiempo necesario para dar terminada la tercera etapa se ajusta a una distribución normal con media igual a 5 minutos y desviación estándar de 2 minutos. El tiempo entre llegadas es una variable aleatoria que se ajusta a una distribución de probabilidad triangular con tiempo mínimo de 5 minutos; el tiempo más probable es 8,5 minutos y el tiempo pesimista es de 10 minutos. Determinar:
a. La simulación de 30 productos.b. Número de producto en el sistema.c. Número de producto en la cola.d. Tiempo promedio en que un producto permanece en el sistema.e. Tiempo promedio en que un producto espera ser atendido.f. Porcentaje de utilización de las máquinas.g. Cuánto tiempo tomará el proceso de 30 productos.
MODELOS DE S IMULACIÓN DE L ÍNEAS DE ESPERA CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
245
Cole
cción
1
4. Un centro mecanizado atendido por un operario recibe tres tipos de piezas: tipo A, tipo B y tipo C. Se ha estimado que los tipos de piezas llegan al centro mecanizado en la proporción del 35% para los del tipo A, 30% para los del tipo B y 35% para los del tipo C. El centro de mecanizado está acondicionado para recibir las piezas del cualquier tipo. El tiempo entre llegadas de las piezas es una variable aleatoria con distribución de probabilidad triangular y parámetros de 8, 10 y 15 minutos. El tiempo en que tarda en procesar la pieza de tipo A es una variable aleatoria que sigue una distribución exponencial con media de 12 minutos, mientras que el tiempo de procesamiento de la pieza de tipo B es también una variable aleatoria que sigue una distribución Erlang con parámetro de forma igual a 5, parámetro de escala igual a 2 y valor mínimo de 6 minutos. El tiempo de procesamiento de la pieza C se ajusta a un distribución de probabilidad uniforme entre 6 y 8 minutos. Simule para 30 piezas y obtenga las medidas de desempeño.
5. Dos tipos de piezas diferentes llegan a una instalación de producción atendida por un operario para su proceso. Las piezas de tipo 1 llegan con tiempos entre llegadas siguiendo una distribución lognormal, con una media de 12 horas y desviación estándar de 2,0 horas; las piezas de tipo 2 llegan con tiempos entre llegadas siguiendo una distribución exponencial de 15 horas. El tiempo de procesamiento en la ins-talación sigue una distribución de probabilidad con parámetros de 5, 6 y 8 horas para cualquiera de las dos piezas. Ejecute la simulación para 500 horas, determine el tiempo total promedio que permanece en el sistema y el número promedio de piezas en las colas designadas para las piezas que llegan.
6. Los viajeros llegan a la puerta número 3 de la terminal de transporte de Bogotá de acuerdo con una distribución de probabilidad de tiempo entre llegadas exponencial, con media de 1,5 minutos. El tiempo de viaje de la entrada a la oficina de su res-pectiva agencia de viajes se distribuye de forma uniforme entre 2 y 3 minutos. Los viajeros esperan en una sola línea hasta que uno de los dos agentes esté disponible
246
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
para brindarles el servicio. El tiempo de tiqueteo en minutos sigue una distribución de probabilidad Weibull con parámetros β = 8 y α = 4. Una vez terminado su tiqueteo, son libres de ir a su sala de espera. Ejecute la simulación por 16 horas para determinar el tiempo promedio que permanece en el sistema un viajero, el número de pasajeros que completan el tiqueteo y la longitud promedio de la cola en la agencia de viajes.
7. Supóngase que una entidad de servicio cuenta con dos cajeras en paralelo, el tiempo entre llegadas es una variable aleatoria con distribución exponencial, con media de 3,3 minutos; en cambio, el tiempo de servicio es una variable aleatoria con distribu-ción triangular, con tiempo mínimo 2 minutos, tiempo más probable 3,5 minutos y tiempo pesimista 4,5 minutos. Simular para 40 clientes y analizar sus medidas de desempeño.
8. Una agencia de viaje cuenta con 5 servidores en paralelo para atender a tres tipos de pasajeros: tipo A, tipo B y tipo C. Los pasajeros llegan de acuerdo con la proporción de 25%, 35% y 40%, respectivamente. La tasa de llegada de los pasajeros es de 45 por hora. El tiempo para documentar un pasajero es exponencial, con 6 minutos de promedio. Se requiere determinar:
a. La simulación de 50 pasajeros.b. Número de pasajero en el sistema.c. Número de pasajero en la cola.d. Tiempo promedio que un pasajero permanece en el sistema.e. Tiempo promedio que un pasajero espera ser atendido.f. Porcentaje de utilización de la agencia de viaje.
7Modelos de simulación de problemas
de inventarios con distribución de probabilidad teórica
En este capítulo se aborda la aplicación de los métodos de simulación a los mode-los de inventarios. Al igual que el capítulo anterior, dedicado al estudio de los fenómenos de espera, se comenzará describiendo brevemente lo que se entiende
por modelo de inventario, así como las características básicas asociadas a él.La simulación de los problemas de inventarios se realiza cuando la variable demanda
y el tiempo de entrega no se pueden conocer con certeza o con seguridad. Desde esta situación, hay que tomar decisiones en las que no hay suficientes existencias disponibles para satisfacer los pedidos de los clientes. Aún más, si se mantienen existencias (stock) para satisfacer la demanda promedio y el tiempo de entrega promedio, se agrega una cantidad de incremento al inventario llamada existencias de seguridad o inventario amortiguador, que fija el nivel de disponibilidad de existencias para amortiguar las variaciones de la demanda de los clientes y controlar la probabilidad de que ocurra un faltante de inventarios. Para gestionar los inventarios bajo esta situación, se requieren dos métodos para buscar una logística de servicio al cliente a través de los inventarios, a saber: 1) el método del punto de reorden y 2) el método de revisión periódica.
A continuación se describirán los parámetros y las variables que se utilizarán en esta sección:
a. Inv (t-1) = inventario inicial en el periodo t.b. Inv (t) = inventario final en el periodo t.c. B (t-1) = faltante inicial en el periodo t.
248
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
d. B (t) = faltante final en el periodo t.e. D (t) = demanda aleatoria en el periodo t.f. Q (t) = tamaño de lote de pedido en el periodo t.g. Csl = nivel de servicio de ciclo.h. PRO = punto de reorden.i. SS = stock de seguridad.j. C = costo unitario del producto ($/unidad).k. Ch = costo unitario de almacenamiento ($/unidad/periodo).l. Co = costo de ordenar o de pedido ($/orden).m. Z = factor de seguridad.n. TE = tiempo de entrega o lead time.o. Sd = desviación estándar de la demanda.p. S’d = desviación estándar de la demanda durante el tiempo de entrega.q. SL = nivel de servicio de producto (fill rate).r. Cs = costo unitario de faltante o déficit ($/unidad/periodo).s. N = número de órdenes.t. T = tiempo entre órdenes o pedido.u. AIL = nivel de inventario promedio.v. µ = demanda promedio durante el tiempo de entrega.w. CT = costo total.
Modelo de punto de reorden con demanda aleatoria y tiempo de entrega aleatorio
La demanda y el tiempo de entrega son variables aleatorias que siguen patrones proba-bilísticos; cada una se le asocia a una distribución de probabilidad para su respectivo tratamiento. La demanda se considera perpetua y actúa continuamente en el inventario para reducir su nivel. Cuando el inventario se reduce hasta el punto en el que su nivel
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
249
Cole
cción
1
sea igual o menor que la cantidad específica, llamada el punto de reorden, se coloca una cantidad económica de pedido (Q*) en el punto de suministro para reponer el inventa-rio. Hay riesgo de que la demanda exceda a la cantidad que queda en inventario durante el tiempo de entrega después de que se ha tomado la decisión de hacer nuevo pedido; la probabilidad de que esto ocurra se controla elevando o descendiendo el punto de reorden y ajustando Q*. La figura 7.1 describirá el comportamiento de la demanda de acuerdo con el modelo de punto reorden o sistema Q.
Figura 7.1. Distribución de probabilidad de la demanda del modelo de punto de re-orden
Escenarios de nivel de servicio
Existen dos escenarios que ocurren en cuanto al nivel de servicio (porcentaje o pro-babilidad de satisfacción de la demanda de los clientes), ambos relacionados con las probabilidades de faltantes.
Escenario 1. En este escenario existe la posibilidad o la probabilidad de no quedarse sin inventario durante el tiempo de entrega, esto es, en ningún ciclo de pedido. Con
250
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
frecuencia se llama nivel de servicio de ciclo (CSL); por tanto, CSL es la probabilidad de existencias en el almacén durante el tiempo de entrega.
Escenario 2. En este escenario se establece la fracción de la demanda anual (en uni-dades, órdenes de clientes) que se satisface de manera instantánea del inventario. Con frecuencia se conoce como el “fill rate” del artículo, que denotaremos como SL. Esta medida determina la cantidad de faltante durante cada tiempo de entrega. Por tanto:
SL = nivel de servicio de producto = probabilidad de satisfacer la demanda del artículo
Modelo de compra fija escenario 1:
Formulaciones básicas:
Derivando en función de Q, se tiene:
Bajo una macro de Excel, el valor de z se calcularía de la siguiente manera:“=NORMSINV (Prob)”
Evaluación del nivel de servicio de ciclo logrado por una política de inventario en particular.
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
251
Cole
cción
1
Modelo de compra fija escenario 2:ESC = faltante esperado por cicloEl tamaño del lote o pedido viene dado por:
La fórmula para el costo total se expresaría de la siguiente forma:
Ejemplo 7.1
La demanda mensual de un determinado producto es una variable aleatoria que se ajusta a una distribución de probabilidad normal, con media 55 unidades y una desviación estándar de 10 unidades. El tiempo de entrega es también una variable aleatoria con distribución uniforme entre 1 y 3 meses. El inventario inicial es de 150 unidades y se coloca un pedido de 200 unidades en forma fija para cada abastecimiento. El punto de reorden se considera de 80 unidades. La información con respecto a los costos relevantes es la siguiente:
Costos ValorPrecio de compra $ 50/unidadCosto de ordenar $ 100/orden
Costo unitario de almacenamiento $ 20/unidad/mesCosto unitario de faltante $ 52/unidad/mes
Realizar un experimento de simulación para 36 meses. La macro que se mostrará a continuación simula el sistema de inventario de punto reorden con los siguientes aspectos.
252
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
a. Prepara una cuadrícula para el desarrollo de la simulación.b. Genera la demanda aleatoria mediante una instrucción de D (i) = Round (Appli-
cation.NormInv(R, m, desv), 0)c. Genera el tiempo de entrega mediante una instrucción de Te (i) = min + (max
- min) * R1d. Captura de datos como inventario inicial, tamaño de pedido, punto de reorden
y los costos relevantes.e. Evalúa el inventario final si es menor que el punto de reorden para generar un
pedido con su respectiva orden.f. La espera del pedido coincide con el tiempo de entrega simulado.g. Calcula los costos totales.
Procedimiento 7.1. Macro para simular problema de inventario de modelo de punto de reorden
Sub Inventario()Dim Te(1 To 10000) As Integer, min As Integer, max As Integer, m As Double, desv As DoubleDim D(1 To 10000) As Long, P(1 To 10000) As Double, Pe(1 To 10000) As DoubleDim INV(0 To 10000) As Long, LT As Integer, b(0 To 10000) As LongDim n As Integer, R As Variant, Q As Long, PRO As Long, FOQ(1 To 10000) As LongDim CT(1 To 1000) As DoubleLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = nm = InputBox(“Digite el valor de media de la demanda:”)desv = InputBox(“Digite la desviación estándar de la demanda:”)min = InputBox(“Introduzca el valor mínimo del tiempo de entrega:”)max = InputBox(“Introduzca el valor máximo del tiempo de entrega:”)Cells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
253
Cole
cción
1
End WithRange(“A4,C3:K4”).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium End WithRange(“C3:K3”).SelectSelection.MergeActiveCell.FormulaR1C1 = “SIMULACION DE INVENTARIO MODELO DE PUNTO DE RE-ORDEN”Selection.Interior.ColorIndex = 6Range(“A4,C4:K4”).SelectSelection.Interior.ColorIndex = 45Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Mes”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Tamaño del pedido”Range(“F4”).Select: ActiveCell.FormulaR1C1 = “Inventario final”Range(“G4”).Select: ActiveCell.FormulaR1C1 = “Faltante”Range(“H4”).Select: ActiveCell.FormulaR1C1 = “Orden”Range(“I4”).Select: ActiveCell.FormulaR1C1 = “Número de orden”Range(“J4”).Select: ActiveCell.FormulaR1C1 = “Espera”Range(“K4”).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Inicial”INV(0) = InputBox(“Digite el inventario inicial:”): Cells(5, 6).Value = INV(0)b(0) = 0: Cells(5, 7).Value = b(0): Q = InputBox(“Digite el tamaño del pedido:”)Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Tamaño del lote”: Cells(1, 4).Value = QSelection.Interior.ColorIndex = 45PRO = InputBox(“Digite el punto de reorden:”)Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”Selection.Interior.ColorIndex = 45Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”Selection.Interior.ColorIndex = 45Range(“A4”).Select: ActiveCell.FormulaR1C1 = “T.entrega simulado”Cells(1, 6).Value = PRO: C = InputBox(“Dgite el costo unitario de compra:”)Co = InputBox(“Dgite el costo de ordenar:”): Ch = InputBox(“Dgite el costo unitario de almacena-miento:”)
254
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cs = InputBox(“Dgite el costo unitario de faltante:”)Range(Cells(1, 3), Cells(1, 8)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(5, 3), Cells(n + 5, 11)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithFor i = 1 To nCells(i + 5, 3).Value = iR = Rnd: D(i) = Round(Application.NormInv(R, m, desv), 0): Cells(i + 5, 4).Value = D(i)R1 = Rnd: Te(i) = min + (max - min) * R1: Cells(i + 5, 1).Value = Round(Te(i), 0)Next iRange(“A5:A” & (n + 5)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Interior.ColorIndex = 6End Withj = 6: cont = 0 For i = 1 To n INV(i) = Cells(i + 5, 6).Value: D(i) = Cells(i + 5, 4).Value FOQ(i) = Cells(i + 5, 5).Value: b(i) = Cells(i + 5, 7).Value INV(i) = INV(i - 1) - b(i - 1) + FOQ(i) + b(i) - D(i) If (INV(i) <= PRO) And (LT <= 0) Then cont = cont + 1: orden = 1 Cells(i + 5, 8).Value = orden: Cells(i + 5, 9).Value = cont Cells(i + 5, 10).Value = Cells(j, 1).Value
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
255
Cole
cción
1
j = j + 1 LT = Cells(i + 5, 10).Value If (i + 5 + (LT + 1)) <= n + 5 Then Cells(i + 5 + LT, 5).Value = Q End If Else Cells(i + 5, 8).Value = 0: Cells(i + 5, 9).Value = 0: Cells(i + 5, 10).Value = 0 End If If (INV(i) <= 0) Then Cells(i + 5, 6).Value = 0: Cells(i + 5, 7).Value = INV(i) * (-1) Else Cells(i + 5, 6).Value = INV(i): Cells(i + 5, 7).Value = 0 End If LT = LT - 1 Next i For i = 1 To n INV(i) = Cells(i + 5, 6).Value: D(i) = Cells(i + 5, 4).Value FOQ(i) = Cells(i + 5, 5).Value: b(i) = Cells(i + 5, 7).Value orden = Cells(i + 5, 8).Value CT(i) = C * FOQ(i) + Co * orden + Ch * INV(i) + Cs * b(i): Cells(i + 5, 11).Value = CT(i) Next i Cells(1, 8).Value = Application.Sum(Range(Cells(6, 11), Cells(n + 5, 11))) Range(Cells(6, 11), Cells(n + 5, 11)).Select: Selection.NumberFormat = "$ #,##0.00" Range("H1").Select: Selection.NumberFormat = "$ #,##0.00" Columns("H:H").ColumnWidth = 14.71 Range("A1").SelectEnd Sub
Ejemplo 7.2
La demanda diaria de un artículo es una variable aleatoria que es normalmente dis-tribuida con una media de 45 unidades y una desviación estándar de 15 unidades. El tiempo de entrega es también una variable aleatoria distribuida uniformemente entre 1 y 4 días. Asume que la demanda es independiente de un día al siguiente.
256
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
El inventario inicial es de 130 unidades y se coloca un pedido de tamaño de lote Q, determinada mediante la fórmula:
= µ = demanda promedio (media).CT (t) = costo total en el periodo t.C = costo unitario de compra.Co = costo de ordenar en el periodo.Ch = costo unitario de almacenamiento en el periodo t.Cs = costo unitario de faltante en el periodo t.N = número de órdenes de compra.
Siendo los costos relevantes:Costos Valor
Precio de compra $ 5/unidadCosto de ordenar $ 250/orden
Costo unitario de almacenamiento $ 0,55/unidad/diaCosto unitario de faltante $ 7,5/unidad día
El punto de reorden se determina mediante la fórmula:
= tiempo de entrega promedio =
La probabilidad de existencia durante el tiempo de entrega es 85%. Realizar un expe-rimento de simulación para 50 días. La macro que se mostrará a continuación simula el sistema de inventario de punto reorden con los siguientes aspectos:
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
257
Cole
cción
1
a. Prepara una cuadrícula para el desarrollo de la simulación.b. Genera la demanda aleatoria mediante una instrucción de D (i) = Round (Appli-
cation.NormInv(R, m, desv), 0)c. Genera el tiempo de entrega mediante una instrucción de Te (i) = min + (max
- min) * R1d. Captura de datos como inventario inicial, punto de reorden y los costos
relevantes.e. Evalúa el inventario final si es menor que el punto de reorden para generar un
pedido con su respectiva orden.f. La espera del pedido coincide con el tiempo de entrega simulado.g. Calcula los costos totales.
Procedimiento 7.2. Macro para simulación de inventario de modelo
de punto de reorden con tamaño de lote formulado
Sub Inventario03()Dim Te(1 To 10000) As Integer, min As Integer, max As Integer, miu As Double, desv As DoubleDim D(1 To 10000) As Long, P(1 To 10000) As Double, Pe(1 To 10000) As DoubleDim INV(0 To 10000) As Long, LT As Integer, b(0 To 10000) As LongDim n As Integer, R As Variant, Q As Long, nu As Double, nv As DoubleDim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As DoubleDim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As DoubleLimpiarActiveWindow.DisplayGridlines = Falsen = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = nmiu = InputBox(“Digite el valor de media de la demanda:”): Cells(2, 1).Value = miudesv = InputBox(“Digite la desviación estándar de la demanda:”)min = InputBox(“Introduzca el valor mínimo del tiempo de entrega:”)max = InputBox(“Introduzca el valor máximo del tiempo de entrega:”)Range(“A1:M200”).SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 11 .HorizontalAlignment = xlCenter
258
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.VerticalAlignment = xlCenter .WrapText = TrueEnd WithRange(“C3:K3”).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithSelection.MergeActiveCell.FormulaR1C1 = “SIMULACIÓN DE INVENTARIO MODELO DE PUNTO REORDEN”Range(“C4”).Select: ActiveCell.FormulaR1C1 = “Mes”Range(“D4”).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“E4”).Select: ActiveCell.FormulaR1C1 = “Tamaño del pedido”Range(“F4”).Select: ActiveCell.FormulaR1C1 = “Inventario final”Range(“G4”).Select: ActiveCell.FormulaR1C1 = “Faltante”Range(“H4”).Select: ActiveCell.FormulaR1C1 = “Orden”Range(“I4”).Select: ActiveCell.FormulaR1C1 = “Número de orden”Range(“J4”).Select: ActiveCell.FormulaR1C1 = “Espera”Range(“K4”).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Inicial”Range(“A4,C4:K4”).Select With Selection .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).LineStyle = xlContinuous .Borders(xlInsideHorizontal).Weight = xlMedium .Interior.ColorIndex = 45 End WithINV(0) = InputBox(“Digite el inventario inicial:”): Cells(5, 6).Value = INV(0)
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
259
Cole
cción
1
b(0) = 0: Cells(5, 7).Value = b(0)Csl = InputBox(“Digite la probabilidad de existencia durante el tiempo de entrega:”)c = InputBox(“Dgite el costo unitario de compra:”): Co = InputBox(“Dgite el costo de ordenar:”)Ch = InputBox(“Dgite el costo unitario de almacenamiento:”): Cs = InputBox(“Dgite el costo unitario de faltante:”)Z = Application.NormSInv(Csl): nu = (2 * miu * Co / Ch)nv = ((Ch + Cs) / Cs): Q = Round((Sqr(nu) * Sqr(nv)), 0)Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Tamaño del lote”: Selection.Interior.ColorIndex = 45Cells(1, 4).Value = Q: TEprom = ((min + max) / 2): PRO = Round((miu + Z * Sqr(TEprom) * desv), 0)Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”: Selection.Interior.ColorIndex = 45Cells(1, 6).Value = PRO: Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”Selection.Interior.ColorIndex = 45: Range(“A4”).Select: ActiveCell.FormulaR1C1 = “T.entrega simulado”Range(Cells(1, 3), Cells(1, 8)).Select With Selection .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).LineStyle = xlContinuous .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(5, 3), Cells(n + 5, 11)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithFor i = 1 To nCells(i + 5, 3).Value = i
260
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
R = Rnd: D(i) = Round(Application.NormInv(R, miu, desv), 0): Cells(i + 5, 4).Value = D(i)R1 = Rnd: Te(i) = (min + (max - min) * R1): Cells(i + 5, 1).Value = Round(Te(i), 0)Next iRange(“A5:A” & (n + 5)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd Withj = 6cont = 0 For i = 1 To n INV(i) = Cells(i + 5, 6).Value: D(i) = Cells(i + 5, 4).Value FOQ(i) = Cells(i + 5, 5).Value: b(i) = Cells(i + 5, 7).Value INV(i) = INV(i - 1) - b(i - 1) + FOQ(i) + b(i) - D(i) If (INV(i) <= PRO) And (LT <= 0) Then cont = cont + 1: orden = 1: Cells(i + 5, 8).Value = orden Cells(i + 5, 9).Value = cont: Cells(i + 5, 10).Value = Cells(j, 1).Value j = j + 1 LT = Cells(i + 5, 10).Value If (i + 5 + (LT + 1)) <= n + 5 Then Cells(i + 5 + LT, 5).Value = Q End If Else Cells(i + 5, 8).Value = 0: Cells(i + 5, 9).Value = 0: Cells(i + 5, 10).Value = 0 End If If (INV(i) <= 0) Then Cells(i + 5, 6).Value = 0: Cells(i + 5, 7).Value = INV(i) * (-1) Else Cells(i + 5, 6).Value = INV(i): Cells(i + 5, 7).Value = 0 End If LT = LT - 1 Next i For i = 1 To n INV(i) = Cells(i + 5, 6).Value: D(i) = Cells(i + 5, 4).Value FOQ(i) = Cells(i + 5, 5).Value: b(i) = Cells(i + 5, 7).Value orden = Cells(i + 5, 8).Value: CT(i) = c * FOQ(i) + Co * orden + Ch * INV(i) + Cs * b(i) Cells(i + 5, 11).Value = CT(i) Next i
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
261
Cole
cción
1
Cells(1, 8).Value = Application.Sum(Range(Cells(6, 11), Cells(n + 5, 11))) Range(Cells(6, 11), Cells(n + 5, 11)).Select Selection.NumberFormat = "$ #,##0.00" Range("H1").Select Selection.NumberFormat = "$ #,##0.00" Columns("H:H").ColumnWidth = 14.71 Range("A1").SelectEnd Sub
Modelo de revisión periódica con demanda aleatoria
En un sistema de periodo fijo solo se cuenta el inventario en momentos determinados, por ejemplo, cada semana o cada mes. El recuento de inventarios y la elaboración de pedidos de manera periódica son algo deseable cuando los proveedores realizan visitas rutinarias a los clientes y hacen pedidos de toda su línea de productos, o cuando los compradores quieren combinar pedidos para ahorrar costos de transportes.
Los modelos de periodos fijos generan cantidades de pedido variables de un periodo a otro; dependiendo de la tasa de uso, por lo general se requiere mayor nivel de existen-cias de seguridad que en un sistema de cantidad fija.
En las políticas de revisión periódica, los niveles de inventario se revisarán al cabo de un periodo fijo de tiempo T y se coloca una orden tal que el nivel de inventario actual más el tamaño de lote de reposición sea igual a un nivel preespecificado, llamado orden, hasta el nivel (OUL) o punto de nivel máximo.
262
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Figura 7.2. Distribución de probabilidad de la demanda de modelo de revisión periódica
Este modelo se puede describir en dos maneras:a. Modelo con tiempo de revisión periódica anticipado fijo.b. Modelo con tiempo de revisión periódica anticipado calculado.
Se determina el tamaño del lote o pedido con una antelación o anticipación de acuerdo con la suma de las demandas netas simuladas hasta el número de periodo fijo.
Se comienza a realizar el pedido anticipado cuando la demanda neta sea diferente a cero. Así pues, el procedimiento de simulación de este modelo de inventario consistirá en fijar un número determinado de pedidos en el horizonte de tiempo. Esto quiere decir: se divide el horizonte de tiempo de las demandas entre el número de periodo fijo para que sea igual al número de pedidos anticipados.
De esta forma, el modelo de inventario crea una situación sin faltantes de inventarios, porque siempre se satisface la demanda simulada en el horizonte de tiempo.
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
263
Cole
cción
1
Ejemplo 7.3
La demanda mensual de un artículo es una variable aleatoria normalmente distribuida con una media de 1500 unidades y una desviación estándar de 120 unidades. El inven-tario inicial es 4000 unidades. El costo unitario del producto es $20, el costo de ordenar es $1225, el costo unitario de almacenamiento es $0,30/unidad/mes. Realizar un experi-mento de simulación para 36 meses.
La macro que se mostrará a continuación simula el sistema de inventario con tiempo de revisión periódica anticipado fijo con los siguientes aspectos:
a. Genera la demanda bruta aleatoria mediante una instrucción: D (i) = Round (Application.NormInv(R, miu, desv), 0)
b. Determina la demanda neta.c. Captura de datos como inventario inicial y los costos relevantes.d. Determina cantidad de pedido de acuerdo con el requerimiento de periodo fijo.e. Determina número de pedido en el horizonte de tiempo.f. Calcula los costos totales.g. Llama el procedimiento denominado “Limpiar”.
Procedimiento 7.3. Macro para simular modelo de inventario
con tiempo de revisión periódica anticipado fijo
Sub Inventario06()Dim Te(1 To 10000) As Integer, min As Integer, max As Integer, miu As Double, desv As DoubleDim D(1 To 10000) As Long, ESC As Double, Ez As Double, SL As DoubleDim INV(0 To 10000) As Long, LT As Integer, B(0 To 10000) As Long, SS As DoubleDim n As Integer, R As Variant, Q As Long, nu As Double, Sdp As DoubleDim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As DoubleDim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As DoubleDim normal1, normal2 As Double, nrt(1 To 10000) As Long, TotalOrden As IntegerLimpiarActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection
264
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd Withn = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = nmiu = InputBox(“Digite el valor de media de la demanda:”): Cells(1, 6).Value = miudesv = InputBox(“Digite la desviación estándar de la demanda:”): Cells(2, 4).Value = desvRange(“C4:J5”).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium End WithRange(“C4:J4”).SelectSelection.MergeActiveCell.FormulaR1C1 = “SIMULACIÓN DE INVENTARIO MODELO DE REVISIÓN PERIÓDICA”Selection.Interior.ColorIndex = 6Range(“C5:J5”).SelectSelection.Interior.ColorIndex = 45Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Mes”Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Demanda bruta”Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Demanda Neta”Range(“F5”).Select: ActiveCell.FormulaR1C1 = “Tamaño del pedido”Range(“G5”).Select: ActiveCell.FormulaR1C1 = “Inventario final”Range(“H5”).Select: ActiveCell.FormulaR1C1 = “Orden”Range(“I5”).Select: ActiveCell.FormulaR1C1 = “Número de orden”Range(“J5”).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(“C6”).Select: ActiveCell.FormulaR1C1 = “Inicial”INV(0) = InputBox(“Digite el inventario inicial:”): Cells(6, 7).Value = INV(0)c = InputBox(“Digite el costo unitario de compra:”): Co = InputBox(“Digite el costo de ordenar:”)Ch = InputBox(“Digite el costo unitario de almacenamiento:”)Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Cantidad de periodo fijo”Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Demanda media”Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
265
Cole
cción
1
Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Desviación estándar de la demanda”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Total órdenes”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Costo promedio”Range(“C1:C2, E1:E2, G1:G2”).Select: Selection.Interior.ColorIndex = 45Rows(“1:1”).EntireRow.AutoFit: Rows(“2:2”).EntireRow.AutoFitColumns(“C:C”).ColumnWidth = 16.86Range(Cells(1, 3), Cells(2, 8)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(6, 3), Cells(n + 6, 10)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithFor i = 1 To nCells(i + 6, 3).Value = iR = Rnd: D(i) = Round(Application.NormInv(R, miu, desv), 0): Cells(i + 6, 4).Value = D(i)R1 = RndNext iINV(0) = Cells(6, 7).ValueFor x = 1 To nD(x) = Cells(x + 6, 4).Value: INV(x) = Cells(x + 6, 7).Value: nrt(x) = D(x) - INV(x - 1)Cells(x + 6, 6).Value = 0: Cells(x + 6, 8).Value = 0: Cells(x + 6, 9).Value = 0 If nrt(x) <= 0 Then INV(x) = INV(x - 1) - D(x): Cells(x + 6, 7).Value = INV(x) nrt(x) = 0: Cells(x + 6, 5).Value = nrt(x) Else Cells(x + 6, 5).Value = nrt(x) End If Next xRequerimientosFijo
266
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
For i = 1 To n If nrt(i) = 0 Then Cells(i + 6, 8).Value = 0: Cells(i + 6, 9).Value = 0 Else INV(i) = Cells(i + 6, 7).Value: nrt(i) = Cells(i + 6, 5).Value FOQ(i) = Cells(i + 6, 6).Value: INV(i) = INV(i - 1) + FOQ(i) - nrt(i): Cells(i + 6, 7).Value = INV(i) End If Next i TotalOrden = Application.max(Range(“I9:I” & (n + 8))): Cells(2, 6).Value = TotalOrden For i = 1 To n INV(i) = Cells(i + 6, 7).Value: nrt(i) = Cells(i + 8, 5).Value FOQ(i) = Cells(i + 6, 6).Value: orden = Cells(i + 6, 8).Value CT(i) = c * FOQ(i) + Co * orden + Ch * INV(i): Cells(i + 6, 10).Value = CT(i) Next i Cells(1, 8).Value = Application.Sum(Range(Cells(6, 10), Cells(n + 6, 10))) Cells(2, 8).Value = Application.Average(Range(Cells(6, 10), Cells(n + 6, 10))) Range(Cells(6, 10), Cells(n + 6, 10)).Select: Selection.NumberFormat = "$ #,##0.00" Range("H1:H2").Select: Selection.NumberFormat = "$ #,##0.00" Columns("H:H").ColumnWidth = 18 Range("A1").SelectEnd Sub
Sub RequerimientosFijo()Dim SS, req As Integer, busq As Variant, FOQ(1 To 10000) As Long, INV(0 To 10000) As LongDim nrt(1 To 10000) As Long, B(0 To 10000) As Longn = Cells(1, 1).Value: INV(0) = Cells(6, 7).Valuecomenzar10:Mensaje9 = “Cual es el Periodo de Orden Fijo”: req = InputBox(Mensaje9)If req = 0 ThenMsgBox “El Periodo de Orden Fijo no puede ser igual cero”, vbOKOnly, “ ! ERROR!”GoTo comenzar10End IfIf req >= n ThenMsgBox “El Periodo de Orden Fijo no puede ser mayor o igual al número de corridas”, vbOKOnly, “! ERROR!”GoTo comenzar10ElseCells(1, 4).Value = reqEnd If
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
267
Cole
cción
1
l = 1For x = 1 To nnrt(x) = Cells(x + 6, 5).ValueNext xDo While l <= nIf nrt(l) = 0 ThenFOQ(l) = 0: Cells(l + 6, 6).Value = FOQ(l): l = l + 1ElseExit DoEnd IfLoopcoc = (Int((n - l) / req) + 1): y = 0: cont = 0For x = 1 To cocSum = 0 For w = l + y To req - 1 + l + y Sum = Sum + nrt(w)
Next w cont = cont + 1: orden = 1: Cells((l + y + 6), 6).Value = Sum Cells(l + y + 6, 8).Value = orden: Cells(l + y + 6, 9).Value = cont: y = y + reqNext xEnd Sub
Modelo con tiempo de revisión periódica anticipado calculado
Se determina el tamaño del lote o pedido con una antelación o anticipación, de acuerdo con la suma de las demandas netas simuladas hasta el número de periodo calculado a través de:
T = periodo de revisión anticipado
= demanda promedio
268
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Se comienza a realizar el pedido anticipado cuando la demanda neta sea diferente a cero. Así pues, el procedimiento de simulación de este modelo de inventario consistirá en fijar un número determinado de pedidos en el horizonte de tiempo. Esto quiere decir: se divide el horizonte de tiempo de las demandas entre el número de periodo calculado para que sea igual al número de pedidos anticipados.
De esta forma, el modelo de inventario crea una situación sin faltantes de inventarios, porque siempre se satisface la demanda simulada en el horizonte de tiempo.
Ejemplo 7.4
La demanda mensual de un artículo es una variable aleatoria que es normalmente dis-tribuida con una media de 1500 unidades y una desviación estándar de 120 unidades. El inventario inicial es 4000 unidades. El costo unitario del producto es $5, el costo de ordenar es $1225, el costo unitario de almacenamiento es $0,30/unidad/mes. Realizar un experimento de simulación para 36 meses.
Procedimiento 7.4. Macro para simular modelo de inventario con
tiempo de revisión periódica anticipado calculado
Sub Inventario07()Dim Te(1 To 10000) As Integer, min As Integer, max As Integer, miu As Double, desv As DoubleDim D(1 To 10000) As Long, ESC As Double, Ez As Double, SL As DoubleDim INV(0 To 10000) As Long, LT As Integer, B(0 To 10000) As Long, SS As DoubleDim n As Integer, R As Variant, Q As Long, nu As Double, Sdp As DoubleDim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As DoubleDim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As DoubleDim normal1, normal2 As Double, nrt(1 To 10000) As Long, TotalOrden As IntegerLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:L200”).SelectWith Selection .Font.Bold = True
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
269
Cole
cción
1
.Font.Name = “Arial” .Font.Size = 12 .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = TrueEnd Withn = InputBox(“Cuál es el número de corridas:”): Cells(1, 2).Value = nmiu = InputBox(“Digite el valor de media de la demanda:”): Cells(1, 6).Value = miudesv = InputBox(“Digite la desviación estándar de la demanda:”): Cells(2, 4).Value = desvRange(“C4:J4”).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithSelection.MergeActiveCell.FormulaR1C1 = “SIMULACIÓN DE INVENTARIO MODELO DE REVISIÓN PERIÓDICA” Range(“C5”).Select: ActiveCell.FormulaR1C1 = “Mes” Range(“D5”).Select: ActiveCell.FormulaR1C1 = “Demanda bruta” Range(“E5”).Select: ActiveCell.FormulaR1C1 = “Demanda Neta” Range(“F5”).Select: ActiveCell.FormulaR1C1 = “Tamaño del pedido” Range(“G5”).Select: ActiveCell.FormulaR1C1 = “Inventario final” Range(“H5”).Select: ActiveCell.FormulaR1C1 = “Orden” Range(“I5”).Select: ActiveCell.FormulaR1C1 = “Número de orden” Range(“J5”).Select: ActiveCell.FormulaR1C1 = “Costo total” Range(“C6”).Select: ActiveCell.FormulaR1C1 = “Inicial” Range(“C5:J5”).Select With Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlInsideVertical).Weight = xlMedium .Borders(xlInsideHorizontal).Weight = xlMedium .Interior.ColorIndex = 45 End WithINV(0) = InputBox(“Digite el inventario inicial:”): Cells(6, 7).Value = INV(0)c = InputBox(“Digite el costo unitario de compra:”): Cells(1, 8).Value = c
270
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Co = InputBox(“Digite el costo de ordenar:”): Cells(2, 8).Value = CoCh = InputBox(“Digite el costo unitario de almacenamiento:”): Cells(2, 2).Value = ChRange(“A1”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Costo unitario de almacenamiento”Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Cantidad de orden periódica”Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Demanda media”Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo Unitario”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Desviación estándar de la demanda”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Total órdenes”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Costo de Ordenar”Range(“I1”).Select: ActiveCell.FormulaR1C1 = “Costo total”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Costo promedio”Range(“A1:A2,C1:C2, E1:E2, G1:G2,I1:I2”).Select: Selection.Interior.ColorIndex = 45Rows(“1:1”).EntireRow.AutoFit: Rows(“2:2”).EntireRow.AutoFit: Columns(“I:I”).ColumnWidth = 16.86Range(Cells(1, 1), Cells(2, 10)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithRange(Cells(6, 3), Cells(n + 6, 10)).SelectWith Selection .Interior.ColorIndex = 6 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithFor i = 1 To nCells(i + 6, 3).Value = iR = RndD(i) = Round(Application.NormInv(R, miu, desv), 0): Cells(i + 6, 4).Value = D(i)Next iINV(0) = Cells(6, 7).ValueFor x = 1 To nD(x) = Cells(x + 6, 4).Value: INV(x) = Cells(x + 6, 7).Value: nrt(x) = D(x) - INV(x - 1)
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
271
Cole
cción
1
Cells(x + 6, 6).Value = 0: Cells(x + 6, 8).Value = 0: Cells(x + 6, 9).Value = 0 If nrt(x) <= 0 Then INV(x) = INV(x - 1) - D(x): Cells(x + 6, 7).Value = INV(x): nrt(x) = 0: Cells(x + 6, 5).Value = nrt(x) Else Cells(x + 6, 5).Value = nrt(x) End If Next xCantidadPeriodica For i = 1 To n If nrt(i) = 0 Then Cells(i + 6, 8).Value = 0: Cells(i + 6, 9).Value = 0 Else INV(i) = Cells(i + 6, 7).Value: nrt(i) = Cells(i + 6, 5).Value FOQ(i) = Cells(i + 6, 6).Value: INV(i) = INV(i - 1) + FOQ(i) - nrt(i): Cells(i + 6, 7).Value = INV(i) End If Next i TotalOrden = Application.max(Range("I9:I" & (n + 8))): Cells(2, 6).Value = TotalOrden For i = 1 To n INV(i) = Cells(i + 6, 7).Value: nrt(i) = Cells(i + 8, 5).Value FOQ(i) = Cells(i + 6, 6).Value: orden = Cells(i + 6, 8).Value CT(i) = c * FOQ(i) + Co * orden + Ch * INV(i): Cells(i + 6, 10).Value = CT(i) Next i Cells(1, 10).Value = Application.Sum(Range(Cells(6, 10), Cells(n + 6, 10))) Cells(2, 10).Value = Application.Average(Range(Cells(6, 10), Cells(n + 6, 10))) Range(Cells(6, 10), Cells(n + 6, 10)).Select Selection.NumberFormat = "$ #,##0.00" Range("B2,H1:H2,J1:J2").Select: Selection.NumberFormat = "$ #,##0.00" Range("A1").SelectEnd Sub
Sub CantidadPeriodica()Dim poq As Integer, FOQ(1 To 10000) As Long, INV(0 To 10000) As LongDim nrt(1 To 10000) As Long, B(0 To 10000) As Long, num As DoubleWorksheets(“Hoja1”).Activatecomenzar:n = Cells(1, 2).Value: INV(0) = Cells(6, 7).Valueinicio:Ch = Cells(2, 2).Value: Co = Cells(2, 8).Value
272
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
c = Cells(1, 8).Value: miu = Cells(1, 6).ValueIf Ch = 0 ThenMsgBox “El costo de almacenamiento no puede ser igual cero”, vbOKOnly, “! ERROR!”Ch = InputBox(“Digite el costo unitario de almacenamiento”): Cells(2, 2).Value = ChGoTo inicioEnd IfIf (miu = 0) ThenMsgBox “La Demanda Promedio no Puede ser igual a cero”, vbOKOnly, “!! ERROR!!”miu = InputBox(“Cual es la Nueva Demanda promedio por periodo: “): Cells(1, 6).Value = miuEnd Ifnum = ((2 * miu * Co) / Ch): EOQ = Sqr(num): poq = Round(EOQ / miu, 0)If poq = 0 ThenMsgBox “La Cantidad de Orden periódica no puede ser igual cero”, vbOKOnly, “! ERROR!”GoTo comenzarEnd IfIf poq >= n ThenMsgBox “La Cantidad de Orden periódica no puede ser mayor o igual al número de corridas”, vbOKOnly, “ ! ERROR!”GoTo comenzarElseCells(1, 4).Value = poqEnd Ifl = 1For x = 1 To nnrt(x) = Cells(x + 6, 5).ValueNext xDo While l <= nIf nrt(l) = 0 ThenFOQ(l) = 0: Cells(l + 6, 6).Value = FOQ(l)l = l + 1ElseExit DoEnd IfLoopcoc = Int((n - l) / poq) + 1y = 0: cont = 0For x = 1 To cocSum = 0 For w = l + y To poq - 1 + l + y
MODELOS DE S IMULACIÓN DE PROBLEMAS DE INvENTARIOS CON DISTRIBUCIÓN DE PROBABIL IDAD TEÓRIC A
273
Cole
cción
1
Sum = Sum + nrt(w) Next w cont = cont + 1: orden = 1 Cells((l + y + 6), 6).Value = Sum: Cells(l + y + 6, 8).Value = orden Cells(l + y + 6, 9).Value = cont: y = y + poqNext xEnd Sub
Ejercicios
1. La demanda semanal de un producto de la compañía es normalmente distribuida con una media de 2.500 unidades y una desviación estándar de 500 unidades. El proveedor se toma un tiempo de entrega de 2 semanas para reponer el inventario de la compañía, el almacenista de la compañía ha decidido revisar el inventario cada 4 semanas. La probabilidad de existencias durante el tiempo de entrega es de 90%. Simular 36 meses para determinar el punto de nivel máximo (OUL), el número esperado de faltante y el nivel promedio de inventario.
2. La demanda diaria de un producto es normalmente distribuida con una media de 10 unidades, con una desviación estándar de 3 unidades. El periodo de revisión es de 3 días y el tiempo de entrega es una variable aleatoria distribuida uniformemente entre 1 y 3 días. La gerencia ha establecido como política satisfacer el 98% de la demanda a partir de los artículos en existencia. El punto de nivel máximo es de 445 unidades. Simular 60 días para determinar la cantidad esperada de faltante por ciclo de reposición.
3. La demanda mensual de un artículo es una variable aleatoria que es normalmente distribuida con una media de 45 unidades y una desviación estándar de 15 unidades.
274
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
El tiempo de entrega es también una variable aleatoria distribuida normalmente con una media de 1,5 meses y una desviación estándar de 0,25. Asume que la demanda es independiente de un mes al siguiente. Evaluar el nivel de servicio de ciclo, donde el tamaño de pedido es 200 unidades y se activa una orden cuando el nivel de inventario alcanza 50 unidades.
4. La demanda diaria de un artículo es una variable aleatoria normalmente distribuida con una media de 285 unidades y una desviación estándar de 13 unidades.
El tiempo de entrega es también una variable aleatoria distribuida uniformemente (0.5, 2.5). Asume que la demanda es independiente de un día al siguiente. Se inicia con inventario de 350 unidades, en el cual el tamaño de pedido es 1200 unidades y se activa una orden cuando el nivel de inventario alcanza 60 unidades. El costo unitario variable $5, el costo de ordenar es igual $450, costo unitario de almacena-miento es $0,5 /unidad/día y el costo unitario faltante es $ 3,5/unidad/día.Simule el sistema para 50 días y determine con qué frecuencia deben hacerse los pedidos.
5. Una empresa comercializa un determinado producto cuya demanda diaria es una variable aleatoria con distribución uniforme entre 10 y 90 unidades diarias. El sis-tema de ordenar el pedido es mediante el número de periodos de anticipación, cuyo tamaño del lote es la suma de la cantidad demandada durante el periodo anticipa-ción. El periodo de anticipación es también una variable aleatoria con distribución uniforme entre 2 y 4 días. El inventario inicial es 190 unidades
Se supone que cada producto producido tiene un costo de $ 1.500, el costo de alistamiento es de $6.000 por cada orden de pedido, el costo de mantenimiento del inventario es $84 por cada unidad por día y el costo unitario de faltante es $1.500 por cada unidad por día. Simular este problema de producción para 30 días.
8Validación de resultados y diseño
de experimentos de simulación
Validación del modelo de simulación
El propósito de realizar una validación del modelo de simulación es comprobar la con-sistencia entre un sistema del mundo real y el modelo de simulación que supuestamente representa al sistema de referencia. Todas estas son medidas preventivas, como podría ser encontrar algunos tipos de errores, por ejemplo, la búsqueda de errores en la progra-mación. El éxito de una validación es establecer una base de confianza en los resultados que genera el modelo bajo nuevas condiciones. Si un modelo no puede reproducir el comportamiento del sistema sin sensibilizar algún cambio, difícilmente podemos espe-rar que produzca resultados verdaderamente representativos con cambio.
Al validar un modelo de simulación se tiene el problema de cómo debe existir seme-janza con el sistema real; en otras palabras, establecer criterios que sean aplicables para aceptar un modelo de simulación como una representación válida.
En este capítulo se ofrece un aspecto de la validación que debe considerarse como una condición mínima para ajustar un modelo de simulación con el sistema real; esto quiere decir: utilizar un proceso comparativo entre el modelo y el sistema real.
276
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Para llevar a cabo este proceso, se requiere utilizar las pruebas estadísticas siguientes:a. Prueba de Fisher (prueba F), prueba t de Student y pruebas normales.b. Prueba de medias Mann-Whitney para probar estimaciones de los parámetros
de la población que no son dependientes de la suposición de una distribución implícita.
c. Prueba Chi-cuadrado (X2), prueba de Kolomogorov-Smirnov.
Prueba Chi-cuadrado para la simulación de Montecarlo
La siguiente prueba permitirá comprobar si, una vez que se tiene una generación de variables aleatorias simuladas, estas provienen de una distribución empírica discreta específica. Para realizar esta prueba se parte del siguiente ejemplo: supóngase ahora que la demanda mensual de un producto es aleatoria, con la siguiente distribución de probabilidad empírica discreta.
Demanda mensual (unidades) Probabilidad de ocurrencia85 0,05110 0,10130 0,15145 0,20150 0,12165 0,15175 0,13190 0,05200 0,05
Esta prueba se llevará a cabo mediante una macro que se mostrará a continuación.
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
277
Cole
cción
1
Procedimiento 8.1. Macro para realizar la prueba Chi-cuadrado con aplicación de Montecarlo
Sub SimularDemanda()Dim miu, sigma As Double, rango As Range, D(1 To 1000) As IntegerDim x(1 To 1000) As Long, P(1 To 1000) As DoubleDim V(1 To 1000) As Double, sigmacuad As DoubleDim alfa, nivel, chicero, chialfa As DoubleDim n As Integer, NA As VariantDim FO(1 To 1000), FE(1 To 1000) As IntegerDim r(1 To 1000), dif(1 To 1000) As DoubleLimpiarActiveWindow.DisplayGridlines = FalseRange(“A1:Q200”).Select With Selection .Font.Bold = True .Font.Size = 12 .Font.Name = “Arial” .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End WithRange(“B2”).Select: ActiveCell.FormulaR1C1 = “Demanda”Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Prob. acumulada”Range(“E2”).Select: ActiveCell.FormulaR1C1 = “Cota inferior de Ri”Range(“F2”).Select: ActiveCell.FormulaR1C1 = “Cota Superior de Ri”Range(“G2”).Select: ActiveCell.FormulaR1C1 = “Demanda”Rows(“2:2”).RowHeight = 45Inicio:k = InputBox(“Cuántos datos o eventos a introducir: (No debe ser mayor que 1000)”)If (m > 1000) ThenGoTo InicioEnd If‘CuadricularRange(“B2:G” & (k + 2)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin
278
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End Withcomenzar:Sum = 0: Cells(3, 5).Value = 0: miu = 0For i = 1 To kx(i) = InputBox(“Cuál es el valor de la variable aleatoria X” & i)Cells(i + 2, 2).Value = x(i): Cells(i + 2, 7).Value = x(i)P(i) = InputBox(“Cuál es la probabilidad de la variable aleatoria X” & i)Cells(i + 2, 3).Value = P(i)Sum = Sum + P(i)Cells(i + 2, 4).Value = Sum: Cells(i + 2, 6).Value = SumCells(i + 3, 5).Value = Sum: miu = miu + x(i) * P(i)Next iCells(k + 3, 5).Value = “”If (Sum > 1) ThenRange(“B3:G” & (k + 3)).ClearContentsGoTo comenzarEnd IfSet rango = Worksheets(1).Range(“$E$3:$G$” & (k + 2))n = InputBox(“Cuál es el número de corridas:”)Range(“B” & (k + 4)).SelectActiveCell.FormulaR1C1 = “La media es”: Cells(k + 4, 3).Value = miu‘Calculo de la varianzasigmacuad = 0For i = 1 To ksigmacuad = sigmacuad + ((x(i) - miu) ^ 2) * P(i)Next iRange(“B” & (k + 5)).Select: ActiveCell.FormulaR1C1 = “La varianza es”Cells(k + 5, 3).Value = sigmacuad‘Calculo de la desviación standardRange(“B” & (k + 6)).Select: ActiveCell.FormulaR1C1 = “La desviación Standard es”sigma = Sqr(sigmacuad): Cells(k + 6, 3).Value = sigmaColumns(“B:B”).ColumnWidth = 13.71: Rows(k + 6).RowHeight = 51Range(“B” & (k + 7)).Select: ActiveCell.FormulaR1C1 = “El número de corrida es”Cells(k + 7, 3).Value = nRange(“H2”).Select: ActiveCell.FormulaR1C1 = “Número de Observaciones”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Números aleatorios”Range(“J2”).Select: ActiveCell.FormulaR1C1 = “Demanda Aleatoria”Range(“K2”).Select: ActiveCell.FormulaR1C1 = “Intervalo”
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
279
Cole
cción
1
Range(“L2”).Select: ActiveCell.FormulaR1C1 = “FOi”Range(“M2”).Select: ActiveCell.FormulaR1C1 = “FEi”Range(“N2”).Select: ActiveCell.FormulaR1C1 = “(FOi - FEi)²/FEi”Range(“H2:J” & (n + 2)).Select With Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin End WithFor i = 1 To nCells(i + 2, 8).Value = ir(i) = Rnd: Cells(i + 2, 9).Value = r(i): NA = Cells(i + 2, 9).ValueD(i) = Application.VLookup(NA, rango, 3): Cells(i + 2, 10).Value = D(i)Next iRange(“B” & (k + 8)).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivelCells(k + 8, 3) = alfa: m = Round(Sqr(n), 0)Range(“B” & (k + 9)).Select: ActiveCell.FormulaR1C1 = “Números de intervalos”Cells(k + 9, 3).Value = mRange(“B” & (k + 10)).Select: ActiveCell.FormulaR1C1 = “Grado de libertad”g = m - 1: Cells(k + 10, 3).Value = gRange(“B” & (k + 11)).Select: ActiveCell.FormulaR1C1 = “valor Crítico”chialfa = Application.ChiInv(Cells(k + 8, 3), Cells(k + 10, 3)): Cells(k + 11, 3).Value = chialfachicero = 0: DMin = Application.Min(Range(“B2:B” & (k + 2)))DMax = Application.Max(Range(“B2:B” & (k + 2)))interv = ((DMax - DMin) / m): y = (DMin - 1)For i = 1 To mCells(i + 2, 11) = Str(y) + “ - “ + Str((y + interv)): FO(i) = 0For j = 1 To nIf D(j) > y And D(j) <= (y + interv) ThenFO(i) = FO(i) + 1End IfNext jCells(i + 2, 12).Value = FO(i): y = y + intervFE(i) = (n / m): Cells(i + 2, 13).Value = FE(i)dif(i) = ((FO(i) - FE(i)) ^ 2) / FE(i): Cells(i + 2, 14).Value = dif(i)chicero = chicero + dif(i)
280
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Next iRange("B" & (k + 12)).Select: ActiveCell.FormulaR1C1 = "El estadístico"Cells(k + 12, 3).Value = chiceroColumns("N:N").EntireColumn.AutoFitIf chicero < chialfa Thenaceptacion = MsgBox("No se rechaza que las variables aleatorias generadas provienen" _& " de una distribución empírica ", vbInformation)Else: rechazo = MsgBox("Se rechaza que las variables aleatorias generadas provienen" _& " de una distribución empírica ", vbInformation)End IfRange("B2").SelectEnd Sub
Prueba F o prueba de Fisher
Para realizar esta prueba, denotamos los siguientes:Vm = varianza del modelo de simulación.Vr = varianza de los valores reales.La hipótesis sobre la varianza sería:
H0: Vm = VrHa: Vm ≠ Vr
n1 = tamaño de la muestra del modelon2 = tamaño de la muestra de los valores reales
Ejemplo 8.2 Una empresa utilizó un modelo de simulación de la demanda semanal con dis-
tribución de probabilidad Weibull, con parámetros α =15, β= 85 y valor mínimo 50, obteniendo 10 datos de demanda.
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
281
Cole
cción
1
La situación real de la demanda semanal arrojó los siguientes datos: 108, 99, 115, 95, 104, 118, 110, 97. Realizar la prueba F mediante un procedimiento en macro de Excel. La macro para realizar prueba F es la siguiente:
Procedimiento 8.2. Macro para realizar la prueba F para un modelo simulado
Sub PruebaF()Dim alfa, nivel, Fcero, Falfa As DoubleDim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As DoubleDim Vm, Vr As DoubleLimpiarActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd With respuesta = MsgBox(“Para iniciar este aplicativo debe haberse obtenido los valores simulados” & _ “ partiendo de la celda D4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd IfRange(“C3”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Modelo”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Real”Range(“C3:E3”).SelectSelection.Interior.ColorIndex = 6n1 = InputBox(“Introduzca el número de corridas del modelo :”): Cells(4, 2).Value = n1Range(“C4:E” & (n1 + 3)).SelectSelection.Interior.ColorIndex = 19For i = 1 To n1Cells(i + 3, 3).Value = i
282
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Next iGenerarvariablesWeibulln2 = InputBox("Introduzca el número de datos reales :")For i = 1 To n2x2(i) = InputBox("Entre el valor real " & i): Cells(i + 3, 5).Value = x2(i)Next iVm = Cells(n1 + 5, 5).ValueVr = Application.Var(Range("E4:E" & (n2 + 3)))Fcero = (Vr / Vm)Range("A4").Select: ActiveCell.FormulaR1C1 = "Tamaño de la muestra del modelo"Range("A5").Select: ActiveCell.FormulaR1C1 = "Tamaño de la muestra del real"Cells(5, 2).Value = n2Range("A6").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del modelo"Cells(6, 2).Value = VmRange("A7").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del real"Columns("A:A").EntireColumn.AutoFitCells(7, 2).Value = VrRange("A8").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(8, 2) = alfaRange("A9").Select: ActiveCell.FormulaR1C1 = "Valor Fo"Cells(9, 2).Value = FceroRange("A10").Select: ActiveCell.FormulaR1C1 = "Grado de libertad 1"v1 = n1 - 1: Cells(10, 2).Value = v1Range("A11").Select: ActiveCell.FormulaR1C1 = "Grado de libertad 2"v2 = n2 - 1: Cells(11, 2).Value = v2Range("A12").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"Falfa = Application.FInv(alfa / 2, v1, v2): Cells(12, 2).Value = FalfaRange("A4:B12").SelectSelection.Interior.ColorIndex = 20If Fcero < Falfa Thenaceptacion = MsgBox("No se rechaza el modelo de simulación que está arrojando resultados" _ & " con la misma varianza que el sistema real", vbInformation)Elserechazo = MsgBox("Se rechaza el modelo de simulación que está arrojando resultados" _ & " con la misma varianza que el sistema real", vbInformation)Range("A1").SelectEnd IfEnd Sub
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
283
Cole
cción
1
Sub GenerarvariablesWeibull() Dim x As Double, a As Double, n As Integer, k As Integer, promedio As Double Dim b As Double, v As Double v = InputBox("introduzca el valor mínimo:") a = InputBox("Digite el valor de alfa:") b = InputBox("Digite el valor de beta:") n = Cells(4, 2).ValueRange(Cells(n + 4, 4), Cells(n + 8, 5)).SelectSelection.Interior.ColorIndex = 44Range("D" & (n + 4)).Select: ActiveCell.FormulaR1C1 = "la media"Range("D" & (n + 5)).Select: ActiveCell.FormulaR1C1 = "la varianza"Range("D" & (n + 6)).Select: ActiveCell.FormulaR1C1 = "alfa"Range("D" & (n + 7)).Select: ActiveCell.FormulaR1C1 = "beta"Range("D" & (n + 8)).Select: ActiveCell.FormulaR1C1 = "valor mínimo" For j = 1 To n R = Rnd x = Round(Weibull(R, a, b, v), 0): Cells(j + 3, 4).Value = x Next j Cells(n + 4, 5).Value = a * b Cells(n + 5, 5).Value = a * b ^ 2 Cells(n + 6, 5).Value = a Cells(n + 7, 5).Value = b Cells(n + 8, 5).Value = vEnd Sub
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Prueba t de Student
Para realizar esta prueba, denotamos los siguientes:Vm = varianza del modelo de simulación.Vr = varianza de los valores reales.
284
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
µm = media del modelo.µr = media de los valores reales.g = n1 + n2 – 2.tC = valor crítico.La hipótesis sobre la media sería:
H0: µm = µr
Ha: µm ≠ µr
Si |t0| < tC , no se rechaza el modelo de simulación que está arrojando resultados con la misma media que el de sistema real.
Ejemplo 8.3 Una empresa utilizó un modelo de simulación de la demanda semanal con distribu-
ción de probabilidad Erlang, con parámetros k = 5, λ= 2 y valor mínimo 50, obteniendo 10 datos de demanda.
La situación real de la demanda semanal arrojó los siguientes datos: 108, 99, 115, 95, 104, 118, 110, 97. La macro para realizar prueba t de Student es la siguiente:
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
285
Cole
cción
1
Procedimiento 8.3. Macro para realizar prueba t de Student para un modelo simulado
Sub PruebaT()Dim alfa, nivel, Tcero, Talfa As DoubleDim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As DoubleDim Vm, Vr As Double Limpiar ActiveWindow.DisplayGridlines = False Cells.Select With Selection .Font.Bold = True .Font.Name = “Arial” .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End Withrespuesta = MsgBox(“Para iniciar este aplicativo debe haberse obtenido los valores simulados” & _ “ partiendo de la celda D4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd IfRange(“C3”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Modelo”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Real”Range(“C3:E3”).SelectSelection.Interior.ColorIndex = 6n1 = InputBox(“Digite el número de corridas:”): Cells(4, 2).Value = n1Range(“C4:E” & (n1 + 3)).SelectSelection.Interior.ColorIndex = 19For i = 1 To n1Cells(i + 3, 3).Value = iNext iGenerarvariablesErlangRange(“A4:B13”).SelectSelection.Interior.ColorIndex = 20n2 = InputBox(“Introduzca el número de datos reales :”)For i = 1 To n2x2(i) = InputBox(“Entre el valor real “ & i): Cells(i + 3, 5).Value = x2(i)
286
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Next iVm = Cells(n1 + 8, 4).ValueVr = Application.Var(Range("E4:E" & (n2 + 3)))Mm = Cells(n1 + 7, 4).ValueMr = Application.Average(Range("E4:E" & (n2 + 3)))Columns("A:A").ColumnWidth = 35Range("A4").Select: ActiveCell.FormulaR1C1 = "Tamaño de la muestra del modelo"Range("A5").Select: ActiveCell.FormulaR1C1 = "Tamaño de la muestra del real"Cells(5, 2).Value = n2Range("A6").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del modelo"Cells(6, 2).Value = VmRange("A7").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del real"Cells(7, 2).Value = VrRange("A8").Select: ActiveCell.FormulaR1C1 = "Media de la muestra del modelo"Cells(8, 2).Value = MmRange("A9").Select: ActiveCell.FormulaR1C1 = "Media de la muestra del real"Cells(9, 2).Value = MrRange("A10").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(10, 2) = alfaRange("A11").Select: ActiveCell.FormulaR1C1 = "Valor to"D1 = ((n1 - 1) * Vm + (n2 - 1) * Vr) / (n1 + n2 - 2)r1 = Sqr(D1): D2 = (1 / n1) + (1 / n2)r2 = Sqr(D2)Tcero = (Mm - Mr) / (r1 * r2): Cells(11, 2).Value = TceroRange("A12").Select: ActiveCell.FormulaR1C1 = "Grado de libertad "g = n1 + n2 - 2: Cells(12, 2).Value = gRange("A13").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"Talfa = Application.TInv(alfa / 2, g): Cells(13, 2).Value = TalfaIf Abs(Tcero) < Talfa Thenaceptacion = MsgBox("No se rechaza el modelo de simulación que está arrojando resultados" _ & " con la misma varianza que el sistema real", vbInformation)Elserechazo = MsgBox("Se rechaza el modelo de simulación que está arrojando resultados" _ & " con la misma varianza que el sistema real", vbInformation)End IfEnd Sub
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
287
Cole
cción
1
Sub GenerarvariablesErlang() Dim x As Double, M As Double, n As Integer, k As Integer, promedio As Double Dim lambda As Integer, a As Double n = Cells(4, 2).Value k = InputBox("Introduzca el valor del parámetro de forma (K):"): Cells(n + 4, 3).Value = k lambda = InputBox("Introduzca el valor del parámetro de escala (Lambda):"): Cells(n + 5, 3).Value = lambda a = InputBox("Digite el valor mínimo:"): Cells(n + 6, 3).Value = aRange(Cells(n + 4, 3), Cells(n + 8, 4)).SelectSelection.Interior.ColorIndex = 20Range("C" & (n + 4)).Select: ActiveCell.FormulaR1C1 = "Parámetro de forma"Range("C" & (n + 5)).Select: ActiveCell.FormulaR1C1 = "Parámetro de escala"Range("C" & (n + 6)).Select: ActiveCell.FormulaR1C1 = "Valor mínimo"Range("C" & (n + 7)).Select: ActiveCell.FormulaR1C1 = "La media"Range("C" & (n + 8)).Select: ActiveCell.FormulaR1C1 = "La varianza" For j = 1 To n R = Rnd: x = Round(Erlang(k, lambda, a), 0): Cells(j + 3, 4).Value = x Next j Cells(n + 4, 4).Value = k Cells(n + 5, 4).Value = lambda Cells(n + 6, 4).Value = a Cells(n + 7, 4).Value = (k / lambda) + a Cells(n + 8, 4).Value = k / ((lambda) ^ 2)Cells(1, 1).SelectEnd Sub
Function Ln(x As Double) As DoubleLn = Excel.WorksheetFunction.Ln(x)End Function
Function Erlang(k As Integer, lambda As Integer, a As Double) As DoubleY = 0: R = RndM = (1 / k * lambda)For Z = 1 To kY = Y + Ln(1 - R)Next ZErlang = (-1) * M * Y + lambda * (a)End Function
288
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Prueba U de Mann-Whitney
Esta prueba se conoce también como prueba de la suma de rangos de Wilcoxon, que consiste en probar si dos muestras proceden de la misma población. La prueba U puede usarse para probar la hipótesis H0: µ1 = µ2, siendo µ1 la media del modelo simulado y µ2 la media de los datos reales. La prueba U probará las siguientes hipótesis:
H0: µm = µr.Ha: µm ≠ µr.
Sean los siguientes:n1 = tamaño de la muestra del modelo.n2 = tamaño de la muestra de los valores reales.Vm = varianza del modelo.Vr = varianza de los valores reales.µm = media del modelo.µr = media de los valores reales.R1 = la suma de los rangos de la muestra del modelo de simulación.R2 = la suma de los rangos de la muestra de los datos reales.
El procedimiento de prueba es el siguiente. • Se ordenan todas las n1 + n2 observaciones en orden de magnitud ascendente.• Se establece el rango; esto quiere decir, categorizar las observaciones.• Si dos o más observaciones están empatadas, entonces se usa la media de los
rangos que le hubieran asignado si las observaciones difirieran.• Se suma la columna de los rangos en forma independiente para cada muestra.
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
289
Cole
cción
1
La media de las observaciones:
La varianza de las observaciones:
El estadístico:
α = 1 – nivel de significación:
si |Z0| < Zα/2, no se rechaza la hipótesis nula, donde todas las observaciones provienen de la misma población; en caso contrario, se rechaza la hipótesis nula porque las observaciones provienen de poblaciones diferentes
Ejemplo 8.4
Una empresa utilizó un modelo de simulación de la demanda semanal, obteniendo 23 datos de demanda como se muestra a continuación: 100, 40, 90, 100, 110, 140, 130, 40, 60, 50, 60, 70, 60, 70, 80, 140, 60, 40, 80, 60, 120, 100, 70. La situación real de la demanda semanal arrojó los siguientes 12 datos: 50, 130, 130, 80, 100, 120 160, 150, 80, 60, 140, 180.
290
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
A continuación se presentará una macro para realizar la validación mediante la utilización de la prueba U Mann-Whitney. La macro captura los datos simulados y los datos reales, ordena los datos en forma ascendente y establece los rangos.
Procedimiento 8.4. Macro para realizar prueba U de Mann-Whitney
Sub PruebaU()Dim alfa, nivel, Tcero, Talfa As Double, m As LongDim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As Double Limpiar ActiveWindow.DisplayGridlines = False Cells.Select With Selection .Font.Bold = True .Font.Name = “Arial” .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End Withrespuesta = MsgBox(“Para iniciar este aplicativo debe haberse obtenido los valores simulados” & _ “ partiendo de la celda D4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd IfRange(“A1”).Select: ActiveCell.FormulaR1C1 = “n1=”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “n2=”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Modelo”Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Real”Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Rango del modelo”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Rango del Real”Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Categoría”Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Orden”Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Rango”Range(“A3:O3”).SelectSelection.Interior.ColorIndex = 6n1 = InputBox(“Digite el número de datos simulados del modelo:”): Cells(1, 2).Value = n1For i = 1 To n1
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
291
Cole
cción
1
x1(i) = InputBox(“Entre el valor simulado “ & i): Cells(i + 3 + n1, 5).Value = n1 + iCells(i + 3, 1).Value = x1(i): Cells(i + 3, 6).Value = x1(i)Next in2 = InputBox(“Introduzca el número de datos reales :”): Cells(2, 2).Value = n2For i = 1 To n2x2(i) = InputBox(“Entre el valor real “ & i): Cells(i + 3, 5).Value = x2(i)Cells(i + 3, 2).Value = x2(i): Cells(i + 3 + n1, 6).Value = x2(i)Next ik = n1 + n2Range(“F4:F” & (k + 3)).SelectActiveWorkbook.Worksheets(“Hoja1”).Sort.SortFields.ClearActiveWorkbook.Worksheets(“Hoja1”).Sort.SortFields.Add Key:=Range(“F4”), _SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormalWith ActiveWorkbook.Worksheets(“Hoja1”).Sort .SetRange Range(“F4:F” & (k + 3)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .ApplyEnd Withx = 4For i = x To k + x - 1cont = 0: s = Cells(x, 6).Value: R1 = Cells(x, 5).Value For j = 1 To k m = Cells(x - 1 + j, 6).Value If (s = m) Then cont = cont + 1 Else Exit For End If Next jx = x + cont - 1R2 = Cells(x, 5).Value For Z = x - cont + 1 To x rango = (R1 + R2) / 2: Cells(Z, 7).Value = rango Next Zx = x + 1Next iFor i = 4 To n1 + 3
292
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(i, 3).Value = Application.VLookup(Cells(i, 1), Sheets(1).Range("F4:G" & (k + 3)), 2)Sum = Sum + Cells(i, 3).ValueNext iRange("C" & (n1 + 4)).Select: ActiveCell.FormulaR1C1 = "Suma"Selection.Interior.ColorIndex = 6Cells(n1 + 5, 3).Value = SumFor i = 4 To n2 + 3Cells(i, 4).Value = Application.VLookup(Cells(i, 2), Sheets(1).Range("F4:G" & (k + 3)), 2)sum1 = sum1 + Cells(i, 4).ValueNext iRange("D" & (n2 + 4)).Select: ActiveCell.FormulaR1C1 = "Suma"Selection.Interior.ColorIndex = 6Cells(n2 + 5, 4).Value = sum1: R1 = Sum: R2 = sum1If (R1 < R2) ThenU = n1 * n2 + (n1 * (n1 - 1) / 2) - R1ElseU = n1 * n2 + (n2 * (n2 - 1) / 2) - R2End IfRange("H3").Select: ActiveCell.FormulaR1C1 = "Valor de U": Cells(3, 9).Value = URange("J3").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(3, 11) = alfamedia = n1 * (n1 + n2 + 1) / 2: Varza = n1 * n2 * (n1 + n2 + 1) / 12zetacero = (U - media) / Sqr(Varza)Range("L3").Select: ActiveCell.FormulaR1C1 = "El estadístico": Cells(3, 13).Value = zetaceroRange("N3").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"zetaalfa = Application.WorksheetFunction.NormSInv(alfa / 2): Cells(3, 15).Value = zetaalfaIf Abs(zetacero) < zetaalfa Thenaceptacion = MsgBox("No se rechaza el modelo de simulación y los valores reales" _ & " que provienen de la misma poblacion", vbInformation)Elserechazo = MsgBox("Se rechaza el modelo de simulación y los valores reales" _ & " que provienen de la misma poblacion", vbInformation)End IfEnd Sub
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
293
Cole
cción
1
Prueba Chi-cuadrado para la simulación con distribución de probabilidad teórica
La siguiente prueba permitirá comprobar si, una vez que se tiene una generación de variables aleatorias simuladas, estas provienen de una distribución de probabilidad teórica específica.
Ejemplo 8.5
El peso de un determinado producto es una variable aleatoria distribuida exponencial-mente con una media de 1,5 kg. Realizar una macro para realizar la prueba Chi-cuadrado.
Procedimiento 8.5. Macro para realizar prueba Chi-cuadrado
a una distribución de probabilidad teórica
Sub pruebaChiCuad()Dim alfa, nivel, chicero, chialfa As DoubleDim n As Integer, x, y As DoubleDim FO(1 To 1000), FE(1 To 1000) As IntegerDim r(1 To 1000), dif(1 To 1000) As Double Limpiar ActiveWindow.DisplayGridlines = Falserespuesta = MsgBox(“Para iniciar este aplicativo debe haberse obtenido los números aleatorios” & _ “ partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical + vbDefaultButton2 _ , “DECISION DE CONTINUAR”)If respuesta = vbNo ThenExit SubEnd Ifn = InputBox(“Introduzca el número de corridas :”)Cells(4, 2).Value = n k = InputBox(“Digite el número de réplicas:”) Cells(1, 1).Value = kGenerarvariablesExponencialesRange(“A4”).Select
294
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
ActiveCell.FormulaR1C1 = “Tamaño de la muestra”Columns(“A:A”).EntireColumn.AutoFitRange(“A5”).SelectActiveCell.FormulaR1C1 = “Nivel de Significancia”alfa = CDbl(InputBox(“Introduzca el nivel de significación”)): Cells(5, 2) = alfam = Round(1 + 3.322 * (Application.Log(n)), 0)Range(“A6”).SelectActiveCell.FormulaR1C1 = “Números de intervalos”Cells(6, 2).Value = mDMin = Round(Application.Min(Range(“G4:G” & (k + 3))), 3)DMax = Round(Application.Max(Range(“G4:G” & (k + 3))), 3)interv = Round(((DMax - DMin) / m), 3)Range(“A7”).SelectActiveCell.FormulaR1C1 = “Grado de libertad”g = m - 1: Cells(7, 2).Value = gRange(“A8”).SelectActiveCell.FormulaR1C1 = “valor Crítico”chialfa = Application.ChiInv(alfa, g): Cells(8, 2).Value = chialfaFor x = 1 To nr(x) = Cells(x + 3, 7).ValueNext xRange(“H3”).SelectActiveCell.FormulaR1C1 = “Intervalo”Range(“J3”).SelectActiveCell.FormulaR1C1 = “FOi”Range(“K3”).SelectActiveCell.FormulaR1C1 = “FEi”Range(“L3”).SelectActiveCell.FormulaR1C1 = “(FOi - FEi)²/FEi”Columns(“L:L”).EntireColumn.AutoFitRange(“H3:I3”).SelectSelection.MergeRange(“H3:L3”).SelectSelection.Font.Bold = TrueSelection.Font.Name = “Arial”Selection.WrapText = TrueSelection.HorizontalAlignment = xlCenterSelection.VerticalAlignment = xlCenterSelection.Interior.ColorIndex = 6y = Round(DMin, 3)
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
295
Cole
cción
1
chicero = 0For i = 1 To mCells(i + 3, 9) = y & " - " & (y + interv)FO(i) = 0For j = 1 To nIf r(j) > y And r(j) <= (y + interv) ThenFO(i) = FO(i) + 1End IfNext jy = Round(y + interv, 3)Cells(i + 3, 10).Value = FO(i)FE(i) = (n / m)Cells(i + 3, 11).Value = FE(i)dif(i) = ((FO(i) - FE(i)) ^ 2) / FE(i)Cells(i + 3, 12).Value = dif(i)chicero = chicero + dif(i)Next iRange("A9").SelectActiveCell.FormulaR1C1 = "El estadístico"Cells(9, 2).Value = chiceroIf chicero < chialfa Thenaceptacion = MsgBox("No se rechaza que las variables aleatorias generadas provienen de una distribución de probabilidad" _& " teórica", vbInformation)Elserechazo = MsgBox("Se rechaza que las variables aleatorias generadas provienen de una distribu-ción de probabilidad" _& " teórica", vbInformation)End IfEnd Sub
Sub GenerarvariablesExponenciales() Dim x As Double, EX As Double, n As Integer, k As Integer, promedio As Double n = Cells(4, 2).Value k = Cells(1, 1).Value EX = InputBox(“Introduzca el valor medio de la exponencial:”) Range(“D3:G3,A4:B9”).Select Selection.Interior.ColorIndex = 24 Range(“D4:E” & (n + 4)).Select Selection.Interior.ColorIndex = 19
296
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“F4:G” & (k + 4)).Select Selection.Interior.ColorIndex = 19 Range(“D3”).Select ActiveCell.FormulaR1C1 = “Número de corrida” Range(“E3”).Select ActiveCell.FormulaR1C1 = “Variable aleatoria” Range(“F3”).Select ActiveCell.FormulaR1C1 = “Réplica Num.” Range(“G3”).Select ActiveCell.FormulaR1C1 = “Promedio de variable” Range(“D3:G3”).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End WithRange(Cells(n + 4, 4), Cells(n + 5, 5)).SelectSelection.Interior.ColorIndex = 20Range(Cells(k + 4, 6), Cells(k + 6, 7)).Select Selection.Interior.ColorIndex = 20 Range(“D” & (n + 4)).Select ActiveCell.FormulaR1C1 = “La media” Range(“D” & (n + 5)).Select ActiveCell.FormulaR1C1 = “La Varianza” With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End With Range(“F” & (k + 4)).Select ActiveCell.FormulaR1C1 = “Promedio” Range(“F” & (k + 5)).Select ActiveCell.FormulaR1C1 = “Varianza” Range(“F” & (k + 6)).Select ActiveCell.FormulaR1C1 = “Desviación Estandar” With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End With
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
297
Cole
cción
1
Cells.Select With Selection .HorizontalAlignment = xlCenter End WithFor i = 1 To k For j = 1 To n Cells(j + 3, 4) = j r = Rnd x = Round((-1 * EX) * (Application.Ln(1 - r)), 2) Cells(j + 3, 5).Value = x Next j Cells(i + 3, 6) = i Cells(n + 4, 5).Value = EX Cells(n + 5, 5).Value = (EX) ^ 2 promedio = Round(Application.Average(Range("E4:E" & (n + 4))), 2) Cells(i + 3, 7) = promedioNext iCells(k + 4, 7).Value = Application.Average(Range("G4:G" & (k + 4)))Cells(k + 5, 7).Value = Application.Var(Range("G4:G" & (k + 4)))Cells(k + 6, 7).Value = Application.StDev(Range("G4:G" & (k + 4)))Range("A1").SelectEnd Sub
Diseño de experimentos de simulación
Una vez se ha hecho la validación del modelo de simulación por medio de macros de Excel, estamos en condiciones de conducir experimentos para indicar la prueba de un sistema determinado que opere bajo un conjunto de condiciones, con el fin de evaluar varias estrategias con las cuales se puede operar el sistema que estamos teniendo como referencia. Como sabemos, la simulación puede describirse como un procedimiento de experimentación con macros de Excel o algún tipo de software para simulación que replica estadísticamente el comportamiento de un sistema discreto o continuo.
La simulación en macro de Excel es por antonomasia un diseño experimental; por tal motivo, el usuario de simulación tiene la prerrogativa de especificar varios niveles de
298
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
factores (tratamientos) y las combinaciones de niveles, así como el orden de los expe-rimentos que influyen en la interpretación del resultado de la simulación que quede libre de errores fortuitos. Para hacer un diseño de experimentos de simulación, hay muchas técnicas que se han descrito mucho, en una gran cantidad de libros de diseño experimental, pero aquí la idea central es usar la técnica de diseños factoriales. Para esta técnica recomendamos los siguientes pasos:
a. El tamaño muestral del experimento de simulación, esto es, el número de veces del proceso de salida.
b. Las condiciones iniciales, esto es, determinar los niveles de factores y tratamientos.c. Las condiciones finales, esto quiere decir, que proporcione las estimaciones de
medidas de comportamiento del sistema.d. Relacionar variables de salida con variables de entrada a través de un tipo modelo
apropiado para ello.
Para explicar mejor un diseño experimental de simulación, consideramos el experi-mento con un solo factor, donde proponemos varios niveles de factores o tratamientos y varias repeticiones, suponiendo que el experimento ha sido aleatorizado por completo.
Experimento con un solo factor: análisis de varianza
En esta sección se desarrolla el análisis de varianza para el modelo de efectos fijos.
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
299
Cole
cción
1
Sean:a = número de tratamientosn = número de réplicasm = a – nyij = observación en el i tratamiento con j réplicas
yi = totales de los tratamientos
SST = suma de los cuadrados totales =
SSTR = suma de los cuadrados de los tratamientos =
SSE = suma de los cuadrados del error SST – SSTR
Grados de libertad de los tratamientos a – 1
Grados de libertad del error = m – a
Grados de libertad de los totales = m – 1
MSTR = media de los cuadrados de tratamientos =
MSE = media de cuadrados del error =
, se concluye que las medias de los tratamientos no difieren; en caso contrario, sí
difieren.
300
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Ejemplo 8.7
Supóngase que una entidad bancaria puede contar con tres cajeros que tienen la misma habilidad para atender a los clientes; el tiempo entre llegadas es una variable aleatoria con distribución exponencial, pero se sospecha que cuando la tasa de llegadas se incrementa, se aumentará la longitud de la cola, o sea, el número promedio de cliente en la cola; en cambio, el tiempo de servicio es una variable aleatoria con distribución exponencial y una tasa de servicio de 2 clientes por minuto.
Se decide probar muestras a cinco niveles de tasa de llegadas: 4, 5, 6, 7, y 8 clientes por minuto; también se probará el valor del número promedio de servidores ocupados de la cola bajo 5 réplicas de simulación.
Para resolver este ejemplo, se requiere:a. Se presentarán dos macros: una macro de simulación de línea de espera, inclu-
yendo los cinco tratamientos y cinco réplicas; otra macro que incluye el análisis de varianza teniendo un experimento unifactorial (Anova).
b. Se capturan los datos pertinentes como las tasas de llegadas para tratamiento y sus réplicas.
c. Hacer previamente una macro con cuadrícula para datos.
Procedimiento 8.6. Macro para realizar diseño de experimento con Anova
Sub Cuadricular04()ActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A1”).Select: ActiveCell.FormulaR1C1 = “DISEÑO DE EXPERIMENTO DE SIMULACION DE LINEA DE ESPERA CON VARIOS SERVIDORES”
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
301
Cole
cción
1
Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de Clientes”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Número de Servidores”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Número de Tratamiento”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Número de Réplicas”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Distribución de Probabilidad del Tiempo entre Llegadas”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “EXPONENCIAL”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Tasa de Llegadas”Range(“A9”).Select: ActiveCell.FormulaR1C1 = “Distribución de Probabilidad del Tiempo de Servicio”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “EXPONENCIAL”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Tasa de Servicio”Range(“A14”).Select: ActiveCell.FormulaR1C1 = “Resumen de salida:”Range(“A15”).Select: ActiveCell.FormulaR1C1 = “Num. promedio servidores ocupados (Cp) =”Range(“A16”).Select: ActiveCell.FormulaR1C1 = “Num. Promedio de servidores desocupados =”Range (“A17”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de utilizacion (%) =”Range(“A18”).Select: ActiveCell.FormulaR1C1 = “Num. Promedio de clientes en la cola, Lq =”Range(“A19”).Select: ActiveCell.FormulaR1C1 = “Número de clientes promedio en el sistema, L =”Range(“A20”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en cola, Wq =”Range(“A21”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema, W =”Range(“A22”).Select: ActiveCell.FormulaR1C1 = “Suma (Tiempos de servicio) =”Range(“A23”).Select: ActiveCell.FormulaR1C1 = “Suma (Wq) =”Range(“A23”).Select: ActiveCell.FormulaR1C1 = “Suma (W) =”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Datos de la Linea de Espera”Range(“I3”).Select: ActiveCell.FormulaR1C1 = “Clientes”Range(“J3”).Select: ActiveCell.FormulaR1C1 = “Tiempo Entre Llegadas”Range(“K3”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegadas”Range(“L3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio de Servicio”Range(“M3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Servicio”Range(“N3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“O3”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de Espera de un Cliente en la Cola (Wq)”Range(“P3”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de Espera de un Cliente en el Sistema (W)”Range(“A1:P1”).SelectSelection.MergeSelection.Interior.ColorIndex = 6Range(“A2:B2,A3:B3,D2:E2,D3:E3,A4:F4,B5:F5,B6:C6,A9:F9,B10:F10,B11:C11”).SelectSelection.Merge
302
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“I2:P2,A14:D14,A15:C15,A16:C16,A17:C17,A18:C18,A19:C19,A20:C20,A21:C21,A22:C22, A23:C23,A24:C24").SelectSelection.MergeRange("A1,A2:F3,A4,B5,B6:D6,A9,B10,B11:D11,A14,I2:P3").SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange("A2,A3,D2,D3").SelectSelection.Interior.ColorIndex = 46Range("A4,B5,B6,B9,B10,B11,I2").SelectSelection.Interior.ColorIndex = 22Range("I3:P3").SelectSelection.Interior.ColorIndex = 46Range(Cells(15, 1), Cells(24, 1)).SelectSelection.Interior.ColorIndex = 20Range(Cells(14, 1), Cells(24, 4)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithEnd Sub
Sub ExperimentoCola01()Dim i As Integer, j, z, tr As Integer, n, c As Integer, Serv As IntegerDim medialleg, mediaserv As Double, inicio(1 To 10000) As SingleDim ultVal, minVal, TLLeg(1 To 10000), Tdesp(1 To 10000), Tserv(1 To 10000)Dim Tmlleg(1 To 10000), W(1 To 10000), Wq(1 To 10000) As SingleCuadricula04Range(“I4:P1350”).ClearContentsRange(“C2:C3,F2:F3”).ClearContentsRange(“D6,D11,D15:D24”).ClearContentsRange(“A27:F205”).ClearContentsn = InputBox(“Digite el número de Clientes:”): Cells(2, 3).Value = n
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
303
Cole
cción
1
Serv = InputBox(“Digite el número de servidores:”): Cells(3, 3) = Servtasaserv = InputBox(“Introduzca la tasa de servicio:”)Cells(11, 4).Value = tasaservpos = 27tr = InputBox(“Digite el número de Tratamiento de la tasa de llegada:”)Cells(2, 6) = trc = InputBox(“Digite el número de Réplicas:”): Cells(3, 6) = cm = 0For y = 1 To trMsgBox “TRATAMIENTO NUMERO” + Str(y), vbOKOnly, “TRATAMIENTO”Cells(pos + y - 1 - m, 1).Value = yFor z = 1 To c Cells(pos + z - 1, 3).Value = zNext ztasalleg = InputBox(“Introduzca la tasa de llegada para el tratamiento “ & y)Cells(6, 4).Value = tasallegFor x = 1 To cRange(“I4:P” & (n + 3)).ClearContentsminVal = 10000ultVal = 10000semilla = 12000medialleg = (1 / tasalleg): mediaserv = (1 / tasaserv) For i = 1 To Serv Cells(i + 3, 9).Value = i R = Rnd TLLeg(i) = (-1) * (medialleg) * (Application.Ln(1 - R)) ‘Tiempo entre llegadas Cells(i + 3, 10).Value = TLLeg(i) R2 = Rnd Tserv(i) = (-1) * (mediaserv) * (Application.Ln(1 - R2)) ‘Tiempo de servicio Cells(i + 3, 13).Value = Tserv(i) If i = 1 Then Tmlleg(i) = TLLeg(1) Cells(4, 11).Value = Tmlleg(i) inicio(i) = Tmlleg(i) Cells(4, 12).Value = Tmlleg(i) Else Tmlleg(i) = Tmlleg(i - 1) + TLLeg(i) Cells(i + 3, 11).Value = Tmlleg(i) inicio(i) = Tmlleg(i) Cells(i + 3, 12).Value = inicio(i)
304
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
End If Tdesp(i) = inicio(i) + Tserv(i) ‘Tiempo de despacho Cells(i + 3, 14).Value = Round(Tdesp(i), 2) Wq(i) = 0 Cells(i + 3, 15).Value = Round(Wq(i), 2) W(i) = Tdesp(i) - Tmlleg(i) Cells(i + 3, 16).Value = Round(W(i), 2) If ultVal < Tdesp(i) Then ultVal = ultVal Else ultVal = Tdesp(i) End If Next ij = Serv + 1Cells(j + 3, 9).Value = jR = RndTLLeg(j) = (-1) * (medialleg) * (Application.Ln(1 - R))Cells(j + 3, 10).Value = TLLeg(j)R2 = RndTserv(j) = (-1) * (mediaserv) * (Application.Ln(1 - R2))Cells(j + 3, 13).Value = Tserv(j)Tmlleg(j) = Cells(j + 2, 11).Value + Cells(j + 2, 10).ValueCells(j + 3, 11).Value = Tmlleg(j)inicio(j) = Application.max(Tmlleg(j), ultVal): Cells(j + 3, 12).Value = inicio(j)Tdesp(j) = inicio(j) + Tserv(j)Cells(j + 3, 14).Value = Round(Tdesp(j), 2): Tdesp(j) = Cells(i + 3, 14).ValueTmlleg(j) = Cells(i + 3, 11).Value: Tserv(j) = Cells(i + 3, 13).ValueWq(j) = Tdesp(j) - Tmlleg(j) - Tserv(j)Cells(j + 3, 15).Value = Round(Wq(j), 2)W(j) = Tdesp(j) - Tmlleg(j)Cells(j + 3, 16).Value = Round(W(j), 2)For i = Serv + 2 To n Cells(i + 3, 9).Value = i R = Rnd TLLeg(i) = (-1) * (medialleg) * (Application.Ln(1 - R)) Cells(i + 3, 10).Value = TLLeg(i) R2 = Rnd Tserv(i) = (-1) * (mediaserv) * (Application.Ln(1 - R2)) Cells(i + 3, 13).Value = Tserv(i) Tmlleg(i) = Cells(i + 2, 11).Value + Cells(i + 2, 10).Value
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
305
Cole
cción
1
Cells(i + 3, 11).Value = Tmlleg(i) ultVal = inicio(i - 1) minVal = 10000 For j = 1 To i - Serv - 1 If Tdesp(j) > ultVal Then If Tdesp(j) < minVal Then minVal = Tdesp(j) Else minVal = minVal End If End If Next j If minVal = 10000 Then For j = i - Serv To i - 1 If Tdesp(j) < minVal Then minVal = Tdesp(j) Else minVal = minVal End If Next j End If If minVal > Tmlleg(i) Then inicio(i) = minVal Else inicio(i) = Tmlleg(i) End If Cells(i + 3, 12).Value = inicio(i) Tdesp(i) = inicio(i) + Tserv(i) Cells(i + 3, 14).Value = Round(Tdesp(i), 2) W(i) = Tdesp(i) - Tmlleg(i): Cells(i + 3, 16).Value = Round(W(i), 2) Wq(i) = W(i) - Tserv(i): Cells(i + 3, 15).Value = Round(Wq(i), 2)Next i Wprom = Application.Average(Range(“P4:P” & (n + 3))): Cells(21, 4).Value = Round(Wprom, 2) Wqprom = Application.Average(Range(“O5:O” & (n + 3))): Cells(20, 4).Value = Round(Wqprom, 2) L = (Application.Sum(Range(“P4:P” & (n + 3)))) / ((Application.max(Range(“N4:N” & (n + 3)))) - Cells(4, 11).Value) Cells(19, 4).Value = Round(L, 0) Lq = (Application.Sum(Range(“O4:O” & (n + 3)))) / ((Application.max(Range(“N4:N” & (n + 3)))) - Cells(4, 11).Value)
306
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Cells(18, 4).Value = Round(Lq, 0) servprom = L - Lq: Cells(15, 4).Value = servprom U = (servprom / Serv): Cells(17, 4).Value = U Range("D17").Select Selection.NumberFormat = "0.00%" NumPromDesocp = Serv - servpromIf (NumPromDesocp < 0) ThenCells(16, 4).Value = 0ElseCells(16, 4).Value = NumPromDesocpEnd IfSumaTserv = Application.Sum(Range("M4:M" & (n + 3))): Cells(22, 4).Value = SumaTservSumaWq = Application.Sum(Range("O4:O" & (n + 3))): Cells(23, 4).Value = SumaWqSumaW = Application.Sum(Range("P4:P" & (n + 3))): Cells(24, 4).Value = SumaTservMsgBox "REPLICA NUMERO" + Str(x), vbOKOnly, "REPLICA"Cells(pos, 2).Value = Cells(6, 4).ValueCells(pos, 4).Value = Cells(15, 4).Valuepos = pos + 1Next xm = m + 1Next yAnovaEnd Sub
Sub Anova()Dim alfa, nivel, Fcero, Falfa As DoubleDim n, a As Integer, yi(1 To 1000), promyi(1 To 1000), totyi, totpromyi As DoubleDim SST, SSE, SSTR As Double, matriz(1 To 1000, 1 To 1000) As DoubleDim i, j As ByteRange(“R2:S8”).ClearContentsRange(“AA1”).Select Selection.Copy Range(“T1:AB100”).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Selection.ClearContentsRange(“Q1:AZ300”).SelectWith Selection .HorizontalAlignment = xlCenter
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
307
Cole
cción
1
.VerticalAlignment = xlCenter .WrapText = True .Font.Name = “Arial” .Font.Size = 12 .Font.Bold = TrueEnd Witha = Cells(2, 6).Value: n = Cells(3, 6).ValueRange(Cells(1, 21), Cells(1, n + 20)).Select With Selection .Interior.Color = 43 .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End With Selection.Merge ActiveCell.FormulaR1C1 = “REPLICAS”Range(“T2”).Select: ActiveCell.FormulaR1C1 = “Tratamiento”Range(Cells(2, 20), Cells(2, n + 22)).Select With Selection .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Interior.ColorIndex = 6 End Withfila = 0For i = 1 To a Cells(i + 2, 20).Value = i Sum = 0 For j = 1 To n Cells(2, 20 + j).Value = j matriz(i, j) = Round(Cells(26 + fila + j, 4).Value, 2) Cells(i + 2, j + 20).Value = matriz(i, j) Sum = Sum + matriz(i, j) Next j yi(i) = Sum: Cells(i + 2, j + 20).Value = yi(i) prom = (Sum / n): promyi(i) = prom Cells(i + 2, j + 21).Value = promyi(i) fila = fila + aNext isum1 = 0: sum2 = 0For x = 1 To a
308
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
sum1 = sum1 + yi(x): sum2 = sum2 + promyi(x)NextCells(2, j + 20) = “Totales”: Cells(2, j + 21) = “Promedios”Cells(i + 3, 20) = “Fuente de Variación”: Cells(i + 4, 20) = “Tratamiento”Cells(i + 5, 20) = “Error”: Cells(i + 6, 20) = “Total”Cells(i + 3, 21) = “Suma de Cuadrados”: Cells(i + 3, 22) = “grados de libertad”Cells(i + 3, 23) = “Media de Cuadrados”: Cells(i + 3, 24) = “Fo”Range(Cells(a + 2, 20), Cells(a + 2, n + 22)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMediumRange(Cells(i + 3, 20), Cells(i + 3, 24)).Select With Selection .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Interior.ColorIndex = 6 End Withtotyi = sum1: Cells(a + 3, j + 20).Value = totyitotpromyi = (sum2 / a): Cells(a + 3, j + 21).Value = totpromyiRange(Cells(a + 6, 20), Cells(a + 6, 24)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMediumm = a * nSST = Application.SumSq(Range(Cells(3, 21), Cells(a + 2, n + 20))) - ((totyi) ^ 2 / m)Cells(i + 6, 21).Value = SSTSSTR = (1 / n) * (Application.SumSq(Range(Cells(3, n + 21), Cells(a + 2, n + 21)))) - ((totyi) ^ 2 / m)Cells(i + 4, 21).Value = SSTRSSE = SST - SSTR: Cells(i + 5, 21).Value = SSECells(i + 4, 22).Value = a - 1: Cells(i + 5, 22).Value = m - aCells(i + 6, 22).Value = m - 1MSTR = SSTR / (a - 1): Cells(i + 4, 23).Value = MSTRMSE = SSE / (m - a): Cells(i + 5, 23).Value = MSEFcero = MSTR / MSE: Cells(i + 4, 24).Value = FceroRange(“R2”).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivel: Cells(2, 19) = alfaRange(“R3”).Select: ActiveCell.FormulaR1C1 = “Valor Fo”Cells(3, 19).Value = FceroRange(“R4”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento”v1 = a - 1: Cells(4, 19).Value = v1Columns(“R:R”).EntireColumn.AutoFitRange(“R5”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del error”v2 = m - a: Cells(5, 19).Value = v2
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
309
Cole
cción
1
Range("R6").Select: ActiveCell.FormulaR1C1 = "valor Crítico"Falfa = Application.FInv(alfa / 2, v1, v2): Cells(6, 19).Value = FalfaIf Fcero < Falfa Thenaceptacion = MsgBox("Las medias de los tratmientos no difieren", vbInformation)Elserechazo = MsgBox("Las medias de los tratmientos difieren", vbInformation)End IfEnd Sub
Experimento con dos factores
El proceso de desarrollar modelos de simulación conduce experimentos que se llevan a cabo para analizar los efectos producidos por dos o más factores. Cada factor tiene un determinado número de niveles de tratamientos o combinaciones de niveles en cada réplica del experimento.
Si existe un determinado número de niveles del primer factor y un determinado número del segundo factor, entonces cada réplica del experimento contiene un número de combinaciones de tratamientos que es equivalente al producto de los números de niveles de cada factor. El efecto de un factor se define como el cambio en la respuesta producida por un cambio en el nivel del factor. Para estudiar este importante tema, se tienen en cuenta las siguientes nomenclaturas y fórmulas.
310
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Sean:a = número de tratamientos del primer factor
b = número de tratamientos del segundo factor
n = número de réplicas
l = entero( n / 2 )
m = número de columnas en cada celda del tratamiento del factor = n – l
yijk = observación en el i tratamiento del primer factor, j tratamiento del segundo factor con k réplicas
SST = suma de los cuadrados totales =
SSA = suma de los cuadrados totales de los tratamientos del primer factor
SSB = suma de los cuadrados totales del segundo factor
SSI = suma de los cuadrados de la interaccion =
SSE = suma de los cuadrados del error = SST – SSA – SSB – SSI
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
311
Cole
cción
1
Grados de libertad de los tratamientos del primer factor = a – 1
Grados de libertad de los tratamientos del segundo factor = b – 1
Grados de libertad de los tratamientos de la interaccion = (a – 1)(b – 1)
Grados de libertad del error = ab(n – 1)
Grados de libertad de los totales = abn – 1
MSA = media de los cuadrados del primer factor =
MSB = media de los cuadrados del segundo factor =
MSI = media de los cuadrados de la interaccion =
MSE = media de los cuadrados del error =
Ejemplo 8.8
Supóngase que una entidad bancaria puede contar con tres cajeros que tienen la misma habilidad para atender a los clientes; el tiempo entre llegadas es una variable aleatoria con distribución exponencial; en cambio, el tiempo de servicio es una variable aleatoria con distribución exponencial, pero se sospecha que cuando cambian la tasa de llegadas
312
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
y la tasa de servicio, se cambiará la longitud de la cola, o sea, el número promedio de cliente en la cola.
Se decide probar muestras a tres niveles de tasa de llegadas: 4, 6 y 8 clientes por hora, y tres niveles de tratamiento de la tasa de servicio: 2, 3 y 5; se probará también el valor de la longitud de la cola bajo 4 réplicas de simulación. A continuación se presentarán dos macros: una macro de simulación de línea de espera, incluyendo los tres tratamientos de cada factor y cuatro réplicas; otra macro que incluye el experimento bifactorial.
Procedimiento 8.7. Macro para simular un modelo de línea de
espera con réplicas para realizar diseño de experimento
Sub Cuadricular04()ActiveWindow.DisplayGridlines = FalseCells.SelectWith Selection .Font.Bold = True .Font.Name = “Arial” .Font.Size = 12 .WrapText = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenterEnd WithRange(“A1”).Select: ActiveCell.FormulaR1C1 = “DISEÑO DE EXPERIMENTO DE SIMULACION DE LINEA DE ESPERA CON VARIOS SERVIDORES”Range(“A2”).Select: ActiveCell.FormulaR1C1 = “Número de Clientes”Range(“A3”).Select: ActiveCell.FormulaR1C1 = “Número de Servidores”Range(“D2”).Select: ActiveCell.FormulaR1C1 = “Número de Tratamiento”Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Número de Réplicas”Range(“A4”).Select: ActiveCell.FormulaR1C1 = “Distribución de Probabilidad del Tiempo entre Llegadas”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “EXPONENCIAL”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Tasa de Llegadas”Range(“A9”).Select: ActiveCell.FormulaR1C1 = “Distribución de Probabilidad del Tiempo de Servicio”Range(“B5”).Select: ActiveCell.FormulaR1C1 = “EXPONENCIAL”Range(“B6”).Select: ActiveCell.FormulaR1C1 = “Tasa de Servicio”Range(“A14”).Select: ActiveCell.FormulaR1C1 = “Resumen de salida:”Range(“A15”).Select: ActiveCell.FormulaR1C1 = “Num. promedio servidores ocupados (Cp) =”
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
313
Cole
cción
1
Range(“A16”).Select: ActiveCell.FormulaR1C1 = “Num. Promedio de servidores desocupados =”Range (“A17”).Select: ActiveCell.FormulaR1C1 = “Porcentaje de utilizacion (%) =”Range(“A18”).Select: ActiveCell.FormulaR1C1 = “Num. Promedio de clientes en la cola, Lq =”Range(“A19”).Select: ActiveCell.FormulaR1C1 = “Número de clientes promedio en el sistema, L =”Range(“A20”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en cola, Wq =”Range(“A21”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de espera en el sistema, W =”Range(“A22”).Select: ActiveCell.FormulaR1C1 = “Suma (Tiempos de servicio) =”Range(“A23”).Select: ActiveCell.FormulaR1C1 = “Suma (Wq) =”Range(“A23”).Select: ActiveCell.FormulaR1C1 = “Suma (W) =”Range(“I2”).Select: ActiveCell.FormulaR1C1 = “Datos de la Linea de Espera”Range(“I3”).Select: ActiveCell.FormulaR1C1 = “Clientes”Range(“J3”).Select: ActiveCell.FormulaR1C1 = “Tiempo Entre Llegadas”Range(“K3”).Select: ActiveCell.FormulaR1C1 = “Tiempo Medido de Llegadas”Range(“L3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Inicio de Servicio”Range(“M3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Servicio”Range(“N3”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Despacho”Range(“O3”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de Espera de un Cliente en la Cola (Wq)”Range(“P3”).Select: ActiveCell.FormulaR1C1 = “Tiempo promedio de Espera de un Cliente en el Sistema (W)”Range(“A1:P1”).SelectSelection.MergeSelection.Interior.ColorIndex = 6Range(“A2:B2,A3:B3,D2:E2,D3:E3,A4:F4,B5:F5,B6:C6,A9:F9,B10:F10,B11:C11”).SelectSelection.MergeRange(“I2:P2,A14:D14,A15:C15,A16:C16,A17:C17,A18:C18,A19:C19,A20:C20,A21:C21,A22:C22,A23:C23,A24:C24”).SelectSelection.MergeRange(“A1,A2:F3,A4,B5,B6:D6,A9,B10,B11:D11,A14,I2:P3”).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlInsideHorizontal).Weight = xlThin .Borders(xlInsideVertical).Weight = xlThinEnd WithRange(“A2,A3,D2,D3”).SelectSelection.Interior.ColorIndex = 46
314
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Range(“A4,B5,B6,B9,B10,B11,I2”).Select Selection.Interior.ColorIndex = 22Range("I3:P3").SelectSelection.Interior.ColorIndex = 46Range(Cells(15, 1), Cells(24, 1)).SelectSelection.Interior.ColorIndex = 20Range(Cells(14, 1), Cells(24, 4)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithEnd Sub
Sub ExperimentoCola02()Dim i As Integer, j, z, tr As Integer, n, c As Integer, Serv As IntegerDim medialleg, mediaserv As Double, inicio(1 To 10000) As SingleDim ultVal, minVal, TLLeg(1 To 10000), Tdesp(1 To 10000), Tserv(1 To 10000)Dim Tmlleg(1 To 10000), W(1 To 10000), Wq(1 To 10000) As SingleDim trll, trs As Integer, servprom As DoubleRange(“I4:P1350”).ClearContentsRange(“C2:C3,F2:F3”).ClearContentsRange(“D6,D11,D15:D24”).ClearContentsRange(“A27:F205”).ClearContentsn = InputBox(“Digite el número de Clientes:”): Cells(2, 3).Value = nServ = InputBox(“Digite el número de servidores:”): Cells(3, 3) = Servpos = 27trll = InputBox(“Digite el número de Tratamiento de la tasa de llegada:”)Cells(7, 4) = trlltrs = InputBox(“Digite el número de Tratamiento de la tasa de servicio:”)Cells(12, 4) = trsc = InputBox(“Digite el número de Réplicas:”): Cells(2, 6) = cm = 0: l = 0Fila = 0mult = (trll) * (c)For t = 1 To trsMsgBox “A CONTINUACION DIGITAR TRATAMIENTO DE LA TASA SERVICIO NUMERO” + Str(t), _vbOKOnly, “TRATAMIENTO DE LA TASA DE SERVICIO”
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
315
Cole
cción
1
tasaserv = InputBox(“Introduzca la TASA DE SERVICIO para el tratamiento “ & t)Cells(11, 4).Value = tasaservFor u = 1 To multCells(pos + u - 1, 2).Value = tNext uFor y = 1 To trllMsgBox “A CONTINUACION DIGITAR TRATAMIENTO DE LA TASA LLEGADA NUMERO” + Str(y), _vbOKOnly, “TRATAMIENTO DE LA TASA DE LLEGADA”Cells(pos + Fila, 1).Value = yFor z = 1 To c Cells(pos + z - 1, 5).Value = zNext ztasalleg = InputBox(“Introduzca la TASA DE LLEGADA para el tratamiento “ & y)Cells(6, 4).Value = tasallegFor x = 1 To cRange(“I4:P” & (n + 3)).ClearContentsminVal = 10000ultVal = 10000semilla = 12000medialleg = (1 / tasalleg): mediaserv = (1 / tasaserv) For i = 1 To Serv Cells(i + 3, 9).Value = i R = Rnd TLLeg(i) = (-1) * (medialleg) * (Application.Ln(1 - R)) ‘Tiempo entre llegadas Cells(i + 3, 10).Value = TLLeg(i) R2 = Rnd Tserv(i) = (-1) * (mediaserv) * (Application.Ln(1 - R2)) ‘Tiempo de servicio Cells(i + 3, 13).Value = Tserv(i) If i = 1 Then Tmlleg(i) = TLLeg(1) Cells(4, 11).Value = Tmlleg(i) inicio(i) = Tmlleg(i) Cells(4, 12).Value = Tmlleg(i) Else Tmlleg(i) = Tmlleg(i - 1) + TLLeg(i) Cells(i + 3, 11).Value = Tmlleg(i) inicio(i) = Tmlleg(i) Cells(i + 3, 12).Value = inicio(i) End If
316
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
Tdesp(i) = inicio(i) + Tserv(i) ‘Tiempo de despacho Cells(i + 3, 14).Value = Round(Tdesp(i), 2) Wq(i) = 0 Cells(i + 3, 15).Value = Round(Wq(i), 2) W(i) = Tdesp(i) - Tmlleg(i) Cells(i + 3, 16).Value = Round(W(i), 2) If ultVal < Tdesp(i) Then ultVal = ultVal Else ultVal = Tdesp(i) End If Next ij = Serv + 1Cells(j + 3, 9).Value = jR = RndTLLeg(j) = (-1) * (medialleg) * (Application.Ln(1 - R))Cells(j + 3, 10).Value = TLLeg(j)R2 = RndTserv(j) = (-1) * (mediaserv) * (Application.Ln(1 - R2))Cells(j + 3, 13).Value = Tserv(j)Tmlleg(j) = Cells(j + 2, 11).Value + Cells(j + 2, 10).ValueCells(j + 3, 11).Value = Tmlleg(j)inicio(j) = Application.max(Tmlleg(j), ultVal): Cells(j + 3, 12).Value = inicio(j)Tdesp(j) = inicio(j) + Tserv(j)Cells(j + 3, 14).Value = Round(Tdesp(j), 2): Tdesp(j) = Cells(i + 3, 14).ValueTmlleg(j) = Cells(i + 3, 11).Value: Tserv(j) = Cells(i + 3, 13).ValueWq(j) = Tdesp(j) - Tmlleg(j) - Tserv(j)Cells(j + 3, 15).Value = Round(Wq(j), 2)W(j) = Tdesp(j) - Tmlleg(j)Cells(j + 3, 16).Value = Round(W(j), 2)For i = Serv + 2 To n Cells(i + 3, 9).Value = i R = Rnd TLLeg(i) = (-1) * (medialleg) * (Application.Ln(1 - R)) Cells(i + 3, 10).Value = TLLeg(i) R2 = Rnd Tserv(i) = (-1) * (mediaserv) * (Application.Ln(1 - R2)) Cells(i + 3, 13).Value = Tserv(i) Tmlleg(i) = Cells(i + 2, 11).Value + Cells(i + 2, 10).Value Cells(i + 3, 11).Value = Tmlleg(i)
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
317
Cole
cción
1
ultVal = inicio(i - 1) minVal = 10000 For j = 1 To i - Serv - 1 If Tdesp(j) > ultVal Then If Tdesp(j) < minVal Then minVal = Tdesp(j) Else minVal = minVal End If End If Next j If minVal = 10000 Then For j = i - Serv To i - 1 If Tdesp(j) < minVal Then minVal = Tdesp(j) Else minVal = minVal End If Next j End If If minVal > Tmlleg(i) Then inicio(i) = minVal Else inicio(i) = Tmlleg(i) End If Cells(i + 3, 12).Value = inicio(i) Tdesp(i) = inicio(i) + Tserv(i) Cells(i + 3, 14).Value = Round(Tdesp(i), 2) W(i) = Tdesp(i) - Tmlleg(i): Cells(i + 3, 16).Value = Round(W(i), 2) Wq(i) = W(i) - Tserv(i): Cells(i + 3, 15).Value = Round(Wq(i), 2)Next i Wprom = Application.Average(Range(“P4:P” & (n + 3))) Cells(21, 4).Value = Round(Wprom, 2) Wqprom = Application.Average(Range(“O5:O” & (n + 3))) Cells(20, 4).Value = Round(Wqprom, 2) maxdesp = ((Application.max(Range(“N4:N” & (n + 3)))) - Cells(4, 11).Value) l = (Application.Sum(Range(“P4:P” & (n + 3)))) / maxdesp Cells(19, 4).Value = Round(l, 0) Lq = (Application.Sum(Range(“O4:O” & (n + 3)))) / maxdesp Cells(18, 4).Value = Round(Lq, 0)
318
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
servprom = l - Lq: Cells(15, 4).Value = servprom u = (servprom / Serv): Cells(17, 4).Value = u Range("D17").Select Selection.NumberFormat = "0.00%" NumPromDesocp = Serv - servpromIf (NumPromDesocp < 0) ThenCells(16, 4).Value = 0ElseCells(16, 4).Value = NumPromDesocpEnd IfSumaTserv = Application.Sum(Range("M4:M" & (n + 3))): Cells(22, 4).Value = SumaTservSumaWq = Application.Sum(Range("O4:O" & (n + 3))): Cells(23, 4).Value = SumaWqSumaW = Application.Sum(Range("P4:P" & (n + 3))): Cells(24, 4).Value = SumaTservMsgBox "REPLICA NUMERO" + Str(x), vbOKOnly, "REPLICA" Cells(pos, 3).Value = Cells(6, 4).Value For u = 1 To mult Cells(pos, 4).Value = Cells(11, 4).Value Next u Cells(pos, 6).Value = Cells(15, 4).Value pos = pos + 1Next xNext yNext tFila = Fila + cEnd Sub
Procedimiento 8.8. macro para realizar el análisis bifactorial del procedimiento 8.7
Sub Bifactorial()Dim alfa, nivel, FceroA, FceroB, FceroI, FalfaA, FalfaB, FalfaI As DoubleDim n, a, b, z As Integer, yi(1 To 1000), y2i(1 To 1000), totyi, sumcuad As DoubleDim SST, SSE, SSA, SSB, SSI, sumcuad2 As DoubleDim i, j As ByteRange(“R2:S15”).ClearContentsRange(“Q1”).Select Selection.Copy Range(“R1:BB100”).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
319
Cole
cción
1
Application.CutCopyMode = False Selection.ClearContentsRange(“Q1:AZ200”).SelectWith Selection .WrapText = True .Font.Name = “Arial” .Font.Size = 12 .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End WithRange(“R2”).Select: ActiveCell.FormulaR1C1 = “Número de tratamientos del primer factor”a = Cells(7, 4).Value: Cells(2, 19).Value = aRange(“R3”).Select: ActiveCell.FormulaR1C1 = “Número de tratamientos del segundo factor”Columns(“R:R”).EntireColumn.AutoFitb = Cells(12, 4).Value: Cells(3, 19) = bRange(“R4”).Select: ActiveCell.FormulaR1C1 = “Número de Réplicas”n = Cells(2, 6).Value: Cells(4, 19) = nl = Int(n / 2): m = n - lRange(Cells(1, 21), Cells(1, b * (m + 1) + 20)).Select With Selection .Interior.Color = 43 .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium End WithSelection.MergeActiveCell.FormulaR1C1 = “Niveles del segundo factor”Range(“T2”).Select: ActiveCell.FormulaR1C1 = “Tratamientos del primer factor”Range(Cells(2, 20), Cells(2, b * (m + 1) + 21)).Select With Selection .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium End Withz = 1For x = 21 To b * (m + 1) + 21 Step m + 1Range(Cells(2, x), Cells(2, x + 1)).SelectWith Selection .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium
320
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
.Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd With Cells(2, x).Value = z: Cells(2, x + 2) = “Total” z = z + 1 Next x Cells(2, b * (m + 1) + 21) = “Gran total” Cells(2, b * (m + 1) + 23) = “”z = 1: Fila = 0: y = 0: Renglon = 0Range(“T2”).SelectFor i = 1 To a p = 0: suma2 = 0 Fila = i + 2 + y: Cells(Fila, 20).Value = z W = m: u = 0 For j = 1 To b cont = 2 * j + 1 mensaje = MsgBox(“Se escribe los valores del tratamiento “ & i & “ del primer factor” _ & “ y el tratamiento “ & j & “ del segundo factor”) Sum = 0: sum1 = 0: suma = 0 For x = 1 To n If (x + u <= W) Then Cells(Fila, 17 + j + W + x).Value = Cells(26 + x + Renglon, 6).Value Sum = Sum + Cells(Fila, 17 + j + W + x).Value Else Cells(Fila + 1, 17 + j + x + W - 2).Value = Cells(26 + x + Renglon, 6).Value sum1 = sum1 + Cells(Fila + 1, 17 + j + x + W - 2).Value End If suma = Sum + sum1 Next x Renglon = Renglon + n yi(j) = suma: Cells(Fila, 17 + l + 1 + cont + p).Value = yi(j) p = p + 1: W = W + 2 u = u + 2: suma2 = suma2 + yi(j) Next j y2i(i) = suma2 Cells(Fila, b * (m + 1) + 21).Value = y2i(i) y = y + 1: z = z + 1: suma3 = 0For x = 1 To asuma3 = suma3 + y2i(x)Next x
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
321
Cole
cción
1
Next itotyi = suma3Cells(2 * a + 3, b * (m + 1) + 21).Value = totyiRange(Cells(2 * a + 2, 20), Cells(2 * a + 2, b * (m + 1) + 21)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMediumRange(Cells(2 * a + 3, 20), Cells(2 * a + 3, b * (m + 1) + 21)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMediumCells(2 * a + 4, 20) = “Fuente de Variación”Cells(2 * a + 5, 20) = “Tratamiento del primer factor”Cells(2 * a + 6, 20) = “Tratamiento del segundo factor”Rows(2 * a + 6).RowHeight = 45Cells(2 * a + 7, 20) = “Interacción”Cells(2 * a + 8, 20) = “Error”Cells(2 * a + 9, 20) = “Total”Cells(2 * a + 4, 21) = “Suma de Cuadrados”Cells(2 * a + 4, 22) = “grados de libertad”Cells(2 * a + 4, 23) = “Media de Cuadrados”Cells(2 * a + 4, 24) = “Fo”Range(Cells(2 * a + 4, 20), Cells(2 * a + 4, 24)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMedium With Selection .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Interior.ColorIndex = 6 End WithRange(Cells(2 * a + 8, 20), Cells(2 * a + 8, 24)).SelectSelection.Borders(xlEdgeBottom).Weight = xlMediumColumns(“T:T”).ColumnWidth = 15sum2 = 0: sum3 = 0: k = a * b * nFor x = 21 To b * (m + 1) + 19 Step m + 1suma4 = CDbl(Application.Sum(Range(Cells(3, x), Cells(2 * a + 2, x + 1))))Cells(2 * a + 3, x).Value = suma4sumcuad = Application.SumSq(Range(Cells(3, x), Cells(2 * a + 2, x + 1)))sum2 = sum2 + sumcuad: sum3 = sum3 + (suma4) ^ 2NextSST = sum2 - ((totyi) ^ 2) / (k): Cells(2 * a + 9, 21).Value = SSTCells(2 * a + 9, 22).Value = a * b * n - 1SSB = ((sum3) / (a * n)) - ((totyi) ^ 2 / k): Cells(2 * a + 6, 21) = SSBCells(2 * a + 6, 22) = b - 1MSB = (SSB / (b - 1)): Cells(2 * a + 6, 23).Value = MSB
322
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
sum4 = 0For i = 1 To asum4 = sum4 + (y2i(i)) ^ 2Next iSSA = ((sum4) / (b * n)) - ((totyi) ^ 2 / k)Cells(2 * a + 5, 21) = SSA: Cells(2 * a + 5, 22) = a - 1MSA = (SSA / (a - 1)): Cells(2 * a + 5, 23).Value = MSAsum5 = 0For x = 21 + m To b * (m + 1) + 20 Step m + 1sumcuad2 = Application.SumSq(Range(Cells(3, x), Cells(2 * a + 2, x)))sum5 = sum5 + sumcuad2NextSSI = ((sum5) / n) - ((totyi) ^ 2 / k) - SSA - SSB: Cells(2 * a + 7, 21) = SSICells(2 * a + 7, 22) = (a - 1) * (b - 1)MSI = (SSI) / ((a - 1) * (b - 1)): Cells(2 * a + 7, 23).Value = MSISSE = SST - SSA - SSB - SSI: Cells(2 * a + 8, 21) = SSECells(2 * a + 8, 22) = a * b * (n - 1)MSE = (SSE / (a * b * (n - 1))): Cells(2 * a + 8, 23).Value = MSEFceroA = (MSA / MSE): Cells(2 * a + 5, 24).Value = FceroAFceroB = (MSB / MSE): Cells(2 * a + 6, 24).Value = FceroBFceroI = (MSI / MSE): Cells(2 * a + 7, 24).Value = FceroIRange(“R5”).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivel: Cells(5, 19) = alfaRange(“R6”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del primer factor”Cells(6, 19).Value = FceroARange(“R7”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del segundo factor”Cells(7, 19).Value = FceroBRange(“R8”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento de la interacción”Cells(8, 19).Value = FceroIRange(“R9”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento del primer factor”v1 = a - 1: Cells(9, 19).Value = v1Range(“R10”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento del segundo factor”v2 = b - 1: Cells(10, 19).Value = v2Columns(“R:R”).EntireColumn.AutoFitRange(“R11”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento de la interación”v3 = (a - 1) * (b - 1): Cells(11, 2).Value = v3Range(“R12”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del error”
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
323
Cole
cción
1
v4 = a * b * (n - 1): Cells(12, 19).Value = v4Range(“R13”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con interacion”FalfaI = Application.FInv(alfa / 2, v3, v4): Cells(13, 19).Value = FalfaIRange(“R14”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con primer factor”FalfaA = Application.FInv(alfa / 2, v1, v4): Cells(14, 19).Value = FalfaARange(“R15”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con segundo factor”FalfaB = Application.FInv(alfa / 2, v2, v4): Cells(15, 19).Value = FalfaBRange(Cells(2, 18), Cells(15, 19)).SelectWith Selection .Interior.ColorIndex = 20 .Borders(xlEdgeLeft).Weight = xlMedium .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMediumEnd WithRange(“T2”).SelectEnd SubSub probando()Dim alfa, nivel, FceroA, FceroB, FceroI, FalfaA, FalfaB, FalfaI As DoubleDim n, a, b, z As Integer, yi(1 To 1000), y2i(1 To 1000), totyi, sumcuad As DoubleDim SST, SSE, SSA, SSB, SSI, sumcuad2 As Double, suma4 As DoubleDim i, j As Bytea = 3b = 3n = 4k = a * b * nm = 2l = 2y2i(1) = 158.12y2i(2) = 158.91y2i(3) = 175.87totyi = Cells(9, 13).ValueCells(2 * a + 3, b * (m + 1) + 4).Value = totyiFor x = 4 To b * (m + 1) + 2 Step m + 1suma4 = CDbl(Application.Sum(Range(Cells(3, x), Cells(2 * a + 2, x + 1))))Cells(2 * a + 3, x).Value = suma4sumcuad = Application.SumSq(Range(Cells(3, x), Cells(2 * a + 2, x + 1)))sum2 = sum2 + sumcuadsum3 = sum3 + (suma4) ^ 2NextSST = sum2 - ((totyi) ^ 2) / (k)Cells(2 * a + 9, 4).Value = SSTCells(2 * a + 9, 5).Value = a * b * n - 1
324
S I M U L A C I Ó N E M P R E S A R I A L C O N A P L I C A C I O N E S D E V I S U A L B A S I C
Cole
cción
1
SSB = ((sum3) / (a * n)) - ((totyi) ^ 2 / k)Cells(2 * a + 6, 4) = SSBCells(2 * a + 6, 5) = b - 1MSB = (SSB / (b - 1)): Cells(2 * a + 6, 6).Value = MSBsum4 = 0For i = 1 To asum4 = sum4 + (y2i(i)) ^ 2Next iSSA = ((sum4) / (b * n)) - ((totyi) ^ 2 / k)Cells(2 * a + 5, 4) = SSACells(2 * a + 5, 5) = a - 1MSA = (SSA / (a - 1)): Cells(2 * a + 5, 6).Value = MSAsum5 = 0For x = 4 + m To b * (m + 1) + 3 Step m + 1sumcuad2 = Application.SumSq(Range(Cells(3, x), Cells(2 * a + 2, x)))sum5 = sum5 + sumcuad2NextSSI = ((sum5) / n) - ((totyi) ^ 2 / k) - SSA - SSBCells(2 * a + 7, 4) = SSICells(2 * a + 7, 5) = (a - 1) * (b - 1)MSI = (SSI) / ((a - 1) * (b - 1)): Cells(2 * a + 7, 6).Value = MSISSE = SST - SSA - SSB - SSICells(2 * a + 8, 4) = SSECells(2 * a + 8, 5) = a * b * (n - 1)MSE = (SSE / (a * b * (n - 1))): Cells(2 * a + 8, 6).Value = MSEFceroA = MSA / MSECells(2 * a + 5, 7).Value = FceroAFceroB = MSB / MSECells(2 * a + 6, 7).Value = FceroBFceroI = MSI / MSECells(2 * a + 7, 7).Value = FceroIRange(“A5”).SelectActiveCell.FormulaR1C1 = “Nivel de Significancia”alfa = CDbl(InputBox(“Introduzca el nivel de significación”)): Cells(5, 2) = alfaRange(“A6”).SelectActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del primer factor”Cells(6, 2).Value = FceroARange(“A7”).SelectActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del segundo factor”Cells(7, 2).Value = FceroBRange(“A8”).SelectActiveCell.FormulaR1C1 = “Valor Fo del tratamiento de la interacción”Cells(8, 2).Value = FceroI
vALIDACIÓN DE RESULTADOS y DISEñO DE EXPERIMENTOS DE S IMULACIÓN
325
Cole
cción
1
Range("A9").SelectActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento del primer factor"v1 = a - 1: Cells(9, 2).Value = v1Range("A10").SelectActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento del segundo factor"v2 = b - 1: Cells(10, 2).Value = v2Columns("A:A").EntireColumn.AutoFitRange("A11").SelectActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento de la interación"v3 = (a - 1) * (b - 1): Cells(11, 2).Value = v3Range("A12").SelectActiveCell.FormulaR1C1 = "Grado de libertad del error"v4 = a * b * (n - 1): Cells(12, 2).Value = v4Range("A13").SelectActiveCell.FormulaR1C1 = "valor Crítico con interacion"FalfaI = Application.FInv(alfa / 2, v3, v4): Cells(13, 2).Value = FalfaIRange("A14").SelectActiveCell.FormulaR1C1 = "valor Crítico con primer factor"FalfaA = Application.FInv(alfa / 2, v1, v4): Cells(14, 2).Value = FalfaARange("A15").SelectActiveCell.FormulaR1C1 = "valor Crítico con segundo factor"FalfaB = Application.FInv(alfa / 2, v2, v4): Cells(15, 2).Value = FalfaBRange("C2").SelectEnd Sub
Ejercicio
1. Simular una estación de gasolina en la que los tiempos entre llegadas de los auto-móviles al sistema están distribuido normalmente con media de 1,5 minutos y desviación estándar de 0,33 minutos y que el tiempo de servicio por automóvil está distribuido en forma exponencial.
Se decide probar cinco niveles (tratamientos) de la media del tiempo de servicio: 1.0, 1.5, 1.8, 2.0 y 2.5 minutos, se probará el valor de la longitud de la cola bajo 5 réplicas de simulación.
Editado por la Universidad Católica de Colombia en marzo de 2018, impreso en papel propalibros de 75 g, en tipografía Minion Pro, tamaño 10.5 pts.
Publicación digitalHipertexto Ltda.
Impreso por:Xpress Estudio Gráfico y Digital S.A
Sapientia aedificavit sibi domum
Bogotá, D. C., Colombia