0% encontró este documento útil (0 votos)
588 vistas329 páginas

Simulacion Visual Basic Web

Cargado por

Eddy Bastidas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
588 vistas329 páginas

Simulacion Visual Basic Web

Cargado por

Eddy Bastidas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1

Simulación empresarial
con aplicaciones
de Visual Basic
Hernando Castro Piñeres
Castro Piñeres, Hernando
Simulación empresarial con aplicaciones de Visual Basic / Hernando Castro Piñeres
Bogotá: 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

Proceso de arbitraje Dirección Editorial Facultad de Ingeniería


[Link] concepto Stella Valbuena García Diagonal 46 N° 15B-10
Evaluación: 1 de junio de 2017 Bogotá, D. C.
Coordinación Editorial
2.o concepto
María Paula Godoy Casasbuenas
Evaluación: 27 de octubre de 2017 Editorial
Corrección de estilo Universidad Católica de Colombia
© Universidad Católica de Colombia John Fredy Guzmán Av. Caracas N° 46-72, piso 5
© Hernando Castro Piñeres Bogotá, D. C.
Diseño de colección editorial@[Link]
Mauricio Salamanca [Link]
Primera edición, Bogotá, D. C.
Diagramación
Marzo de 2018 Hecho el depósito legal
Mauricio Salamanca
© Derechos reservados
Publicación digital
Hipertexto Ltda.
[Link]
Bogotá, D. C., Colombia

Impresión
Xpress Estudio Gráfico y Digital S.A.
Bogotá, D. C., Colombia

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.
A mi esposa Elizabeth, a
mis hijos y a mis nietos,
por quitarles tiempo familiar
para 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? ...................................................................................... 21
Pasos de un proyecto de simulación .................................................................................. 23
Probabilidad e incertidumbre en los modelos de simulación......................................... 26
Aplicaciones de Visual Basic (VBA) para realizar una simulación................................. 28
Macro para determinar la media, la varianza y la desviación estándar de una
distribución empírica discreta.................................................................................... 32
Cálculo del número de corridas de simulaciones.............................................................. 35
Cálculo del número de réplicas........................................................................................... 36
Ejercicios................................................................................................................................ 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................................... 44
Algoritmo de cuadrados medios......................................................................................... 46
Algoritmo de productos medios......................................................................................... 50
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Algoritmo multiplicador constante.................................................................................... 53


Algoritmo de congruencia lineal......................................................................................... 56
Algoritmo de congruencia multiplicativo.......................................................................... 59
Algoritmo de congruencia aditivo...................................................................................... 62
Algoritmo de congruencia cuadrático................................................................................ 64
Comprobación de la uniformidad y aleatoriedad de los generadores de números
pseudoaleatorios........................................................................................................... 66
Ejercicios................................................................................................................................ 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.............................113


Método de la transformada inversa.................................................................................. 113
Método de composición..................................................................................................... 137
Método de convolución..................................................................................................... 153
Generación de variables aleatorias mediante la distribución normal........................... 168
Generación de variables aleatorias mediante la distribución lognormal..................... 172
Ejercicios.............................................................................................................................. 180

Capítulo 5. Generación de variables aleatorias discretas...............................185


Distribución probabilidad de Bernoulli........................................................................... 186
Distribución de probabilidad geométrica........................................................................ 188
Distribución de probabilidad binomial............................................................................ 192

6
Colección
Contenido

Distribución de probabilidad hipergeométrica............................................................... 198


Distribución de probabilidad Poisson.............................................................................. 202
Ejercicios.............................................................................................................................. 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 ................................... 213
Modelo de líneas de espera con un solo servidor............................................................ 215
Modelo de líneas de espera con varios servidores en serie............................................. 231
Modelo de líneas de espera con varios servidores en paralelo....................................... 236
Ejercicios.............................................................................................................................. 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.................................................... 261
Ejercicios.............................................................................................................................. 273

Capítulo 8. Validación de resultados y diseño de experimentos de


simulación............................................................................................................275
Validación del modelo de simulación.............................................................................. 275
Diseño de experimentos de simulación............................................................................ 297
Ejercicio................................................................................................................................ 325

7
Índice de macros

Capítulo 1. Introducción a la simulación..........................................................21


Procedimiento 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.................................... 36
Procedimiento 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
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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..... 58
Procedimiento 2.9. Macro para generar números aleatorios mediante al algoritmo
congruencial multiplicativo........................................................................................ 61
Procedimiento 2.10. Macro para generar números aleatorios mediante el algoritmo
congruencial aditivo..................................................................................................... 63
Procedimiento 2.11. Macro para generar números aleatorios mediante el algoritmo
congruencial cuadrático.............................................................................................. 65
Procedimiento 2.12. Macro para realizar pruebas de medias.......................................... 69
Procedimiento 2.13. Macro para hacer prueba de varianzas a números aleatorios...... 71
Procedimiento 2.14. Macro para realizar prueba Chi-cuadrado
a números aleatorios.................................................................................................... 74
Procedimiento 2.15. Macro para hacer prueba Kolmogorov-Smirnov.......................... 78
Procedimiento 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

10
Colección
Í ndice de macros

Capítulo 4. Generación de variables aleatorias continuas.............................113


Procedimiento 4.1. Macro para generar una variable aleatoria empírica.................... 115
Procedimiento 4.2. Macro para generar variables exponenciales sin el valor
mínimo........................................................................................................................ 118
Procedimiento 4.3. Macro para generar variables exponenciales con el valor
mínimo........................................................................................................................ 120
Procedimiento 4.4. Macro para generar variables uniformes........................................ 124
Procedimiento 4.5. Macro para generar variables exponenciales y uniformes........... 126
Procedimiento 4.6. Macro para un programa maestro de producción........................ 129
Procedimiento 4.7. Macro para generar variables Weibull sin el valor mínimo......... 134
Procedimiento 4.8. Macro para generar variables Weibull con valor mínimo........... 136
Procedimiento 4.9. Macro para generar variables triangulares..................................... 143
Procedimiento 4.10. Macro para generar variables trapezoidales................................ 149
Procedimiento 4.11. Macro para generar variables trapezoidales del ejemplo 4.7..... 151
Procedimiento 4.12. Macro para generar variables de tipo Erlang sin el valor
mínimo........................................................................................................................ 156
Procedimiento 4.13. Macro para generar variables de tipo Erlang con valor
mínimo ....................................................................................................................... 158
Procedimiento 4.14. Macro para generar variables de tipo Gamma sin el valor
mínimo........................................................................................................................ 161
Procedimiento 4.15. Macro para generar variables de tipo Beta con valor mínimo y
valor máximo.............................................................................................................. 163
Procedimiento 4.16. Macro para realizar un control de calidad................................... 166
Procedimiento 4.17. Macro para generar variables con distribución normal............. 170
Procedimiento 4.18. Macro para desarrollar proceso de dos etapas en serie.............. 177

Capítulo 5. Generación de variables aleatorias discretas...............................185


Procedimiento 5.1. Macro para generar variables aleatorias de tipo Bernoulli........... 187
Procedimiento 5.2. Macro para generar variables aleatorias de tipo geométrica ....... 190

11
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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............................ 216
Procedimiento 6.2. Macro para simulación de líneas de espera con formato
horario......................................................................................................................... 220
Procedimiento 6.3. Macro para la simulación de llegadas de varios tipo de piezas.... 225
Procedimiento 6.4. Macro para la simulación de varios servidores en serie............... 232
Procedimiento 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

12
Colección
Í ndice de macros

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......... 281
Procedimiento 8.3. Macro para realizar prueba t de Student para un modelo
simulado...................................................................................................................... 285
Procedimiento 8.4. Macro para realizar prueba U de Mann-Whitney ........................ 290
Procedimiento 8.5. Macro para realizar prueba Chi-cuadrado a una distribución de
probabilidad teórica................................................................................................... 293
Procedimiento 8.6. Macro para realizar diseño de experimento con Anova............... 300
Procedimiento 8.7. Macro para simular un modelo de línea de espera con réplicas
para realizar diseño de experimento........................................................................ 312
Procedimiento 8.8. macro para realizar el análisis bifactorial
del procedimiento 8.7................................................................................................ 318

13
Prólogo

T
engo 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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Molina


[Link]. e ingeniero industrial
Profesor de tiempo completo de la
Universidad Católica de Colombia

16
Introducción

E
ste 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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

18
Colección
I ntroducción

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

19
Introducción a la simulación
1

¿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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

22
Colección
I ntroducción a la simulación

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.

23
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

• 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ó.

24
Colección
I ntroducción a la simulación

• 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.

25
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 .

26
Colección
I ntroducción a la simulación

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.

27
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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

28
Colección
I ntroducción a la simulación

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.

29
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

¿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.

30
Colección
I ntroducción a la simulación

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 instrucciones
Y 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.

31
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 mensual


Demanda mensual (unidades) Probabilidad de ocurrencia
85 0,05
110 0,10
130 0,15
145 0,20
150 0,12
165 0,15
175 0,13
190 0,05
200 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:

32
Colección
I ntroducción a la simulación

• 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 variables
Dim miu, sigma, V As Double, P(1 To 1000) As Double
Dim x(1 To 1000) As Long, n As Integer
Limpiarborrar
[Link] = False
Range(“A1:E200”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.ReadingOrder = xlContext
End With
Range(“B2”).Select: ActiveCell.FormulaR1C1 = “Variable Aleatoria”
Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Probabilidad”
Range(“B2:C2”).Select
[Link] = 6
inicio:
n = InputBox(“Introduzca el número de datos o eventos a introducir:” _

33
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

& “ (No debe ser mayor que 1000)”)


If n > 1000 Then
GoTo inicio
End If
‘cuadricular
Range(“B2:C” & (n + 6)).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
End With
Range(“B3:C” & (n + 6)).Select: [Link] = 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 Then
MsgBox “La probabilidad es incorrecta”, vbOKOnly, “! ERROR! “
GoTo comenzar
End If
Cells(i + 2, 3).Value = P(i)
Sum = Sum + P(i)
Next i
If Sum > 1 Then
Range(“B3:C” & (n + 3)).ClearContents
GoTo comenzar
End If
‘cálculo de la media
Range(“B” & (n + 4)).Select: ActiveCell.FormulaR1C1 = “La media es”
miu = [Link](Range(“B3:B” & (n + 2)), Range(“C3:C” & (n + 2)))
Cells(n + 4, 3).Value = miu
Range(“B” & (n + 5)).Select: ActiveCell.FormulaR1C1 = “La Varianza es”
For i = 1 To n
V = V + ((x(i) - miu) ^ 2) * P(i)
Next i
Cells(n + 5, 3).Value = Round(V, 2)

34
Colección
I ntroducción a la simulación

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”).Select
End Sub
Sub Limpiarborrar()
Range(“M7”).Select
[Link]
Range(“A1:J1000”).Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range(“A1”).Select
End 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.

35
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim Z As Double, confiabilidad As Double, alfa As Double
k = InputBox ("Digite el rango del valor de la variable:")
confiabilidad = InputBox ("Digite la confiabilidad en valores decimales:")
alfa = (1 - confiabilidad) / 2
Z = [Link](alfa)
n = (Z ^ 2) / (k ^ 2)
MsgBox n
End 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.

36
Colección
I ntroducción a la simulación

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.

37
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

• 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.

38
Colección
I ntroducción a la simulación

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 Integer
Dim k As Integer, prom(2000), V2(2000), V3 As Double
Limpiarborrar
[Link] = 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
[Link] = 24
Range(“B9:C” & (n + 8)).Select
[Link] = 19
Range(“F9:G” & (k + 8)).Select
[Link] = 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
[Link] = 20
Range(Cells(k + 9, 6), Cells(k + 11, 7)).Select
[Link] = 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”

39
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

For i = 1 To k
Var = “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) = [Link](Range(“C9:C” & (n + 8)))
Cells(i + 8, 7) = prom(i)
V2(i) = [Link].Var_S(Range(“C9:C” & (n + 8)))
Cells(i + 8, 8).Value = V2(i)
V3 = V3 + (i - 1) * V2(i)
Next i
Cells(k + 9, 7).Value = [Link](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).Select
End Sub
Sub Limpiarborrar()
Range("M7").Select
[Link]
[Link]
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range("A1").Select
End Sub

40
Colección
I ntroducción a la simulación

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 600


P(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:

41
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

42
Generación de números aleatorios
con aplicaciones de Visual Basic 2

U
n 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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

44
Colección
Generación de números aleatorios con aplicaciones de visual basic

Procedimiento 2.1. Macro para “limpiar” la hoja de cálculo y generar números aleatorios1

Sub Limpiar()
Range("R1").Select
[Link]
[Link]
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range("A1").Select
End Sub

Procedimiento 2.2. Macro para cuadricular (todos los bordes) celdas y generar números aleatorios

Private Sub CommandButton1_Click()


Dim N As Integer
[Link] = False
Range("A1:C200").Select
With Selection
.[Link] = True
.[Link] = "Arial"
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range("A4").Select: ActiveCell.FormulaR1C1 = "Número de corridas"
Range("B4").Select: ActiveCell.FormulaR1C1 = "Números Aleatorios"
Range("A4:B4").Select
[Link]. ColorIndex = 46
N = InputBox ("Introduzca el número de aleatorios que desea:")
Cells(1, 1).Value = N
Range(Cells(4, 1), Cells(N + 4, 2)).Select
With Selection

1 Este procedimiento se hizo con la ayuda del grabador de macros

45
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.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”).Select
End Sub

Procedimiento 2.3. Macro para generar números aleatorios mediante la instrucción Rnd

Private Sub CommandButton2_Click()


Dim N As Integer
N = Cells(1, 1).Value
For i = 1 To N
Cells(i + 4, 1).Value = i
R = Rnd
Cells(i + 4, 2).Value = R
Next i
End 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.

46
Colección
Generación de números aleatorios con aplicaciones de visual basic

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.

47
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = "Arial"
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range("F3").Select: ActiveCell.FormulaR1C1 = "Número de corridas"
Range("G3").Select: ActiveCell.FormulaR1C1 = "Números Aleatorios"
Range("F3:G3").Select
[Link]. ColorIndex = 46
N = InputBox ("Introduzca el número de aleatorios que desea:")
Cells(1, 1).Value = N
Range(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").Select
End Sub

48
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 Variant


LIMPIAR
[Link] = False
Inicio:
X = InputBox ("Introduzca la semilla de aleatorización minimo de tres dígitos:")
Cells (2, 2). Value = X
If (X <= 100) Then
MsgBox "La semilla debe ser minimo de tres dígitos", vbOKOnly, "¡¡ERROR!!"
GoTo Inicio
End If
k = 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 = k
L = InputBox ("Introduzca el número de dígitos de centro que se debe devolver:")

49
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Cells (3, 2). Value = L


For i = 1 To n
Cells (3 + i, 6). Value = i
Y=X^2
M = Mid (Y, k, L)
Cells (3 + i, 7). Value = M / ((10) ^ (L))
X=M
Next
End Sub
Sub LIMPIAR ()
Range(“R1”). Select
[Link]
[Link]
[Link] Paste: =xlPasteFormats, Operation: =xlNone, _
SkipBlanks: =False, Transpose: =False
[Link] = False
[Link]
Range(“A1”). Select
End 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.

50
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 aleatorizacion
c. 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.

51
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Long
Dim k, L As Integer, R(2000) As Variant
Dim M As Variant, c As Integer
LIMPIAR
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Inicio:
Range(“D1”).Select
ActiveCell.FormulaR1C1 = “Semilla de aleatorización 1”
Range(“F1”).Select
ActiveCell.FormulaR1C1 = “Semilla de aleatorización 2”
X = InputBox(“Introduzca la primera Semilla de aleatorización mínimo de tres cifras”)
Cells(1, 5).Value = X
Y = InputBox(“Introduzca la segunda Semilla de aleatorización mínimo de tres cifras”)
Cells(1, 7).Value = Y
If (X < 100) And (Y < 100) Then
MsgBox “Los números deben ser mayor de tres Dígitos”, vbOKOnly, “ERROR”
GoTo Inicio
End If
Columns(“D:E”).[Link]
comenzar:
k = InputBox(“Introduzca el valor de las primeras posicciones”)
Cells(1, 8).Value = k
L = InputBox(“Introduzca el número de caracteres de centro que se debe devolver”)
Cells(1, 9).Value = L
If (k > L) Then
MsgBox “El número de primeras posiciones debe ser menor que el numero de caracteres centrales”,
vbOKOnly, “ERROR”
GoTo comenzar
End If

52
Colección
Generación de números aleatorios con aplicaciones de visual basic

c = InputBox(“Introduzca el Número Corridas”): Cells(1, 10).Value = c


Range(“F3”).Select
ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”).Select
ActiveCell.FormulaR1C1 = “Número Aleatorio”
Range(“F3:G3”).Select
[Link] = 46
Range(“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 With
For i = 1 To c
Cells(i + 3, 6).Value = i
X1 = X
Y1 = Y
Z = X1 * Y1
M = Mid(Z, k, L)
R(i) = (M / (10 ^ (L)))
Cells(i + 3, 7).Value = R(i)
X = Y1
Y=M
Next
Range(“E1”).Select
End 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.

53
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 aleatorizacion
c. Condicionar el número de dígitos de la semilla.
d. Captura del número de caracteres por extraer, mediante la función Mid.

54
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 Long
Dim k, L As Integer, R(2000) As Variant
Dim M As Variant, c As Integer
LIMPIAR
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Inicio:
Range(“D1”).Select
ActiveCell.FormulaR1C1 = “Semilla de aleatorización 1”
Range(“F1”).Select
ActiveCell.FormulaR1C1 = “Semilla de aleatorización 2”
X = InputBox(“Introduzca la primera Semilla de aleatorización mínimo de tres cifras”)
Cells(1, 5).Value = X
Y = InputBox(“Introduzca la Semilla de aleatorización constante mínimo de tres cifras”)
Cells(1, 7).Value = Y
If (X < 100) And (Y < 100) Then
MsgBox “Los números deben ser mayor de tres Dígitos”, vbOKOnly, “ERROR”
GoTo Inicio
End If
Columns(“D:E”).[Link]

55
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

comenzar:
k = InputBox(“Introduzca el valor de las primeras posicciones”)
Cells(1, 8).Value = k
L = InputBox(“Introduzca el número de caracteres de centro que se debe devolver”)
Cells(1, 9).Value = L
If (k > L) Then
MsgBox “El número de primeras posiciones debe ser menor que el numero de caracteres centra-
les”, vbOKOnly, “ERROR”
GoTo comenzar
End If
c = InputBox(“Introduzca el Número Corridas”): Cells(1, 10).Value = c
Range(“F3”).Select
ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”).Select
ActiveCell.FormulaR1C1 = “Número Aleatorio”
Range(“F3:G3”).Select
[Link] = 46
Range(“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 With
For i = 1 To c
Cells(i + 3, 6).Value = i
X1 = X
Y1 = Y
Z = X1 * Y1
M = Mid(Z, k, L)
R(i) = (M / (10 ^ (L)))
Cells(i + 3, 7).Value = R(i)
X=M
Next
Range(“E1”).Select
End Sub

Una vez que ha finalizado la corridad de esta macro, se obtiene el siguiente, mostrado
en la figura siguiente.

56
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 multiplicativa
b = constante aditiva
k = el módulo
Mod = función de Excel del residuo de la división
X0 = 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.

57
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
Dim X(0 To 10000) As Double, R As Double
Limpiar
[Link] = False
Range(“A1:H200”).Select
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Inicio:
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) Then
MsgBox “El número debe ser mayor que 10”, vbOKOnly, “ERROR”
GoTo Inicio
End If
Range(“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”).[Link]
Cells(1, 5).Value = X: Cells(2, 5).Value = a
Cells(3, 5).Value = b: Cells(4, 5).Value = k
Range(“F3”). Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”
Range(“F3:G3”).Select

58
Colección
Generación de números aleatorios con aplicaciones de visual basic

[Link] = 6
comenzar:
c = InputBox (“Introduzca el Número Corridas”): Cells (1, 8).Value = c
For i = 1 To c
Cells(i + 3, 6).Value = i
X(i) = (a * X(i - 1) + b) Mod k
R = X(i) / (k - 1): Cells(i + 3, 7).Value = R
Next
Cuadricular
Range("E1").Select
End 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:

59
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

60
Colección
Generación de números aleatorios con aplicaciones de visual basic

Procedimiento 2.9. Macro para generar números aleatorios


mediante al algoritmo congruencial multiplicativo

Sub Congruencialmultiplicativo()
Dim n, M As Variant, k As Integer
Dim X(0 To 10000) As Double, R As Double
Limpiar
[Link] = False
Range(“A1:F200”).Select
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
k=2
X(0) = InputBox(“Introduzca una Semilla de aleatorización mínimo de dos cifras e impar”)
a=8*k+3
G = InputBox(“Introduzca un número entero”): M = 2 ^ G
Range(“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”).[Link]
Cells(1, 5).Value = X(0): Cells(2, 5).Value = k
Cells(3, 5).Value = G: Cells(4, 5).Value = a
Cells(5, 5).Value = M
Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”
Range(“F3:G3”).Select
[Link] = 6
c = InputBox("Introduzca el Número Corridas"): Cells(1, 8).Value = c
For i = 1 To c
Cells(i + 3, 6).Value = i
X(i) = (a * X(i - 1)) Mod M
R = X(i) / (M - 1): Cells(i + 3, 7).Value = R
Next
Cuadricular
Range("E1").Select
End Sub

61
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

62
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 Double
Limpiar
[Link] = False
Range(“A1:H2000”).Select
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
n = InputBox (“Introduzca el número de secuencia de número enteros”)
For i = 1 To n
Cells(i, 1).Value = “X” & i
X(i) = InputBox (“Introduzca el número de X “ & i & “ de la secuencia”)
Cells(i, 2).Value = X(i)
Next
Range(“A” & (n + 1)).Select: ActiveCell.FormulaR1C1 = “M”
M = InputBox (“Introduzca el módulo”): Cells (n + 1, 2). Value = M
k = InputBox (“Introduzca el número de seudo-aleatorios a generar”)
Cells (1, 8). Value = k
Range(“F3”). Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”). Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”
Range (“F3:G3”). Select
[Link] = 6
For i = n + 1 To n + k
Cells(i - 2, 6).Value = i - n
X(i) = (X(i - 1) + X(i - n)) Mod M
R = X(i) / (M - 1): Cells(i - 2, 7).Value = R
Next
Cuadricular
Range("A1").Select
End Sub

63
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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

64
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 Double
Dim X(0 To 10000) As Double
Limpiar
[Link] = False
Range(“A1:H2000”).Select
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“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 ^ G
Columns(“D:D”).[Link]
Cells(1, 5).Value = X(0): Cells(2, 5).Value = a
Cells(3, 5).Value = b: Cells(4, 5).Value = c: Cells(5, 5).Value = M
Range(“F3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“G3”).Select: ActiveCell.FormulaR1C1 = “Números Aleatorios”
Range(“F3:G3”).Select
[Link] = 6
cor = InputBox(“Introduzca el Número Corridas”): Cells(1, 8).Value = cor
For i = 1 To cor
Cells(i + 3, 6).Value = i

65
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

X(i) = (a * (X(i - 1)) ^ 2 + b * X(i - 1) + c) Mod M


R = X(i) / (M - 1)
Cells(i + 3, 7).Value = R
Next
Cuadricular
Range("E1").Select
End 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 = 0
b = cota superior = 1

La media

La varianza

La desviación estándar =

66
Colección
Generación de números aleatorios con aplicaciones de visual basic

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.5


Hipó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 i
Nivel = 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.

67
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = [Link](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 aleatorio
1 0,04740 11 0,59898
2 0,26205 12 0,62984
3 0,12289 13 0,05681
4 0,35782 14 0,92989
5 0,17700 15 0,36130
6 0,27035 16 0,14501
7 0,89948 17 0,84883
8 0,05535 18 0,96498
9 0,30545 19 0,21771
10 0,78847 20 0,07363

2 La macro se realiza bajo los parámetros del cuadro anterior

68
Colección
Generación de números aleatorios con aplicaciones de visual basic

Procedimiento 2.12. Macro para realizar pruebas de medias

Sub pruebaNormal ()
Dim alfa, nivel, zetacero, zetaalfa, zeraalfa2 As Double
Dim n As Integer, x As Double
Range (“A4:B9”). ClearContents
respuesta = 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 Then
Exit Sub
End If
n = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)
Range(“A4”). Select
ActiveCell.FormulaR1C1 = “Tamaño de la muestra”
Columns(“A:A”).[Link]
Cells(4, 2).Value = n
Range(“A5”). Select
ActiveCell.FormulaR1C1 = “Nivel de Significancia”
nivel = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = nivel
alfa = (1 - nivel): Prob = 1 - (alfa / 2)
Range(“A6”). Select
ActiveCell.FormulaR1C1 = “Valor Crítico 1”
zetaalfa = 0.5 + ([Link](alfa / 2) *(1/Sqr(12*n))
Cells(6, 2).Value = zetaalfa
Range(“A7”).Select
ActiveCell.FormulaR1C1 = “Valor Crítico 2”
Zetaalfa2 = 0.5 + (Application. [Link](Prob)) *(1/Sqr(12*n))
Cells(7, 2).Value = zetaalfa2
Range(“A8”).Select
ActiveCell.FormulaR1C1 = “El estadístico”
Range(“A9”). Select
ActiveCell.FormulaR1C1 = “La media es”
x = [Link](Range(Cells(4, 7), Cells(n + 3, 7))): Cells(9, 2).Value = x
sigma = Sqr (1 / 12)
zetacero = (((x - 0.5)) * Sqr(n)) / sigma: Cells (8, 2).Value = zetacero
If (zetacero < zetaalfa2) and (zetacero > zetaalfa )Then
aceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una _
&” distribución Uniforme” & “ con media 0.5”, vbInformation)
Else

69
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

rechazo = MsgBox ("Se rehaza los números aleatorios generados que provienen de una _ &”
distribución Uniforme" & " con media 0.5", vbInformation)
End If
Range("A10").Select
End 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 i
Nivel = 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,

70
Colección
Generación de números aleatorios con aplicaciones de visual basic

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,59898
2 0,26205 12 0,62984
3 0,12289 13 0,05681
4 0,35782 14 0,92989
5 0,17700 15 0,36130
6 0,27035 16 0,14501
7 0,89948 17 0,84883
8 0,05535 18 0,96498
9 0,30545 19 0,21771
10 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 Double
Dim n As Integer, x As Double, r (1 To 10000), v (1 To 1000) As Double
Range (“A4:B10”). ClearContents
respuesta = 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 Then
Exit Sub
End If
n = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)

3 La macro se realiza bajo los parámetros del cuadro anterior.

71
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Range(“A4”). Select
ActiveCell.FormulaR1C1 = “Tamaño de la muestra”
Columns (“A: A”). [Link]
Cells (4, 2). Value = n
Range(“A5”). Select
ActiveCell.FormulaR1C1 = “Valor de alfa”
alfa = CDbl (InputBox (“Introduzca el valor de alfa”)): Cells (5, 2) = alfa
Range(“A6”). Select
ActiveCell.FormulaR1C1 = “Grado de libertad”
g = n - 1: Cells (6, 2). Value = g
Range(“A7”). Select
ActiveCell.FormulaR1C1 = “Valor Crítico1”
Chicero1 = ([Link]. ChiInv (alfa/2, g))/(12*(n-1)): Cells (7, 2). Value =
Chicero1
Range(“A8”). Select
ActiveCell.FormulaR1C1 = “Valor Crítico2”
Chicero2 = ([Link]. ChiInv (1- (alfa/2), g))/(12*(n-1)): Cells (8, 2). Value =
Chicero2
Range(“A9”). Select
ActiveCell.FormulaR1C1 = “La media muestral”
x = Application. Average (Range (“G4: G” & (n + 3))): Cells (9, 2). Value = x
For i = 1 To n
r(i) = Cells (i + 3, 7). Value
Next i
For i = 1 To n
v(i) = ((r(i) - x) ^ 2) / (n - 1)
Sum = Sum + v(i)
Next i
Range(“A10”). Select
ActiveCell.FormulaR1C1 = “La Varianza poblacional”
Columns (“A: A”). [Link]
Cells (10, 2). Value = 1 / 12
Range(“A11”). Select
ActiveCell.FormulaR1C1 = “La Varianza muestral”
VarM = Sum: Cells (11, 2). Value = Sum
If (VarM ≥ Chicero1) and (VarM ≤ Chicero2) Then
aceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una distribu-
ción _ Uniforme” & “ con varianza 1/12”, vbInformation)
Else
rechazo = MsgBox (“Se rechaza los números aleatorios generados que provienen de una distribución
Uniforme”_
& “ con varianza 1/12”, vbInformation)
End If
End Sub

72
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 encontrar
en 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).

73
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 probar


Número Número aleatorio Número Número aleatorio
1 0,04740 11 0,59898
2 0,26205 12 0,62984
3 0,12289 13 0,05681
4 0,35782 14 0,92989
5 0,17700 15 0,36130
6 0,27035 16 0,14501
7 0,89948 17 0,84883
8 0,05535 18 0,96498
9 0,30545 19 0,21771
10 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 Double
Dim n As Integer, x, y As Double
Dim FO(1 To 1000), FE(1 To 1000) As Integer
Dim r(1 To 1000), dif(1 To 1000) As Double
Range (“A4:B9”). ClearContents
respuesta = MsgBox (“Para iniciar este aplicativo debe haberse obtenido los números aleatorios”
&_
“partiendo de la celda G4” & vbCrLf & vbCrLf & “ ¿Está seguro? “, vbYesNo + vbCritical +
vbDefaultButton2 _

74
Colección
Generación de números aleatorios con aplicaciones de visual basic

, “DECISION DE CONTINUAR”)
If respuesta = vbNo Then
Exit Sub
End If
n = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)
Range(“A4”). Select: ActiveCell.FormulaR1C1 = “Tamaño de la muestra”
Columns(“A:A”).[Link]
Cells(4, 2).Value = n
Range(“A5”). Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”
alfa = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = alfa
m = Round(1 + 3.322 * ([Link](n)), 0)
Range(“A6”). Select: ActiveCell.FormulaR1C1 = “Números de intervalos”
Cells(6, 2).Value = m
DMin = [Link](Range(“G4:G” & (n + 3)))
DMax = [Link](Range(“G4:G” & (n + 3)))
interv = ((DMax - DMin) / m)
Range(“A7”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad”
g = m - 1: Cells(7, 2).Value = g
Range(“A8”).Select: ActiveCell.FormulaR1C1 = “valor Crítico”
Chialfa = [Link](alfa, g): Cells(8, 2).Value = Chialfa
For x = 1 To n
r(x) = Cells(x + 3, 7).Value
Next x
Range(“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”).[Link]
Range(“I3:L3”).Select
[Link] = True
[Link] = “Arial”
[Link] = True
[Link] = xlCenter
[Link] = xlCenter
[Link] = 6
y = DMin
Chicero = 0
For i = 1 To m
Cells(i + 3, 9) = y & “ - “ & (y + interv)
FO(i) = 0
For j = 1 To n
If r(j) > y And r(j) <= (y + interv) Then
FO(i) = FO(i) + 1
End If

75
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Next j
y = y + interv
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 i
Range(“A9”). Select
ActiveCell.FormulaR1C1 = “El estadístico”
Cells(9, 2).Value = Chicero
If Chicero < Chialfa Then
aceptacion = MsgBox (“No se rechaza los números aleatorios generados que provienen de una
distribución _ Uniforme” & “ con media 0.5”, vbInformation)
Else
rechazo = MsgBox (“Se rechaza los números aleatorios generados que provienen de una distribución _
Uniforme” & “ con media 0.5”, vbInformation)
End If
End 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 significancia
Dn, α = 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).

76
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 comprobar


Número Número aleatorio Número Número aleatorio
1 0,04740 11 0,59898
2 0,26205 12 0,62984
3 0,12289 13 0,05681
4 0,35782 14 0,92989
5 0,17700 15 0,36130
6 0,27035 16 0,14501
7 0,89948 17 0,84883
8 0,05535 18 0,96498
9 0,30545 19 0,21771
10 0,78847 20 0,07363

A continuación, se mostrará la macro que sirve para hacer la prueba Kolmogorov


-Smirnov.

77
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Procedimiento 2.15. Macro para hacer prueba Kolmogorov-Smirnov

Sub pruebaKolmogorov()
Dim alfa, nivel As Double
Dim n As Integer, x As Double
Dim FN(1 To 1000) As Double
Dim r(1 To 1000), dif(1 To 1000) As Double
Range (“A4:B8”). ClearContents
respuesta = 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 Then
Exit Sub
End If
n = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)
Range(“A4”). Select: ActiveCell.FormulaR1C1 = “Tamaño de la muestra”
Columns(“A:A”).[Link]
Cells(4, 2).Value = n
Range(“H3”). Select: ActiveCell.FormulaR1C1 = “Números Aleatorios Ordenados”
‘Limpiar
Range(“G3:G” & (n + 3)).Select
[Link]
Range(“H3:J” & (n + 3)).Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
Range(“H3:J” & (n + 3)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Mensaje = “¿Desea realizar la ordenación de estos números aleatorios?”
estilo = vbYesNo + vbCritical + vbDefaultButton1
titulo = “Toma de decisiones”
respuesta2 = MsgBox (mensaje, estilo, titulo)
If respuesta2 = vbNo Then GoTo salida
Range(“G4:G” & (n + 3)).Select
[Link]

78
Colección
Generación de números aleatorios con aplicaciones de visual basic

Range(“H4”).Select
[Link]
Range(“H4:H” & (n + 3)).Select
[Link] = False
Range(“G3”).Select
Range(“H4:H” & (n + 3)).Sort Key1:=Range(“H4”), Order1:=xlAscending, Header:=xlGuess,
OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, Dataoption1:=xlSortNormal
MsgBox (“ORDENACION REALIZADA”)
Range(“A5”). Select
ActiveCell.FormulaR1C1 = “Nivel de Significancia”
alfa = CDbl (InputBox (“Introduzca el nivel de significación”)): Cells (5, 2) = alfa
For x = 1 To n
r(x) = Cells(x + 3, 8).Value
Next x
Range(“I3”).Select
ActiveCell.FormulaR1C1 = “Fn(yi)=i/n”
Range(“J3”).Select
ActiveCell.FormulaR1C1 = “|yi-i/n|”
Columns(“I:I”).[Link]
Range(“H3:J3”).Select
[Link] = True
[Link] = “Arial”
[Link] = True
[Link] = xlCenter
[Link] = xlCenter
[Link] = 6
For i = 1 To n
Cells(i + 3, 9) = i / n
dif(i) = Abs(r(i) - (i / n))
Cells(i + 3, 10) = dif(i)
Next i
Range(“A6”). Select
ActiveCell.FormulaR1C1 = “El estadístico”
Dn = [Link](Range(“J4:J” & (n + 3))): Cells(6, 2).Value = Dn
Range(“A7”). Select
ActiveCell.FormulaR1C1 = “El valor Crítico”
valor = InputBox (“Introduzca el valor crítico de la prueba:”): Cells (7, 2).Value = valor
If Dn <= valor Then

79
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

aceptacion = MsgBox ("No se rechaza los números aleatorios generados que provienen de una
distribución _ Uniforme" & " con media 0.5", vbInformation)
Else
rechazo = MsgBox ("Se rechaza los números aleatorios generados que provienen de una distribu-
ción Uniforme" _
& " con media 0.5", vbInformation)
End If
salida:
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α ) = α

80
Colección
Generación de números aleatorios con aplicaciones de visual basic

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 Double
Dim n As Integer, x As Double, r(1 To 10000) As Double
Range (“A4:B8”). ClearContents
respuesta = 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 Then
Exit Sub
End If
n = InputBox (“Introduzca la cantidad de números aleatorios obtenidos:”)
Range(“A4”). Select
ActiveCell.FormulaR1C1 = “Tamaño de la muestra”
Cells(4, 2).Value = n
For i = 1 To n
r(i) = Cells(i + 3, 7).Value
Next i
For j = 1 To n - 1
If r(j) < r(j + 1) Then
Cells(j + 4, 8).Value = “ + “
Cells(j + 4, 8).[Link] = True

81
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Cells(j + 4, 8).[Link] = "Arial"


Cells(j + 4, 8).[Link] = 12
Else
Cells(j + 4, 8).Value = " - "
Cells(j + 4, 8).[Link] = True
Cells(j + 4, 8).[Link] = "Arial"
Cells(j + 4, 8).[Link] = 12
End If
Next j
Range("A5"). Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"
alfa = CDbl (InputBox ("Introduzca el nivel de significación")): Cells (5, 2) = alfa
Prob = 1 - (alfa)
Range("A6"). Select: ActiveCell.FormulaR1C1 = "Valor Crítico "
alfa2 = [Link](alfa ): Cells (6, 2). Value = alfa2
Range("A7"). Select: ActiveCell.FormulaR1C1 = "Valor Crítico 2"
zetaalfa = [Link](Prob): Cells(7, 2).Value = zetaalfa
Range("A8"). Select: ActiveCell.FormulaR1C1 = "La media de las rachas"
miu = (2 * n - 1) / 3: Cells (8, 2). Value = miu
Range("A9"). Select: ActiveCell.FormulaR1C1 = "La varianza de las rachas"
v = (16 * n - 29) / 90: Cells(9, 2).Value = v
sigma = 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 = x
Range("A11"). Select: ActiveCell.FormulaR1C1 = "El estadístico"
zetacero = (x - miu) / sigma: Cells (11, 2). Value = zetacero
Columns("A:A").[Link]
If (Abs(zetacero)) < zetaalfa Then
aceptacion = MsgBox ("No se rechaza los números aleatorios generados que provienen de una
distribución _ Uniforme con media 0.5", vbInformation)
Else
rechazo = MsgBox ("Se rechaza los números aleatorios generados que provienen de una distribución _
Uniforme con media 0.5", vbInformation)
End If
End Sub

82
Colección
Generación de números aleatorios con aplicaciones de visual basic

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:

83
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Número Número Número


Número Número Número Número Número
aleatorio aleatorio aleatorio aleatorio aleatorio
1 0,7705 11 0,4739 21 0,0712 31 0,9634 41 0,4472
2 0,3567 12 0,7256 22 0,9314 32 0,3021 42 0,2323
3 0,6148 13 0,3195 23 0,7855 33 0,7446 43 0,6813
4 0,9627 14 0,6632 24 0,9816 34 0,7128 44 0,0466
5 0,7602 15 0,9125 25 0,8182 35 0,3954 45 0,5128
6 0,1166 16 0,0934 26 0,4689 36 0,7138 46 0,7159
7 0,0800 17 0,7321 27 0,4737 37 0,5903 47 0,8716
8 0,7320 18 0,6438 28 0,7094 38 0,3377 48 0,6843
9 0,9662 19 0,0140 29 0,5453 39 0,6716 49 0,5161
10 0,0826 20 0,2079 30 0,0312 40 0,5208 50 0,4815

84
Generación de variables aleatorias
mediante la técnica de Montecarlo 3

L
a 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) = R
Despejando 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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = [Link](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.

86
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

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 ocurrencia


85 0,05
110 0,10
130 0,15
145 0,20
150 0,12
165 0,15
175 0,13
190 0,05
200 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 Probabilidad de Probabilidad Intervalo del número
(unidades) ocurrencia acumulada aleatorio
85 0,05 0,05 0 ≤ r ≤ 0,05
110 0,10 0,15 0,05 ≤ r ≤ 0,15
130 0,15 0,30 0,15 ≤ r ≤ 0,30
145 0,20 0,50 0,30 ≤ r ≤ 0,50
150 0,12 0,62 0,50 ≤ r ≤ 0,62
165 0,15 0,77 0,62 ≤ r ≤ 0,77
175 0,13 0,90 0,77 ≤ r ≤ 0,90
190 0,05 0,95 0,90 ≤ r ≤ 0,95
200 0,05 1,00 0,95 ≤ r ≤ 1,00

87
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
Dim x(1000), P(1000) As Double, LI(1000), LS(1000), Acum(1000) As Double
Dim miu, V, V3, sigma As Double, Rango As Range
Dim R(1000), Prom(1000) As Double, D(1000) As Long
Dim V2(1000) As Double, Prom2 As Double
[Link] = False
LIMPIAR
Range(“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”).Select
n=9
C = Val (InputBox (“DIGITE EL NÚMERO DE CORRIDAS (No. De Observaciones):”)): Cells (1,
8). Value = C
Range(“A1:C1”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12

88
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A3:E” & (n + 3)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
Range(“A3:J3”).Select
[Link] = 6
Range(“F3:H” & (C + 4)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
a = Val(InputBox(“DIGITE EL NÙMERO DE REPLICAS:”)): Cells(1, 9).Value = a
Range(“I3:J” & (a + 3)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
comenzar:
For i = 1 To n
x(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 Then
MsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”

89
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

GoTo comenzar
End If
If i = 1 Then
Acum(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)
Else
Acum(i) = Acum(i - 1) + P(i)
If (Acum(i) > 1) Then
MsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”
GoTo comenzar
End If
Cells(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 If
Next i
Range (“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 = [Link](Range(“A4:A” & (n + 3)), Range(“E4:E” &
(n + 3)))
Cells (n + 4, 2). Value = miu
‘Calculo de la varianza
V=0
For i = 1 To n
V = V + ((x(i) - miu) ^ 2) * P(i)
Next i
Cells(n + 5, 2).Value = V
‘Calculo de la desviación standard
Range (“A” & (n + 10)). Select: ActiveCell.FormulaR1C1 = “Desviación Standard”
sigma = Sqr(V): Cells(n + 10, 2).Value = sigma
Columns(“A:J”).ColumnWidth = 15: Rows(n + 6).RowHeight = 51
Range(Cells(n + 4, 1), Cells(n + 10, 2)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlThin

90
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End With
Range(Cells(n + 4, 1), Cells(n + 10, 1)).Select
[Link] = 6
Set Rango = Worksheets(1).Range("$C$4:$E$" & (n + 3))
V3 = 0
For j = 1 To a
Texto = "REPLICA NUMERO " + Str(j)
Cells(j + 3, 9).Value = j
MsgBox Texto, vbOKOnly, "RÉPLICAS"
For i = 1 To C
Cells(i + 3, 6).Value = i
R(i) = Rnd: Cells(i + 3, 7).Value = R(i)
D(i) = [Link](R(i), Rango, 3): Cells(i + 3, 8).Value = D(i)
Next i
Prom(j) = [Link](Range("H4:H" & (n + 4)))
Cells(j + 3, 10).Value = Prom(j)
Next j
Range ("A" & (n + 7)). Select: ActiveCell.FormulaR1C1 = "Promedio de Promedio de la Demanda"
Prom2 = [Link](Range("J4:J" & (a + 2)))
Cells(n + 7, 2).Value = Prom2
Range("A3").Select
End Sub
Sub LIMPIAR()
Range("AA1").Select
[Link]
Range("A1:Z722").Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range("A3").Select
End Sub

91
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

92
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

Ventas diarias (unidades) Probabilidad de ocurrencia


20 0,05
22 0,10
25 0,15
28 0,30
30 0,25
34 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 anterior


Si ventas es menor que el pedido, entonces
el 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 – pedido
Fin

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.

93
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
Dim x(1000), P(1000) As Double, LI(1000), LS(1000), Acum(1000) As Double
Dim miu, V, V3, sigma As Double, Rango As Range
Dim R(1000), Prom(1000) As Double, D(1000) As Long
Dim V2(1000) As Double, PC, PDV, PR, PER As Double
[Link] = False
LIMPIAR
Range(“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”). Select
n = Val (InputBox (“DIGITE EL NÚMERO DE DATOS:”)): Cells (1, 7). Value = n

94
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

C = Val (InputBox (“DIGITE EL NÚMERO DE CORRIDAS (Días):”)): Cells (1, 8).Value = C


Range(“A1:C1”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A3:F” & (n + 3)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
Range(“A3:T3”).Select
[Link] = 6
Range(“G3:Q” & (C + 4)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
a = Val(InputBox(“DIGITE EL NÙMERO DE REPLICAS:”)): Cells(1, 9).Value = a
Range(“R3:T” & (a + 3)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium

95
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
comenzar:
For i = 1 To n
x(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 Then
MsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”
GoTo comenzar
End If
If i = 1 Then
Acum(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)
Else
Acum(i) = Acum(i - 1) + P(i)
If (Acum(i) > 1) Then
MsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”
GoTo comenzar
End If
Cells(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 If
Next i
Range(“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 = PC
PDV = InputBox (“Digite el Valor del Precio de Venta:”): Cells (n + 5, 2). Value = PDV
PR = InputBox (“Digite el Valor Unitario del Reembolso:”): Cells (n + 6, 2). Value = PR

96
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

PER = InputBox (“Digite el Valor Unitario de la Pérdida:”): Cells (n + 7, 2). Value = PER
Range(Cells(n + 4, 2), Cells(n + 7, 2)).Select
[Link] = “$#,##0.00”
miu = [Link](Range(“A4:A” & (n + 3)), Range(“B4:B” & (n + 3)))
Cells (n + 8, 2). Value = miu
'Calculo de la varianza
V=0
For i = 1 To n
V = V + ((x(i) - miu) ^ 2) * P(i)
Next i
Cells(n + 9, 2).Value = V
'Calculo de la desviación standard
Range ("A" & (n + 10)). Select: ActiveCell.FormulaR1C1 = "Desviación Standard"
sigma = Sqr(V): Cells(n + 10, 2).Value = sigma
Columns("A:T").ColumnWidth = 15: Rows(n + 6).RowHeight = 51
Range(Cells(n + 4, 1), Cells(n + 10, 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 With
Range(Cells(n + 4, 1), Cells(n + 10, 1)).Select
[Link] = 6
Range("A3").Select
End Sub
Sub LIMPIAR()
Range("AA1").Select
[Link]
Range("A1:Z722").Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range("A3").Select
End Sub

97
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim Remb(0 To 1000) As Integer, Ingremb(0 To 1000) As Double, Perd(0 To 1000) As Integer
Dim Costperd(0 To 1000) As Double, Util(0 To 1000), Ing(0 To 1000) As Double, x As Integer
Dim R(1000) As Double, Prom(1000) As Double, V2(1000) As Double
n = 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 perdida
PER = Cells (n + 7, 2). Value
‘Aplicacion de la tècnica de montecarlo
Set Rango = Worksheets(1).Range(“$D$4:$F$” & (n + 3))
V3 = 0: Cells(4, 7).Value = 0
Vent(0) = 20: Perd(0) = 3
Cells(4, 9).Value = Vent(0): Cells(4, 15).Value = Perd(0)
Range(“P1”).Select
For j = 1 To a
Texto = “REPLICA NUMERO “ + Str(j)
Cells (j + 3, 18). Value = j
MsgBox Texto, vbOKOnly, “RÉPLICAS”
For x = 1 To C
Cells(x + 4, 7).Value = x
R(x) = Rnd: Cells(x + 4, 8).Value = R(x)
Vent(x) = [Link](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) Then
Ing(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)

98
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

Costperd(x) = Perd(x) * PER: Cells(x + 4, 16).Value = Costperd(x)


Cells(x + 4, 16).NumberFormat = “$#,##0.00”
SElse
Ing(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 Utilidad
Util(x) = Ing(x) - CostComp(x) + Ingremb(x) - Costperd(x)
Cells(x + 4, 17).Value = Util(x)
Cells(x + 4, 17).NumberFormat = "$#,##0.00"
Next x
Prom(j) = [Link](Range("Q5:Q" & (C + 4)))
Cells(j + 3, 19).Value = Prom(j): Cells(j + 3, 19).NumberFormat = "0.00"
V2(j) = [Link].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 j
Range ("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 = [Link](Range("S4:S" & (a + 3)))
Cells(n + 11, 2).Value = prom2
Cells(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)).Select
[Link] = 6
Range(Cells(n + 11, 1), Cells(n + 13, 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 With
Range("A3"). Select
End Sub

99
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

Demanda
Demanda mensual Probabilidad
28 0,01
31 0,04
33 0,08
36 0,07
38 0,12
39 0,08
40 0,10
42 0,12
44 0,13
45 0,05
48 0,10
50 0,03
52 0,05
55 0,02

100
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

Tiempo de entrega
Mes Probabilidad
1 0,30
2 0,40
3 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 Valor
Precio de compra $50 / unidad
Costo de ordenar $100 / orden
Costo unitario de almacenamiento $20 / unidad / mes
Costo 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).

101
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 variables
Dim miu, sigma As Double, rango As Range, D(1 To 2000) As Integer
Dim x(1 To 2000) As Long, P(1 To 2000) As Double, Pe(1 To 2000) As Double
Dim Acum(2000) as Double, LI(2000),LS(2000) as Double
Dim V(1 To 2000) As Double, sigmacuad As Double, Te(1 To 2000) As Integer
Dim n As Integer, NA As Variant, m As Integer
Limpiar
Range(“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”).Select
[Link] = 45
Rows(“2:2”).RowHeight = 45

102
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

Inicio:
‘Captura de datos
k = InputBox(“Cuántos datos de demanda o eventos a introducir: (No debe ser mayor que 2000)”)
Cells(1, 1).Value = k
If (k > 2000) Then
GoTo Inicio
End If
comenzar:
For i = 1 To k
x(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 Then
MsgBox “ La probabilidad es incorrecta”, vbOKOnly, “ERROR”
GoTo comenzar
End If
If i = 1 Then
Acum(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)
Else
Acum(i) = Acum(i - 1) + P(i)
If (Acum(i) > 1) Then
MsgBox “ La probabilidad Acumulada es incorrecta”, vbOKOnly, “ERROR”
GoTo comenzar
End If
Cells(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 If
Next i
If (Sum > 1) Then
Range(“B3:G” & (k + 3)).ClearContents
GoTo comenzar
End If
n = InputBox (“Cuál es el número de corridas:”): Cells (k + 4, 3). Value = miu
Range (“B” & (k + 4)). Select: ActiveCell.FormulaR1C1 = “La media de la demanda”

103
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

‘Cálculo de la varianza
sigmacuad = 0
For i = 1 To k
sigmacuad = sigmacuad + ((x(i) - miu) ^ 2) * P(i)
Next i
Range(“B” & (k + 5)).Select: ActiveCell.FormulaR1C1 = “La varianza de demanda”
Cells(k + 5, 3).Value = sigmacuad
Range("B" & (k + 6)).Select
ActiveCell.FormulaR1C1 = "La desviación Standard de la demanda"
'Cálculo de la desviación standard
sigma = Sqr(sigmacuad): Cells (k + 6, 3). Value = sigma
Columns("B:B").ColumnWidth = 13.71: Rows(k + 6).RowHeight = 51
Range ("B" & (k + 7)). Select: ActiveCell.FormulaR1C1 = "El número de corrida es"
Cells(k + 7, 3).Value = n
Range("B" & (k + 8)).Select: ActiveCell.FormulaR1C1 = "Número de datos de demanda"
Cells(k + 8, 3).Value = k
Range("B" & (k + 9)).Select
ActiveCell.FormulaR1C1 = "Número de datos del tiempo de entrega demanda"
Range(Cells(k + 4, 2), Cells(k + 9, 3)).Select
[Link] = 24
Range("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) Then
GoTo Inicio
End If
Sum1 = 0
Cells(k + 9, 3).Value = m
For i = 1 To m
Te(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 = Sum1
Next i
Cells(m + 3, 11).Value = ""
End Sub

104
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

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 Integer
Dim x(1 To 1000) As Long, P(1 To 1000) As Double, Pe(1 To 1000) As Double, m As Integer
Dim INV(0 To 1000) As Long, B(0 To 1000) As Long, LT As Integer, Q As Long
Dim n As Integer, NA1 As Variant, NA2 As Variant, Invneto(1 To 1000) As Long
Dim rango2 As Range, r(1 To 1000) As Double, r2(1 To 1000) As Double
Dim CT(1 To 1000) As Double, PRO As Long, FOQ(1 To 1000) As Long
[Link] = False
Range(“A1:S1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
DemProb
k = Worksheets(1).Cells(1, 1).Value
n = Worksheets(1).Cells(k + 7, 3).Value

105
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

m = Worksheets(1).Cells(k + 9, 3).Value
Range(“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)).Select
[Link] = 45
Range(“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 = Q
Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Tamaño del lote”
PRO = InputBox(“Digite el punto de reorden:”): Cells(1, 6).Value = PRO
Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”
Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”
Range(“C1:H1”).Select
[Link] = 24
C = 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 n
Cells(i + m + 5, 9).Value = i
r(i) = Rnd: Cells(i + m + 5, 10).Value = r(i): NA = Cells(i + m + 5, 10).Value
D(i) = [Link](NA, rango, 3)
Cells(i + m + 5, 11).Value = D(i)
Next i
Range(“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)).Select
[Link] = 45
Set rango2 = Worksheets(1).Range(“$k$3:$M$” & (m + 2))
For i = 1 To n

106
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

r2(i) = Rnd: Cells(i + k + 4, 5).Value = r2(i): NA2 = Cells(i + k + 4, 5).Value


Te2(i) = [Link](NA2, rango2, 3)
Cells(i + k + 4, 6).Value = Te2(i)
Next i
j = 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 = [Link](Range(Cells(m + 6, 18), Cells(n + m + 5, 18)))
Range(Cells(m + 6, 18), Cells(n + m + 5, 18)).Select
[Link] = "$ #,##0.00"
Range("H1").Select
[Link] = "$ #,##0.00"
Columns("H:H").ColumnWidth = 14.71
Range("H1").Select
End Sub

107
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 diaria


0,08 75
0,07 80
0,02 85
0,20 90
0,09 95
0,19 100
0,12 105
0,03 110
0,14 115
0,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:

108
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

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 Oferta diaria de automóviles


Probabilidad Probabilidad
de automóviles subcontratados
5 0,03 0 0,04
6 0,04 1 0,10
8 0,06 2 0,21
10 0,07 3 0,23
12 0,09 4 0,20
13 0,13 5 0,14
14 0,13 6 0,08
15 0,12
16 0,10
18 0,10
19 0,09
20 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.

109
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Variable tiempo entre Variable tiempo de operación


Probabilidad probabilidad
llegadas (min) (min)
1 0,05 1 0,20
2 0,10 2 0,35
2,5 0,20 3 0,27
4 0,05 4 0,18
5 0,45
6 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 probabilidad


10 0,130 2 0,30
20 0,241 3 0,40
30 0,270 4 0,30

110
Colección
Generación de variables aleatorias mediante la técnica de montecarlo

Demanda diaria Probabilidad Días de anticipación probabilidad


40 0,180
50 0,090
60 0,036
70 0,012
80 0,040
90 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 Tiempo de operación del torno Tiempo entre llegadas de la


cortadora (min) (min) pieza
Tiempo Probabilidad Tiempo Probabilidad Tiempo Probabilidad
2 0,05 8 0,10 12 0,10
5 0,20 10 0,20 20 0,30
10 0,35 15 0,30 24 0,15
12 0,30 18 0,20 35 0,25
14 0,10 20 0,15 45 0,20
22 0,05

111
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

112
Generación de variables aleatorias continuas
4

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:
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

114
Colección
Generación de variables aleatorias continuas

Procedimiento 4.1. Macro para generar una variable aleatoria empírica

Sub Generar variables()


Dim x As Double
Limpiar
[Link] = False
Range(“A1:H200”).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.[Link] = True
.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:”)
Range(“B8:D8,G8:H8”).Select
[Link] = 24
Range(“B9:D” & (n + 8)).Select
[Link] = 19
Range(“G9:H” & (k + 8)).Select
[Link] = 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)).Select
[Link] = 20
Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select
[Link] = 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 + [Link](M, (1 / 3)), 3)
Cells(j + 8, 4).Value = x
Next j
Cells(i + 8, 7) = i

115
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Cells(n + 9, 4).Value = Round([Link](Range("D9:D" & (n + 8))), 3)


Cells(i + 8, 8) = Cells(n + 9, 4)
Next i
Cells(k + 9, 8).Value = Round([Link](Range("H9:H" & (k + 8))), 3)
Cells(k + 10, 8).Value = Round([Link](Range("H9:H" & (k + 8))), 3)
Cells(k + 11, 8).Value = Round([Link](Range("H9:H" & (k + 8))), 3)
Range("A1").Select
End 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 = a
la función acumulativa es:
; donde se tiene:

116
Colección
Generación de variables aleatorias continuas

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.

117
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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
[Link] = False
Range(“A1:J200”).Select
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With

118
Colección
Generación de variables aleatorias continuas

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").Select
[Link] = 24
Range("B9:D" & (n + 8)).Select
[Link] = 19
Range("G9:H" & (k + 8)).Select
[Link] = 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 + 10, 4)).Select
[Link] = 20
Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select
[Link] = 20
Range("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) * ([Link](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 = [Link](Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedio
Next i
Cells(k + 9, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 10, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 11, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(1, 1).Select
End Sub

119
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Limpiar
[Link] = False
Cells. Select
With Selection
.[Link] = True
.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(“Digite el valor mínimo de la variable:”): Cells(n + 11, 4).Value = a
lambda = InputBox(“Introduzca el valor Lambda:”): Cells(n + 12, 4).Value = lambda
Range(“B8:D8, G8:H8”).Select: [Link] = 24
Range(“B9:D” & (n + 8)).Select: [Link] = 19
Range(“G9:H” & (k + 8)).Select: [Link] = 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 + 12, 4)).Select
[Link] = 20

120
Colección
Generación de variables aleatorias continuas

Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select


[Link] = 20
Range("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) * ([Link](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 = [Link](Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedio
Next i
Cells(k + 9, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 10, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 11, 8).Value = [Link](Range("H9:H" & (k + 8)))
Range("A1").Select
End Sub

121
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 intervalo


b = 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:

122
Colección
Generación de variables aleatorias continuas

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.

123
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Limpiar
[Link] = False
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
[Link]
With Selection
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
k = InputBox(“Digite el número de réplicas:”)
a = InputBox(“Introduzca el valor del límite inferior (a):”): Cells(n + 11, 4).Value = a
b = InputBox(“Introduzca el valor del límite superior (b):”): Cells(n + 12, 4).Value = b
Range(“B8:D8,G8:H8”).Select: [Link] = 24
Range(“B9:D” & (n + 8)).Select: [Link] = 19
Range(“G9:H” & (k + 8)).Select: [Link] = 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 + 12, 4)).Select: [Link] = 20
Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select: [Link] = 20
Range(“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

124
Colección
Generación de variables aleatorias continuas

Cells(n + 9, 4).Value = ((a + b) / 2): Cells(n + 10, 4).Value = (((b - a) ^ 2) / 12)


promedio = [Link](Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedio
Next i
Cells(k + 9, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 10, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 11, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(1, 1).Select
End 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,…..K
3. Generar la variable aleatoria exponencial y la variable uniforme de acuerdo con
las especificaciones del ejemplo.

125
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
Dim media, a, b As Single
Dim R1, R2 As Double
Range(“A1:I200”).ClearContents
[Link] = False
[Link]
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = “Arial”
.[Link] = True
End With
k = InputBox(“Digite el número de corridas:”): Cells(1, 2).Value = k
Range(“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 = media
Range(“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 = a
Range(“C1”).Select: ActiveCell.FormulaR1C1 = “Valor mínimo del radio 2”
b = InputBox(“Introduzca el valor máximo del radio 2”): Cells(2, 4).Value = b
Range(“C2”).Select: ActiveCell.FormulaR1C1 = “Valor máximo del radio 2”
Range(“A1:D2”).Select: [Link] = 24
Range(“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”

126
Colección
Generación de variables aleatorias continuas

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: [Link] = 19
Range("A3:I3").Select: [Link] = 45
For 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).Value
Next i
Cells(Rep + 4, 9).Value = [Link](Range("I4:I" & (Rep + 4)))
Range("G4,I" & (Rep + 4)).Select
[Link] = "0.00%"
End Sub
Function Ln(x As Double) As Double
Ln = [Link](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

127
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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)

128
Colección
Generación de variables aleatorias continuas

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 Long
Dim Falt(0 To 1000) As Long, Prom As Long, Prod(1 To 1000) As Long, TE(1 To 1000) As Long
Dim sum As Long, Inv(0 To 1000) As Long, Real(1 To 1000) As Long
Dim Retr(1 To 1000) As Double, Efic(1 To 1000) As Double, Ts(1 To 1000) As Double
Dim JL As Integer, DH(1 To 1000) As Integer, W As Integer, CDT(1 To 1000) As Double, Tsm As
Double
Dim C As Double, CUA As Double, CUF As Double, K As Integer, R1(1 To 1000) As Double
Dim R2(1 To 1000) As Double, R3(1 To 1000) As Double, CT(1 To 1000) As Double
[Link] = False
Range(“A7:K2000”).ClearContents
Range(“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”

129
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = K
Range(“A1:H1”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A2:H4,A5:I” & (K + 6)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
Range(“A2:A4,C2:C4,E2:E4,G2:G4”).Select
[Link] = 44

130
Colección
Generación de variables aleatorias continuas

Range(“A5:I5”).Select
[Link] = 6
JL = InputBox(“Introduzca la jornada laboral:”): Cells(2, 2).Value = JL
W = InputBox(“Digite el número de trabajadores:”): Cells(4, 2).Value = W
a = InputBox(“Digite el limite inferior de la demanda:”): Cells(2, 4).Value = a
b = InputBox(“Digite el limite superior de la demanda:”): Cells(3, 4).Value = b
a1 = InputBox(“Digite el limite inferior de los días hábiles:”): Cells(4, 4).Value = a1
b1 = InputBox(“Digite el limite superior de los días hábiles:”): Cells(2, 6).Value = b1
a2 = 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 = C
CUA = InputBox(“Introduzca el costo unitario de almacenamiento:”): Cells(2, 8).Value = CUA
CUF = InputBox(“Introduzca el costo unitario de faltante:”): Cells(3, 8).Value = CUF
Range(“A6”).Select
ActiveCell.FormulaR1C1 = “Inicial”
Range(“A” & (K + 7)).Select: ActiveCell.FormulaR1C1 = “Total”
Cells(6, 6).Value = Inv(0): Falt(0) = 0
Cells(6, 7).Value = Falt(0)
For i = 1 To K
Cells(i + 6, 1).Value = i
R1(i) = Rnd
DH(i) = a1 + (b1 - a1) * R1(i): Cells(i + 6, 2).Value = Round(DH(i), 0)
R2(i) = Rnd
Dem(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 i
Cells(K + 7, 3) = Round(sum, 0)
For i = 1 To K
CDT(i) = W * JL * DH(i)
Prod(i) = Round((CDT(i) / Ts(i)), 0): Cells(i + 6, 4).Value = Prod(i)
Next i
For i = 1 To K
Dem(i) = Cells(i + 6, 3).Value: Prod(i) = Cells(i + 6, 4).Value
TE(i) = Cells(i + 6, 5).Value: Inv(i) = Cells(i + 6, 6).Value
Falt(i) = Cells(i + 6, 7).Value: Retr(i) = Cells(i + 6, 8).Value
Efic(i) = Cells(i + 6, 9).Value
Inv(i) = Inv(i - 1) - Falt(i - 1) + Prod(i) + TE(i) + Falt(i) - Dem(i)
If (Inv(i) >= 0) Then

131
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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)
Else
Falt(i) = (-1) * (Inv(i)): Cells(i + 6, 7).Value = Falt(i)
Cells(i + 6, 6).Value = 0
TE(i) = 0: Cells(i + 6, 5).Value = TE(i)
If Falt(i) > 1000 Then
TE(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) Then
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)
Else
Falt(i) = (-1) * (Inv(i)): Cells(i + 6, 7).Value = Falt(i)
Cells(i + 6, 6).Value = 0
TE(i) = 0: Cells(i + 6, 5).Value = TE(i)
End If
End If
End If
Retr(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
[Link] = "0.00%"
Range("A2").Select
suma = 0
For i = 1 To K
CT(i) = C * Prod(i) + CUA * Inv(i) + CUF * Falt(i)
suma = suma + CT(i)
Next i
Cells(4, 8).Value = suma
Range("H4").Select
[Link] = "$#,##0.00"
End Sub

132
Colección
Generación de variables aleatorias continuas

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 ≥ 0
media = αβ
varianza = αβ²
moda = a + β(α – 1) Si α ≥ 1
moda = a, en caso contrario
F(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:

133
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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
[Link] = False
Range(“A1:H200”).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = 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: [Link] = 24
Range(“B9:D” & (n + 8)).Select: [Link] = 19
Range(“G9:H” & (k + 8)).Select: [Link] = 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 + 12, 4)).Select
[Link] = 20
Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select

134
Colección
Generación de variables aleatorias continuas

[Link] = 20
Range("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 = [Link](Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedio
Next i
Cells(k + 9, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 10, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 11, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(1, 1).Select
End Sub
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Weibull(R As Variant, a As Variant, b As Variant) As Double
Weibull = (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.

135
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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
[Link] = False
[Link]
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = 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”).Select
[Link] = 6
Range(“B9:D” & (n + 8)).Select
[Link] = 19
Range(“G9:H” & (k + 8)).Select
[Link] = 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 variables”
Range(Cells(n + 9, 3), Cells(n + 13, 4)).Select
[Link] = 44
Range(Cells(k + 9, 7), Cells(k + 11, 8)).Select
[Link] = 44
Range(“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”

136
Colección
Generación de variables aleatorias continuas

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)).Select
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, 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 = [Link](Range("D9:D" & (n + 8))): Cells(i + 8, 8) = promedio
Next i
Cells(k + 9, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 10, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(k + 11, 8).Value = [Link](Range("H9:H" & (k + 8)))
Cells(1, 1).Select
End Sub

Function Ln(x As Double) As Double


Ln = [Link](x)
End Function
Function Weibull(R As Variant, a As Variant, b As Variant, v As Variant) As Double
Weibull = (b) * (-1 * Ln(1 - R)) ^ (1 / a) + v
End 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.

137
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

138
Colección
Generación de variables aleatorias continuas

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:

139
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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).

140
Colección
Generación de variables aleatorias continuas

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

141
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

142
Colección
Generación de variables aleatorias continuas

Procedimiento 4.9. Macro para generar variables triangulares

Sub Triangular1()
Dim a As Double, b As Double, c As Double, N As Variant
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = "Arial"
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range("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 = a
b = InputBox("Digite el valor más probable:"): Cells(3, 2).Value = b
c = InputBox("Digite el valor máximo:"): Cells(4, 2).Value = c
Range("A2:A4,A5:C5").Select: [Link] = 6
For i = 1 To K
Cells(i + 5, 1).Value = i
R = Rnd: Cells(i + 5, 2).Value = R: N = Cells(i + 5, 2).Value
x = Triangular(N, a, b, c): Cells(i + 5, 3).Value = x
Range("A1").Select
Next i
End Sub

143
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Function Triangular(N As Variant, a As Double, b As Double, c As Double) As Double


Dim RO1, RO2 As Double
If N <= (b - a) / (c - a) Then
RO1 = (c - a) * (b - a) * N: Triangular = a + Sqr(RO1)
Else
RO2 = (c - a) * (c - b) * (1 - N): Triangular = c - Sqr(RO2)
End If
End 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

144
Colección
Generación de variables aleatorias continuas

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:

145
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

146
Colección
Generación de variables aleatorias continuas

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

147
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

148
Colección
Generación de variables aleatorias continuas

Procedimiento 4.10. Macro para generar variables trapezoidales

Sub Trapezoide()
Dim K As Integer
Dim n As Variant, x(2000) As Double, R(2000) As Double
Dim a As Integer, b As Integer, c As Integer, d As Integer
[Link] = False
Range(“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”).Select
[Link]
[Link] = 20
K = InputBox(“Digite el número de corridas:”)
Range(“A1:D1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A2:B5,A6:C” & (K + 6)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
End With
Range(“A2:A5,A6:C6”).Select
[Link] = 6

149
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Range("A1").Select
a = InputBox("Digite el valor de a:"): Cells(2, 2).Value = a
b = InputBox("Digite el valor de b:"): Cells(3, 2).Value = b
c = InputBox("Digite el valor de c:"): Cells(4, 2).Value = c
d = InputBox("Digite el valor de d:"): Cells(5, 2).Value = d
For i = 1 To K
Cells(i + 6, 1).Value = i
R(i) = Rnd
Cells(i + 6, 2).Value = R(i)
n = Cells(i + 6, 2).Value
x(i) = TRAPEZOIDAL(n, a, b, c, d)
Cells(i + 6, 3).Value = x(i)
Next i
End Sub
Function TRAPEZOIDAL(N As Variant, a As Integer, b As Integer, c As Integer, d As Integer) As
Double
Dim RO1, RO2 As Double
If N <= (b - a) / (d + c - a - b) Then
RO1 = (d + c - a - b) * (b - a) * N
TRAPEZOIDAL = Round(a + Sqr(RO1), 2)
ElseIf N > ((b - a) / (d + c - a - b)) And R <= ((2 * c - a - b) / (d + c - a - b)) Then
TRAPEZOIDAL = Round(0.5 * ((d + c - a - b) * N + a + b), 2)
Else
RO2 = (d + c - a - b) * (d - c) * (1 - N)
TRAPEZOIDAL = Round(d - Sqr(RO2), 2)
End If
End 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?

150
Colección
Generación de variables aleatorias continuas

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 Integer
Dim cont, peso, cor As Integer, suma As Double, x(2000) As Double
Dim sum, prob As Double, Costc As Currency
Dim CT As Currency, costo As Currency
Dim N As Variant, K As Integer, DH As Integer
[Link] = False
Range(“A7:K2000”).ClearContents
Range(“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”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True

151
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
K = InputBox(“Digite el número de cajas a transportar”): Cells(1, 4).Value = K
cor = InputBox(“Digitar el número de corridas”)
peso = InputBox(“Introducir el peso de la Camioneta”): Cells(1, 5).Value = peso
costo = InputBox(“Introducir el costo por caja”): Cells(1, 6).Value = costo
DH = InputBox(“introducir los días hábiles”): Cells(1, 7).Value = DH
Costc = InputBox(“Digitar el costo de la Camioneta Nueva”): Cells(8, 5).Value = Costc
Range(“A2:B5,D6:E9,A6:C” & (cor + 6)).Select
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 = xlThin
End With
Range(“A2:A5,A6:C6,D6:D9”).Select
[Link] = 44
a = InputBox(“Digitar el valor de a”): Cells(2, 2).Value = a
b = InputBox(“Digitar el valor de b”): Cells(3, 2).Value = b
c = InputBox(“Digitar el valor de c”): Cells(4, 2).Value = c
d = InputBox(“Digitar el valor de d”): Cells(5, 2).Value = d
Range(“B7:C26”).ClearContents
peso = Cells(1, 5).Value
For i = 1 To cor
Cells(i + 6, 1).Value = i
sum = 0
For j = 1 To K
R = Rnd
x(j) = TRAPEZOIDAL(R, a, b, c, d)
sum = sum + x(j)
Next j
Cells(i + 6, 2).Value = sum
Cells(i + 6, 2).NumberFormat = “0.00”
If (sum > peso) Then
Cells(i + 6, 3) = “SI”
cont = 1
suma = suma + cont

152
Colección
Generación de variables aleatorias continuas

Else
Cells(i + 6, 3) = "NO"
End If
Next i
prob = (suma / cor): Cells(6, 5).Value = prob
Cells(6, 5).NumberFormat = "0.00%"
CT = (costo * DH * suma): Cells(7, 5).Value = CT
If CT > Cells(8, 5).Value Then
Cells(9, 5) = "CAMIONETA NUEVA"
Else
Cells(9, 5) = "TRANSPORTE DE OTRA COMPAÑIA"
End If
Range("A1").Select
End Sub
Function TRAPEZOIDAL(N As Variant, a As Integer, b As Integer, c As Integer, d As Integer) As
Double
Dim RO1, RO2 As Double
If N <= (b - a) / (d + c - a - b) Then
RO1 = (d + c - a - b) * (b - a) * N
TRAPEZOIDAL = a + Sqr(RO1)
ElseIf N > ((b - a) / (d + c - a - b)) And R <= ((2 * c - a - b) / (d + c - a - b)) Then
TRAPEZOIDAL = 0.5 * ((d + c - a - b) * N + a + b)
Else
RO2 = (d + c - a - b) * (d - c) * (1 - N)
TRAPEZOIDAL = d - Sqr(RO2)
End If
End 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

153
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 escala
a = valor mínimo de la variable de la variable
n = 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 / λ.

154
Colección
Generación de variables aleatorias continuas

Cuando a = 0, la distribución Erlang tiene la siguiente función de densidad:

Λ = parámetro de escala
k = 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.

155
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim rep As Integer, lamb As Integer
Limpiar
[Link] = False
Cells. Select
With Selection
. Font. Bold = True
. HorizontalAlignment = xlCenter
. Vertical Alignment = xlBottom
. WrapText = True
End With
n = InputBox (“Digite el número de corridas:”): Cells (1, 1). Value = n
rep = InputBox (“Digite el número de réplicas:”)
k = InputBox (“Introduzca el valor del parámetro de forma(K):”): Cells (n + 9, 4). Value = k
lamb = InputBox (“Introduzca el valor del parámetro de escala(Lambda):”): Cells (n + 10, 4).
Value = lamb
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 = “Replica Num.”
Range(“H8”). Select: ActiveCell.FormulaR1C1 = “Promedio de variable”
Range (Cells (n + 9, 3), Cells (n + 12, 4)). Select: Selection. Interior. ColorIndex = 20
Range (Cells (rep + 9, 7), Cells (rep + 11, 8)). Select: Selection. Interior. ColorIndex = 20
Range (“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

156
Colección
Generación de variables aleatorias continuas

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) = promedio
Next i
Cells (rep + 9, 8). Value = Application. Average (Range (“H9:H” & (k + 8)))
Cells (rep + 10, 8). Value = [Link](Range (“H9:H” & (k + 8)))
Cells (rep + 11, 8). Value = [Link](Range (“H9:H” & (k + 8)))
Cells (1, 1). Select
End Sub
Function Ln (x As Double) As Double
Ln = [Link]. Ln(x)
End Function
Function Erlang (k As Integer, lamb As Integer) As Double
Y=0
R = Rnd
M = (k / lamb)
For Z = 1 To k
Y = Y + Ln (1 - R)
Next Z
Erlang = (-1) * M * Y
End 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.

157
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim rep As Integer, lamb As Integer, a As Double
Limpiar
[Link] = False
[Link]
With Selection
. [Link] = True
. HorizontalAlignment = xlCenter
. VerticalAlignment = xlCenter
.WrapText = True
End With
n = InputBox (“Digite el número de corridas:”): Cells (1, 1). Value = n
rep = InputBox (“Digite el número de réplicas:”)
k = InputBox (“Introduzca el valor del parámetro de forma(K):”): Cells (n + 9, 4). Value = k
lamb = InputBox (“Introduzca el valor del parámetro de escala(Lambda):”): Cells (n + 10, 4).
Value = lamb
a = InputBox (“Digite el valor mínimo:”): Cells (n + 11, 4). Value = a
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 = “Replica Num.”
Range(“H8”). Select: ActiveCell.FormulaR1C1 = “Promedio de variable”
Range (Cells (n + 9, 3), Cells (n + 13, 4)). Select: Selection. Interior. ColorIndex = 20
Range (Cells (rep + 9, 7), Cells (rep + 11, 8)). Select: Selection. Interior. ColorIndex = 20
Range (“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

158
Colección
Generación de variables aleatorias continuas

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) = promedio
Next i
Cells (rep + 9, 8). Value = Application. Average (Range (“H9:H” & (k + 8)))
Cells (rep + 10, 8). Value = [Link](Range (“H9:H” & (k + 8)))
Cells (rep + 11, 8). Value = [Link](Range (“H9:H” & (k + 8)))
Cells (1, 1). Select
End Sub
Function Ln (x As Double) As Double
Ln = [Link]. Ln(x)
End Function
Function Erlang (k As Integer, lamb As Integer, a As Double) As Double
Y=0
R = Rnd
M = (k / lamb)
For Z = 1 To k
Y = Y + Ln (1 - R)
Next Z
Erlang = (-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.

159
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

160
Colección
Generación de variables aleatorias continuas

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 [Link](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
[Link] = False
Range(“A1:D200”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
alfa = InputBox(“Introduzca el valor del parámetro de forma(alfa):”): Cells(n + 3, 3).Value = alfa
beta = InputBox(“Introduzca el valor del parámetro de escala(beta):”): Cells(n + 4, 3).Value = beta
Range(“B3”).Select
ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“C3”).Select
ActiveCell.FormulaR1C1 = “Variables de tipo gamma”
Range(“B3:C3”).Select
[Link](xlEdgeTop).Weight = xlMedium
[Link](xlEdgeBottom).Weight = xlMedium
[Link] = 46
Range(Cells(4, 2), Cells(n + 3, 3)).Select
[Link] = 6
Range(Cells(n + 4, 2), Cells(n + 7, 3)).Select
[Link] = 20

161
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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)).Select
For j = 1 To n
Cells(j + 3, 2) = j
R = Rnd
x = [Link](R, alfa, beta)
Cells(j + 3, 3).Value = x
Next j
Cells(n + 4, 3).Value = alfa
Cells(n + 5, 3).Value = beta
Cells(n + 6, 3).Value = alfa * beta
Cells(n + 7, 3).Value = alfa * ((beta) ^ 2)
Range("A1").Select
End 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 alto
a = valor mínimo de la variable
b = valor máximo de la variable

La función de distribución acumulativa será:

162
Colección
Generación de variables aleatorias continuas

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 [Link](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 Double
Dim alfa As Integer, beta As Integer, a As Integer, b As Integer
Limpiar
[Link] = False
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
alfa = InputBox(“Introduzca el valor de alfa:”): Cells(n + 4, 3).Value = alfa
beta = InputBox(“Introduzca el valor de beta:”): Cells(n + 5, 3).Value = beta
a = InputBox(“Introduzca el límite inferior (a):”): Cells(n + 6, 3).Value = a
b = InputBox(“Introduzca el límite superior (b):”): Cells(n + 7, 3).Value = b
Range(“A1:D200”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Variables de tipo beta”
Range(“B3:C3”).Select
With Selection

163
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.[Link] = 46
.ReadingOrder = xlContext
.Borders(xlInsideVertical).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
End With
Range(Cells(3, 2), Cells(n + 9, 3)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(Cells(4, 2), Cells(n + 3, 3)).Select: [Link] = 6
Range(Cells(n + 4, 2), Cells(n + 9, 3)).Select: [Link] = 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 = [Link](R, alfa, beta, a, b)
Cells(j + 3, 3).Value = x
Next j
Cells(n + 8, 3).Value = (b - a) * (alfa / (alfa + beta)) + a
Cells(n + 9, 3).Value = ((b - a) ^ 2) * ((alfa * beta) / ((alfa + beta) ^ 2) * (alfa + beta + 1))
Range("A1").Select
End Sub

Cuando a = 0 y b = 1, la distribución Beta tendría la siguiente función de densidad


de probabilidad:

164
Colección
Generación de variables aleatorias continuas

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.

165
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim C3 As Currency, A As Integer, B As Integer, V As Integer, R(2000) As Double
Dim x(2000) As Double, N As Integer, X1 As Double, X2 As Double
[Link] = False
Limpiarborrar
Range(“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”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
M = InputBox(“Número de lotes:”): Cells(2, 2).Value = M
Range(“A2:H3,A4:G” & (M + 4)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlThin

166
Colección
Generación de variables aleatorias continuas

.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
Range(“A2:A3,C2:C3,E2:E3,G2:G3”).Select
[Link] = 44
Range(“A4:G4”).Select
[Link] = 6
C1 = 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 = T
V = InputBox(“Digite el Número de Aceptación”): Cells(2, 8).Value = V
For k = 1 To M
Cells(k + 4, 1).Value = k
D = 0: X1 = 0
For i = 1 To A
R1 = Rnd: logn = [Link](1 - R1): X1 = (-1) * logn + X1
Next i
X2 = 0
For j = 1 To B
R2 = Rnd: logn2 = [Link](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

167
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

T = Cells(2, 9).Value: N = Cells(3, 4).Value


If (D > V) Then
Cells(k + 4, 3) = "Rechazo": Cells(k + 4, 4).Value = C1 * N
Cells(k + 4, 5).Value = C2 * (T - N): Cells(k + 4, 6).Value = 0
Cells(k + 4, 7).Value = Cells(k + 4, 4).Value + Cells(k + 4, 5).Value
Else
Cells(k + 4, 3) = "Aceptable": Cells(k + 4, 4).Value = C2 * N
x(k) = Cells(k + 4, 2).Value
Cells(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).Value
End If
Next k
Range("A2").Select
End 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:

168
Colección
Generación de variables aleatorias continuas

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

169
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Limpiar
[Link] = False
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
M = InputBox(“Introduzca la media:”): Cells(n + 4, 3).Value = M
Desv = InputBox(“Introduzca la desviación estándar:”): Cells(n + 5, 3).Value = Desv
Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Número de corridas”
Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Variables de tipo normal”
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“B3:C3”).Select
With Selection
.[Link] = 46
.ReadingOrder = xlContext
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium

170
Colección
Generación de variables aleatorias continuas

.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlInsideVertical).Weight = xlMedium
.Borders(xlInsideHorizontal).Weight = xlMedium
End With
Range(Cells(4, 2), Cells(n + 3, 3)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(Cells(n + 4, 2), Cells(n + 5, 3)).Select
[Link] = 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 With
For 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 = x
Next j
Range("A1").Select
End Sub

171
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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([Link](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:

172
Colección
Generación de variables aleatorias continuas

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([Link](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.

173
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

174
Colección
Generación de variables aleatorias continuas

Figura 4.2. Generación de las funciones de densidad de probabildad de la variable t1

Generación de la variable t1

175
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Figura 4.3. Generación de las funciones de densidad para variable t2

Generación de la variable t2

176
Colección
Generación de variables aleatorias continuas

Procedimiento 4.18. Macro para desarrollar proceso de dos etapas en serie

Sub EtapaProcesos()
Dim M As Integer, TiempLlegada As Double, Medido As Double
Dim t1 As Double, t2 As Double, inicio, salida As Double, W, R, R1 As Double
Dim Wq As Double, sumat, sumat1, sumat2 As Double, K As Integer, x As Integer
DATOSINICIALES
K = Cells(1, 13).Value
M = InputBox(“Digite el tiempo medio de llegada:”): Cells(1, 2).Value = M
transito = InputBox(“Digite el tiempo de transito entre procesos:”)
Sum = 0
For i = 1 To K
R = Rnd: R1 = [Link](1 - R)
TiempLlegada = (-1) * M * R1: Cells(i + 3, 2).Value = TiempLlegada
Cells(4, 4).Value = Cells(4, 2).Value
Sum = Sum + TiempLlegada: Cells(i + 3, 3).Value = Sum
Next i
For i = 1 To K
inicio = Cells(i + 3, 4).Value
t1 = Etapa1: Cells(i + 3, 5).Value = t1
t2 = Etapa2: Cells(i + 3, 7).Value = t2
Cells(i + 3, 6).Value = transito
salida = inicio + t1 + transito + t2: Cells(i + 3, 8).Value = salida
inicio = [Link](Cells(i + 4, 3).Value, Cells(i + 3, 8).Value)
Cells(i + 4, 4).Value = inicio: Medido = Cells(i + 3, 3).Value
W = salida - Medido: Cells(i + 3, 9).Value = W
Wq = salida - Medido - (t1 + t2): Cells(i + 3, 10).Value = Wq
For x = 4 To 10
Cells(K + 4, x).Value = “”
Next x
Next i
sumat1 = [Link](Cells(4, 5), Cells(K + 3, 5))
sumat2 = [Link](Cells(4, 7), Cells(K + 3, 7))
sumat = sumat1 + sumat2
Cells(2, 4).Value = sumat
Cells(2, 6).Value = [Link](Cells(4, 10), Cells(K + 3, 10))
Cells(2, 10).Value = [Link](Cells(4, 9), Cells(K + 3, 9))
Cells(2, 8).Value = 100 * (Cells(2, 4).Value / ([Link](Cells(4, 8),
Cells(K + 3, 8))))

177
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Cells(1, 6).Value = (Cells(2, 6).Value) / ([Link](Cells(4, 8), Cells(K


+ 3, 8)))
Cells(1, 4).Value = (Cells(2, 10).Value) / ([Link](Cells(4, 8),
Cells(K + 3, 8)))
Cells(1, 10).Value = ([Link](Cells(4, 10), Cells(K + 3, 10)))
Cells(1, 8).Value = ([Link](Cells(4, 10), Cells(K + 3, 10)))
Cells(2, 2).Value = (1 - (Cells(2, 4).Value)) / ([Link](Cells(4, 8),
Cells(K + 3, 8)))
End Sub
Function Etapa1() As Double
Dim RO1 As Double
R1 = Rnd
If R1 <= 0.50 Then
RO1 = (9 / 4) - 4 * R1
Etapa1 = (3/ 2) - Sqr(RO1)
Elseif R1 > 0.50 and R1 <=0.75 then
Etapa1 = 4 * R1 – 1
Else
Etapa1 = 0
End If
End Function
Function Etapa2() As Double
Dim RO2, RO3 As Double
R2 = Rnd
If R2 <= 0.25 Then
Etapa2 = 4 * R2
ElseIf R2 > 0.25 And R2 <= 0.50 Then
RO2 = 2*R2 - (7/ 16)
Etapa2 = (3 / 4) + Sqr(RO2)
Elseif R2 >0.50 and R2 <=0.75 then
RO3 = (45/16) -2*R2
Etapa2 = (9 / 4) + Sqr(RO3)
Else
Etapa2 = = 4*R2 -1
End If
End Function

178
Colección
Generación de variables aleatorias continuas

Sub DATOSINICIALES()
Dim K As Integer
[Link] = False
Range(“A1:N2000”).ClearContents
Range(“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”).Select
[Link] = 126
K = InputBox(“Digite el número de Piezas:”)
Cells(1, 13).Value = K
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A1:J” & (K + 3)).Select

179
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = xlThin
End With
Range("A1:A2,C1:C2,E1:E2,G1:G2,I1:I2").Select
[Link] = 44
Range("A3:J3").Select
[Link] = 6
End 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?

180
Colección
Generación de variables aleatorias continuas

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

181
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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

182
Colección
Generación de variables aleatorias continuas

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 Medias de tiempo de Medias de falla con


Tiempo de reparación
máquina proceso tiempo de funcionamiento
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.

183
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

184
Generación de variables aleatorias discretas
5

L
as 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 [Link]
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 =


Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Distribución probabilidad de Bernoulli

La función de densidad de probabilidad de la distribución de Bernoulli está dada por:

p = probabilidad de éxito
q = probabilidad de fracaso = 1 – p
los valores de la variable x son
a.) x = 0 si la probabilidad es 1-p
b.) x = 1 si la probabilidad es p
para 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).

186
Colección
Generación de variables aleatorias discretas

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
[Link] = False
[Link]
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = 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 If
Range(“A2:G2,D4:D9”).Select
[Link](xlEdgeTop).Weight = xlMedium
[Link](xlEdgeBottom).Weight = xlMedium
[Link] = 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”

187
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = [Link](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
Next i
Cells(4, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(5, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(6, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(7, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(8, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(9, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(1, 1).Select
End 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) = [Link]-1 ; x = 1,2,3,…..∞.
p = probabilidad de éxito en una sola prueba.
q = probabilidad de fracaso en una sola prueba = 1 – p.

188
Colección
Generación de variables aleatorias discretas

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.

189
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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
[Link] = False
[Link]
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = 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!”

190
Colección
Generación de variables aleatorias discretas

GoTo inicio
Else
q=1-p
End If
Range(“A2:G2,D4:D9”).Select
[Link](xlEdgeTop).Weight = xlMedium
[Link](xlEdgeBottom).Weight = xlMedium
[Link] = 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 = [Link](R): D = [Link](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 = [Link](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

191
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Next i
Cells(4, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(5, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(6, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(7, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(8, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(9, 5).Value = [Link](Range("G3:G" & (k + 2)))
Cells(1, 1).Select
End 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 éxitos
n =número de ensayos
p = probabilidad de éxito
q = probabilidad de fracaso

192
Colección
Generación de variables aleatorias discretas

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.

193
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
[Link] = False
Range(“A7:K2000”).ClearContents
Range(“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”).Select
With Selection
.[Link] = True

194
Colección
Generación de variables aleatorias discretas

.[Link] = "Arial"
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
lote = InputBox("Introduzca el número de lotes:")
Range("A2:CB" & (lote + 2)).Select
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 = xlThin
End With
Range("A2:B2").Select
[Link] = 44
n = InputBox("Digite el número de veces de experimentos"): Cells(1, 3).Value = n
Range("A3:B" & (lote + 2)).ClearContents
inicio:
p = InputBox("Digite el valor de p"): Cells(1, 2).Value = p
If (p > 1) Then
MsgBox "La probabilidad de éxito no debe ser mayor o igual que 1", vbOKOnly, "¡ERROR¡"
GoTo inicio
Else
For j = 1 To lote
Cells(j + 2, 1).Value = j
Sum = 0
For K = 1 To n
R = Rnd
If (R <= p) Then
x=0
Else
x=1
End If
Sum = Sum + x
Next K
Cells(j + 2, 2).Value = Sum
Next j
End If
End Sub

195
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
[Link] = False
Range(“D1:K2000”).ClearContents
Range(“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”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
lote = InputBox(“Introduzca el número de lotes:”)
Range(“I2:J” & (lote + 2)).Select
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 = xlThin
End With
Range(“D2:J2”).Select
[Link] = 44
n = InputBox(“Digite el número de veces de experimentos”): Cells(1, 3).Value = n
exito = InputBox(“Digite el Número de éxitos (X)”): Cells(1, 4).Value = exito
Range(“D2:H” & (exito + 2)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin

196
Colección
Generación de variables aleatorias discretas

.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
Set Rango1 = Worksheets(1).Range("$F$3:$H" & (exito + 2))
inicio:
p = InputBox("Digite el valor de p"): Cells(1, 2).Value = p
If (p > 1) Then
MsgBox "La probabilidad de éxito no debe ser mayor o igual que 1", vbOKOnly, "¡ERROR¡"
GoTo inicio
Else
Cells(3, 6).Value = 0
For i = 1 To exito
Cells(i + 2, 4).Value = i - 1
Cells(i + 2, 8).Value = i - 1
x = Cells(i + 2, 4).Value
b = [Link](x, n, p, 1): Cells(i + 2, 5).Value = b
Cells(i + 2, 7).Value = Cells(i + 2, 5).Value
Cells(i + 3, 6).Value = Cells(i + 2, 7).Value
Cells(exito + 3, 6).Value = ""
Next i
End If
For j = 1 To lote
Cells(j + 2, 9).Value = j
R = Rnd
Cells(j + 2, 10).Value = [Link](R, Rango1, 3)
Next j
End Sub

197
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 éxitos


n = número de la muestra
M = población éxito
N = 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

198
Colección
Generación de variables aleatorias discretas

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

199
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
[Link] = False
Range(“A1:K2000”).ClearContents
K = InputBox(“Digite el Número de Población N:”): Cells(1, 2).Value = K
Range(“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”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A1:B5,A6:C” & (K + 6)).Select
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 = xlThin
End With
Range(“A1:A5,A6:C6”).Select
[Link] = 44
Cells(3, 3) = “Aceptable”
Inicio:
M = InputBox(“Introduzca el número de la población de éxito M:”): Cells(3, 2).Value = M
If (M < K) Then

200
Colección
Generación de variables aleatorias discretas

Comenzar: S = InputBox("Introduzca el número de la muestra S:"): Cells(2, 2).Value = S


If (S <= K Or S <= M) Then
For j = 1 To K
Cells(j + 6, 1).Value = j
Sum = 0: N = Cells(1, 2).Value: M = Cells(3, 2).Value
For i = 1 To S
R = Rnd: p = (M / N)
If (R >= p) Then
X = 1: M = M - 1
Else
X = 0: N = N - 1: M = M - 1
End If
Sum = Sum + X
Next i
Cells(6 + j, 2).Value = Sum
If (Sum >= 5) Then
Cells(6 + j, 3) = "Aceptable"
Else
Cells(6 + j, 3) = " No Aceptable"
End If
Next j
Cells(4, 2).Value = [Link](Range(Cells(7, 3), Cells(36, 3)),
Cells(3, 3))
Prob = (Cells(4, 2).Value) / K: Cells(5, 2).Value = Prob
Else
MsgBox "El número de la muestra debe ser menor o igual que el número de la población",
vbOKOnly, "ERROR"
GoTo Comenzar
End If
Else
MsgBox "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 Inicio
End If
End Sub

201
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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:

202
Colección
Generación de variables aleatorias discretas

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

203
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
[Link] = False
Limpiarborrar
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“B3”).Select: ActiveCell.FormulaR1C1 = “Generacion de Variables de Poissón”
Range(“B3:D4”).Select
[Link]
[Link] = 20
Range(“B5”).Select: ActiveCell.FormulaR1C1 = “Valor de Lambda”
[Link] = 20
[Link]
N = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = N
Range(“B8:D8”).Select
[Link] = 6
Range(“B9:D” & (N + 8)).Select
[Link] = 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

204
Colección
Generación de variables aleatorias discretas

For j = 1 To N
Cells(j + 8, 2).Value = j
Y = 0: X = 0
Inicio:
R = Rnd: Cells(j + 8, 3).Value = R
V = (-1) * ([Link](1 - R) / M)
Y=Y+V
If (Y > 1) Then
Cells(j + 8, 4).Value = X
Else
X=X+1
Cells(8 + j, 4).Value = X
GoTo Inicio
End If
Next j
End 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.

205
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Integer
Dim NV As Integer, FE As Integer, NT As Integer, T As Integer, n As Integer
Dim p1 As Single, p2 As Double, q As Double, R As Double, k As Integer
[Link] = False
Range(“A1:P2000”).ClearContents
Range(“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.”

206
Colección
Generación de variables aleatorias discretas

Range(“I5”).Select: ActiveCell.FormulaR1C1 = “Promedio de Equipos no vendidos”


Range(“J5”).Select: ActiveCell.FormulaR1C1 = “Tiempo de Entrega generado”
Range(“A2:A4”).Select
[Link] = 44
Range(“A5:J5”).Select
[Link] = 6
dia = InputBox(“Digite el número de Dias:”): Cells(4, 4).Value = dia
p1 = InputBox(“Digite la Probablidad de éxito de la Binomial”): Cells(3, 2).Value = p1
p2 = InputBox(“Digite la Probablidad de éxito de la Geométrica”): Cells(4, 2).Value = p2
n = InputBox(“Digite el número de ensayos o parámetro de binomial”): Cells(2, 2).Value = n
Range(“A1:J1”).Select
[Link]
[Link] = 20
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A2:B4,J5:J15,A5:G” & (dia + 6)).Select
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 = xlThin
End With
PRO = 4
Rep = InputBox(“Digite el número de Replicas (No mayor que 25):”, “NUMERO DE REPLICAS”)
If (Rep > 25) Then
MsgBox “El número de replicas excede a la capacidad de corridas”, vbOKOnly, “!! LO SIENTO !!”
Exit Sub
End If
Range(“H5:I” & (Rep + 5)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlThin

207
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
For i = 1 To Rep
Var = “REPLICA NUMERO “ + Str(i)
MsgBox Var, vbOKOnly, “REPLICAS”
Cells(i + 5, 8).Value = i
‘Generación de la demanda
Cells(6, 1).Value = 0
For k = 1 To dia
Cells(k + 6, 1).Value = k
Cells(k + 6, 2).Value = BINOMIAL
Next k
‘Generacion de los tiempos de entrega
For j = 6 To 15
p2 = Cells(4, 2).Value
R = Rnd
q = 1 - p2
Cells(j, 10).Value = Geometrica(R, q)
Next j
Cells(6, 4).Value = 10
‘Número de equipos vendidos en el dia
j=6
For k = 1 To dia
NV = Cells(k + 6, 2).Value
NT = (Cells(k + 5, 4).Value) - NV
If (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

208
Colección
Generación de variables aleatorias discretas

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 = [Link](Range(Cells(7, 5), Cells(dia + 6)))
Cells(i + 5, 9).Value = Cells(dia + 7, 5)
Next i
Range("H" & (Rep + 6)).Select: ActiveCell.FormulaR1C1 = "PROMEDIO"
Cells(Rep + 6, 9).Value = [Link](Range(Cells(6, 9), Cells(Rep
+ 5, 9)))
End Sub

209
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Function BINOMIAL(n As Variant, p1 As Single) As Integer


Dim R As Double
p1 = Cells(3, 2).Value: n = Cells(2, 2).Value
Sum = 0
For k = 1 To n
R = Rnd
If (R <= p1) Then
x=0
Else
x=1
End If
Sum = Sum + x
Next k
BINOMIAL = Sum
End Function
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Geometrica(q2 As Double) As Integer
Dim R1 As Double
R1 = Rnd
Geometrica = 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.

210
Colección
Generación de variables aleatorias discretas

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

211
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

212
Modelos de simulación de líneas de espera
con distribución de probabilidad teórica 6

E
n 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:
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

214
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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.

215
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim R2 As Double, Tmedido(1 To 10000) As Double, inicio(1 To 10000) As Double, Tfinal(1 To
10000) As Double
Dim W(1 To 10000) As Double, Wq(1 To 10000) As Double, Media As Double, Desv As Double
Dim P0, Wprom, Wqprom, L, Lq As Double, inactivo(1 To 10000) As Double
Limpiar
[Link] = False
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
Media = InputBox(“Introduzca el valor de la media del tiempo entre llegadas:”): Cells(5, 13).Value
= Media
Desv = InputBox(“Introduzca la desviación estándar del tiempo entre llegadas:”): Cells(6, 13).
Value = Desv
M = InputBox(“Introduzca la media del tiempo de servicio:”): Cells(7, 13).Value = M
CellsSelect
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 11
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“B3:J3”).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium

216
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
[Link]
ActiveCell.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”).Select
With Selection
.[Link] = 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 With
Range(Cells(5, 2), Cells(n + 4, 10)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(Cells(5, 12), Cells(12, 13)).Select
[Link] = 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”

217
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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”).[Link]
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
For j = 1 To n
Cells(j + 4, 2) = j
R1 = Rnd: Tentrellegadas(j) = Round([Link](R1, Media, Desv), 2)
Cells(j + 4, 3).Value = Tentrellegadas(j)
R2 = Rnd: Tservicio(j) = Round((-1) * M * ([Link](1 - R2)), 2)
Cells(j + 4, 6).Value = Tservicio(j)
Next j
For 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).Value
Next i
Tmedido(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 n
Tmedido(i) = Tmedido(i - 1) + Tentrellegadas(i): Cells(i + 4, 4).Value = Tmedido(i)
inicio(i) = [Link](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 i
Wprom = [Link](Range(“H5:H” & (n + 4))): Cells(8, 13).Value = Round(Wprom,
2)

218
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

P0 = ([Link](Range("J5:J" & (n + 4)))) / (([Link](Range("G5:G" & (n + 4))))


- Cells(5, 5).Value)
Cells(9, 13).Value = P0
Range("M9").Select
[Link] = "0.00%"
Wqprom = [Link](Range("I5:I" & (n + 4))): Cells(10, 13).Value = Round(Wqprom,
2)
L = ([Link](Range("H5:H" & (n + 4)))) / (([Link](Range("G5:G" & (n +
4)))) - Cells(5, 5).Value)
Cells(11, 13).Value = Round(L, 0)
Lq = ([Link](Range("I5:I" & (n + 4)))) / (([Link](Range("G5:G" & (n + 4))))
- Cells(5, 5).Value)
Cells(12, 13).Value = Round(Lq, 0)
Range("A1").Select
End 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úmeros
d. Hacer previamente una macro denominada “DATOSINICIALES”

219
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Procedimiento 6.2. Macro para simulación de líneas de espera con formato horario

Sub DATOSINICIALES()
[Link] = False
Range(“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”).Select
[Link]
[Link] = 6
Range(“A7:C7,A9:C9,A11:C11”).Select
[Link]
Range(“A1:Z1000”).Select
With Selection
.[Link] = True

220
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

.[Link] = "Arial"
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range("D6:J7,A7,A9:D9,A11:D11").Select
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 = xlThin
End With
Range("D6:J6").Select
[Link] = 38
Range("A7,A9,A11").Select
[Link] = 44
Range("A13:A14,B13:B14,C13:C14,D13:D14,E13:E14,F13:F14,G13:G14,H13:H14,I13:I14").Select
[Link]
Range("K13:M13").Select
[Link]
[Link] = 6
Range("A13:I13,K14:M14").Select
[Link] = 38
End Sub
Sub Unsoloservidor2()
Dim R1 As Double, Tentrellegadas(1 To 10000) As Double, Tservicio(1 To 10000) As Double
Dim R2 As Double, Tmedido(1 To 10000) As Double, inicio(1 To 10000) As Double, Tfinal(1 To
10000) As Double
Dim W(1 To 10000) As Double, Wq(1 To 10000) As Double, Media As Double
Dim P0, Wprom, Wqprom, L, Lq As Double, inactivo(1 To 10000) As Double
Dim Medprima(0 To 10000), Inicioprima(0 To 10000), Finalprima(0 To 10000) As Double
Limpiar
DATOSINICIALES
Range(“D7:J11”).ClearContents
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
Media = InputBox(“Introduzca el valor de la media del tiempo entre llegadas:”): Cells(7, 4).Value = Media

221
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

M = InputBox(“Introduzca la media del tiempo de servicio:”): Cells(9, 4).Value = M


Tiempoentrada = InputBox(“Digite el tiempo de entrada (H:MM):”): Cells(11, 4) =
Tiempoentrada
Range(Cells(15, 1), Cells(n + 15, 9)).Select
With Selection
.[Link] = 11
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(Cells(15, 11), Cells(n + 15, 13)).Select
With Selection
.[Link] = 11
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Medprima(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 * ([Link](1 - R1)), 2)
Cells(j + 15, 2).Value = Tentrellegadas(j)
R2 = Rnd
Tservicio(j) = Round((-1) * M * ([Link](1 - R2)), 2)
Cells(j + 15, 3).Value = Tservicio(j)
Next j
For 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

222
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

Next i
Range("D16:F" & (n + 15)).Select
[Link] = "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 n
Medprima(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) = [Link](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 i
L = ([Link](Range("G16:G" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7,
5).Value = L
Lq = ([Link](Range("H16:H" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7,
6).Value = Lq
Wprom = [Link](Range("G16:G" & (n + 15))): Cells(7, 7).Value = Round(Wprom,
2)
Wqprom = [Link](Range("H16:H" & (n + 15))): Cells(7, 8).Value =
Round(Wqprom, 2)
P0 = ([Link](Range("I16:I" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7,
9).Value = P0
U = ([Link](Range("C16:C" & (n + 15)))) / (Finalprima(n) - Medprima(1)): Cells(7,
10).Value = U
Range("I7:J7").Select
[Link] = "0.00%"
Range(“A4”).select
End Sub

223
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

224
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

Procedimiento 6.3. Macro para la simulación de llegadas de varios tipo de piezas

Sub Cuadricular()
[Link] = False
Range(“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”).Select
[Link]
[Link] = 6
Range(“A5:A6,B5:B6,C5:C6,D5:D6,E5:I5,J5:N5,O5:Q5”).Select
[Link]
Range(“A1:Z1000”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With

225
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Range("A2,A5:Q6").Select
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 = xlThin
End With
Range("A5:Q6").Select
[Link] = 43
End Sub
Sub Dospiezas()
Dim R1 As Double, Tentrellegadas(1 To 10000) As Double, TservicioA(1 To 10000) As Double,
TservicioB(1 To 10000) As Double
Dim R2 As Double, Tmedido(1 To 10000) As Double, inicioA(1 To 10000) As Double, inicioB(1
To 10000) As Double
Dim TfinalA(1 To 10000) As Double, TfinalB(1 To 10000) As Double, WB(1 To 10000) As
Double, WqB(1 To 10000) As Double
Dim WA(1 To 10000) As Double, WqA(1 To 10000) As Double, Media As Double, k As Integer,
lambda As Integer
Dim P0, WAprom, WBprom, WAqprom, WBqprom, L1, L2, Lq1, Lq2 As Double, inactivo(1 To
10000) As Double, min As Double
Dim termina(1 To 10000) As Double, comienzo(1 To 10000) As Double
Limpiar
Cuadricular
n = InputBox(“Digite el número de corridas:”): Cells(1, 1).Value = n
a = InputBox(“Introduzca el valor mínimo del tiempo entre llegadas:”): Cells(7, 19).Value = a
b = InputBox(“Introduzca el valor máximo del tiempo entre llegadas:”): Cells(8, 19).Value = b
Media = InputBox(“Introduzca la media del tiempo de procesamiento de la pieza A:”): Cells(9,
19).Value = Media
k = InputBox(“Introduzca el parámetro de forma del tiempo de procesamiento de la pieza B:”):
Cells(10, 19).Value = k
lambda = InputBox(“Introduzca el parámetro de escala del tiempo de procesamiento de la pieza
B:”): Cells(11, 19).Value = lambda
min = InputBox(“Introduzca el valor mínimo del tiempo de procesamiento de la pieza B:”):
Cells(12, 19).Value = min
Range(Cells(7, 1), Cells(n + 6, 17)).Select
With Selection

226
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

.[Link] = True
.[Link] = “Arial”
.[Link] = 11
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(Cells(7, 18), Cells(22, 19)).Select
[Link] = 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”).[Link]
Range(Cells(7, 18), Cells(22, 19)).Select

227
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 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 With
For 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 If
Next i
For i = 1 To n
If Cells(i + 6, 2) = “A” Then
R1 = Rnd
TservicioA(i) = (-1) * (Media) * ([Link](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) = [Link](inicioA(1), inicioB(1)): Cells(7, 15).Value =
Round(comienzo(1), 2)

228
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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) = [Link](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) = [Link](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) = [Link](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) = [Link](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) = [Link](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

229
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

L1 = ([Link](Range("H7:H" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(17, 19).


Value = Round(L1, 0)
L2 = ([Link](Range("M7:M" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(18, 19).
Value = Round(L2, 0)
Lq1 = ([Link](Range("I7:I" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(19, 19).
Value = Round(Lq1, 0)
Lq2 = ([Link](Range("N7:N" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(20, 19).
Value = Round(Lq2, 0)
WAprom = [Link](Range("H7:H" & (n + 6))): Cells(13, 19).Value =
Round(WAprom, 2)
WBprom = [Link](Range("M7:M" & (n + 6))): Cells(14, 19).Value =
Round(WBprom, 2)
WAqprom = [Link](Range("I7:I" & (n + 6))): Cells(15, 19).Value =
Round(Wqprom, 2)
WBprom = [Link](Range("N7:N" & (n + 6))): Cells(16, 19).Value =
Round(WAprom, 2)
P0 = ([Link](Range("Q7:Q" & (n + 6)))) / (termina(n) - comienzo(1)): Cells(21, 19).
Value = P0
U = (([Link](Range("F7:F" & (n + 6)))) + ([Link](Range("K7:K" & (n +
6))))) / (termina(n) - comienzo(1))
Cells(22, 19).Value = U
Range("S21:S22").Select
[Link] = "0.00%"
Range("A1").Select
End Sub
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Erlang(k As Integer, lambda As Integer, min As Double) As Double
Y=0
R = Rnd
M = (1 / k * lambda)
For Z = 1 To k
Y = Y + Ln(1 - R)
Next Z
Erlang = (-1) * M * Y + lambda * (min)
End Function

230
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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.

231
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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()
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“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”

232
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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").Select
[Link]
[Link] = 6
Range("A6:A7,B6:B7,C6:C7,D6:F6,G6:G7,H6:J6,K6:K7,L6:L7,M6:M7").Select
[Link]
Range("A1,A2:H3,A6:M7").Select
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 = xlThin
End With
Range("A2:H2,A6:M6").Select
[Link] = 46
Range("A4:A5,C4:C5,E4:E5,G4:G5,I4:I5").Select
[Link] = 44
Range("A2:H2,A6:M6").Select
[Link] = 46
Range("D6,H6").Select
[Link] = 44
End Sub

233
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim a As Double, b As Double, c As Double, k As Integer, lambda As Integer, alfa As Integer,
beta As Integer
Dim Final1(1 To 10000), Final2(1 To 10000) As Double
Limpiar
Cuadricular02
N = InputBox(“Introduzca el número de piezas a procesar:”): Cells(3, 1).Value = N
a = InputBox(“Digite el valor mínimo del tiempo de llegadas:”): Cells(3, 2).Value = a
b = InputBox(“Digite el valor más probable del tiempo de llegadas:”): Cells(3, 3).Value = b
c = InputBox(“Digite el valor máximo del tiempo de llegadas:”): Cells(3, 4).Value = c
alfa = InputBox(“Digite el parámetro de forma(alfa) del tiempo de proceso de la máquina 1:”):
Cells(3, 5).Value = alfa
beta = InputBox(“Digite el parámetro de escala(beta) del tiempo de proceso de la máquina 1:”):
Cells(3, 6).Value = beta
k = InputBox(“Digite el parámetro de forma(k) del tiempo de proceso de la máquina 2:”): Cells(3,
7).Value = k
lambda = InputBox(“Digite el parámetro de escala del tiempo de proceso de la máquina 2:”):
Cells(3, 8).Value = alfa
Range(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
.[Link] = 6
End With
Range(“A1”).Select
For i = 1 To N
Cells(i + 7, 1).Value = i
TentreLlegadas(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

234
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

Tmedido(i) = Tmedido(i - 1) + TentreLlegadas(i): Cells(i + 7, 3).Value = Tmedido(i)


End If
Next i
For 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) = [Link](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 If
Next j
tllprom = [Link](Range(“B8:B” & (N + 7))): Cells(4, 2).Value = Round(tllprom, 2)
L = [Link](Range(“L8:L” & (N + 7))) / (Final2(N) - Tmedido(1)): Cells(4, 4).Value = Round(L, 2)
Lq = [Link](Range(“M8:M” & (N + 7))) / (Final2(N) - Tmedido(1)): Cells(4, 6).Value
= Round(Lq, 2)
Wprom = [Link](Range(“L8:L” & (N + 7))): Cells(4, 8).Value = Round(Wprom, 2)
Wqprom = [Link](Range(“M8:M” & (N + 7))): Cells(4, 10).Value = Round(Wqprom, 2)
U1 = ([Link](Range(“E8:E” & (N + 7)))) / ([Link](Range(“B8:B” &
(N + 7)))): Cells(5, 2).Value = U1
U2 = ([Link](Range(“I8:I” & (N + 7)))) / ([Link](Range(“B8:B” & (N
+ 7)))): Cells(5, 4).Value = U2
t1prom = [Link](Range(“E8:E” & (N + 7))): Cells(5, 6).Value = t1prom t2prom =
[Link](Range(“I8:I” & (N + 7))): Cells(5, 8).Value = t2prom
End Sub

235
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Function TiempoEntreLlegadas(a As Double, b As Double, c As Double) As Double


Dim R1 As Variant
R1 = Rnd
If N <= (b - a) / (c - a) Then
D1 = (c - a) * (b - a) * R1: Triangular = a + Sqr(D1)
Else
D2 = (c - a) * (c - b) * (1 - R1): Triangular = c - Sqr(D2)
End If
TiempoEntreLlegadas = Triangular
End Function
Function Etapa1(alfa As Integer, beta As Integer) As Double
Dim R2 As Variant
R2 = Rnd
Etapa1 = [Link](R2, alfa, beta)
End Function
Function Max(X1 As Variant, X2 As Variant) As Variant
Max = [Link](X1, X2)
End Function
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Etapa2(k As Integer, lambda As Integer) As Double
Y=0
R3 = Rnd
M = (1 / k * lambda)
For Z = 1 To k
Y = Y + Ln(1 - R3)
Next Z
Erlang = (-1) * M * Y
Etapa2 = Erlang
End 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

236
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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.

237
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Procedimiento 6.5. Macro para la simulación de líneas de espera con dos servidores en paralelo

Sub Cuadricular03()
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“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”).Select
[Link]
[Link] = 6
Range(“D9:D10,E9:E10,F9:F10,G9:J9,K9:N9,O9:R9”).Select
[Link]
Range(“D8,D9:R10”).Select
With Selection

238
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
Range("D8,D9:F9,G10:R10").Select
[Link] = 44
Range("G9,K9,O9").Select
[Link] = 19
End Sub
Sub Dosservidores2()
Dim Tentrellegadas(1 To 10000) As Double, Tmedido(1 To 10000) As Double, Final2(1 To
10000) As Double
Dim ts1(1 To 10000) As Double, Final1(1 To 10000) As Double, W(1 To 10000) As Double,
salida(1 To 10000) As Double
Dim Wq(1 To 10000) As Single, ts2(1 To 10000) As Double, Tinicio(1 To 10000) As Double,
inactivo2(1 To 10000) As Double
Dim inicio1(1 To 10000) As Double, inicio2(1 To 10000) As Double, inactivo1(1 To 10000) As
Double
Limpiar
Cuadricular03
n = InputBox(“Introduzca el número de piezas a procesar:”): Cells(7, 4).Value = n
media1 = InputBox(“Digite la media del tiempo entre llegadas:”): Cells(11, 20).Value = media1
media2 = InputBox(“Digite la media del tiempo de servicio:”): Cells(12, 20).Value = media2
Range(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
.[Link] = 19
End With
Range(Cells(11, 19), Cells(18, 20)).Select
[Link] = 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”

239
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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”).[Link]
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 With
For i = 1 To n
Cells(i + 10, 4).Value = i
Tentrellegadas(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 If
Next i
inicio1(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

240
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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

241
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 If
Next j
For x = 1 To n
If x = 1 Then
inactivo1(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)
Else
inactivo1(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 If
Next x
Wprom = [Link](Range("Q11:Q" & (n + 10))): Cells(13, 20).Value = Wprom
Wqprom = [Link](Range("R11:R" & (n + 10))): Cells(14, 20).Value = Wqprom
T1n = [Link](Range("I11:I" & (n + 10))) - Tmedido(1)
T2n = [Link](Range("M11:M" & (n + 10))) - Tmedido(1)
L = (Wprom / (Max(T1n, T2n))): Cells(15, 20).Value = L
Lq = (Wqprom / (Max(T1n, T2n))): Cells(16, 20).Value = Lq
P01 = ([Link](Range("J11:J" & (n + 10)))) / (T1n): Cells(17, 20).Value = P01
P02 = ([Link](Range("N11:N" & (n + 10)))) / (T2n): Cells(18, 20).Value = P02
Range("T17:T18").Select
[Link] = "0.00%"
Range("A1").Select
End Sub

242
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

Function TiempoEntreLlegadas() As Double


Dim R1 As Variant
R1 = Rnd
media1 = Cells(11, 20).Value
TiempoEntreLlegadas = (-1) * (media1) * ([Link](1 - R1))
End Function
Function Tiemposervicio() As Double
Dim R2 As Variant
R2 = Rnd
media2 = Cells(12, 20).Value
Tiemposervicio = (-1) * (media2) * ([Link](1 - R2))
End Function
Function Max(X1 As Variant, X2 As Variant) As Variant
Max = [Link](X1, X2)
End Function
Sub Limpiar()
Range("AA7").Select
[Link]
Range("A11:Z10000").Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range("A1").Select
End 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.

243
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

244
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica

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

245
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

246
Modelos de simulación de problemas
de inventarios con distribución 7
de probabilidad teórica

E
n 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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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

248
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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

249
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

250
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

Modelo de compra fija escenario 2:


ESC = faltante esperado por ciclo
El 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 Valor
Precio de compra $ 50/unidad
Costo de ordenar $ 100/orden
Costo unitario de almacenamiento $ 20/unidad/mes
Costo 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.

251
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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-
[Link](R, m, desv), 0)
c. Genera el tiempo de entrega mediante una instrucción de Te (i) = min + (max
- min) * R1
d. 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 Double
Dim D(1 To 10000) As Long, P(1 To 10000) As Double, Pe(1 To 10000) As Double
Dim INV(0 To 10000) As Long, LT As Integer, b(0 To 10000) As Long
Dim n As Integer, R As Variant, Q As Long, PRO As Long, FOQ(1 To 10000) As Long
Dim CT(1 To 1000) As Double
Limpiar
[Link] = False
n = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = n
m = 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:”)
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True

252
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

End With
Range(“A4,C3:K4”).Select
With 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 With
Range(“C3:K3”).Select
[Link]
ActiveCell.FormulaR1C1 = “SIMULACION DE INVENTARIO MODELO DE PUNTO DE RE-
ORDEN”
[Link] = 6
Range(“A4,C4:K4”).Select
[Link] = 45
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”
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 = Q
[Link] = 45
PRO = InputBox(“Digite el punto de reorden:”)
Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”
[Link] = 45
Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”
[Link] = 45
Range(“A4”).Select: ActiveCell.FormulaR1C1 = “[Link] 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:”)

253
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 With
Range(Cells(5, 3), Cells(n + 5, 11)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
For i = 1 To n
Cells(i + 5, 3).Value = i
R = Rnd: D(i) = Round([Link](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 i
Range(“A5:A” & (n + 5)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
.[Link] = 6
End With
j = 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

254
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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 = [Link](Range(Cells(6, 11), Cells(n + 5, 11)))
Range(Cells(6, 11), Cells(n + 5, 11)).Select: [Link] = "$ #,##0.00"
Range("H1").Select: [Link] = "$ #,##0.00"
Columns("H:H").ColumnWidth = 14.71
Range("A1").Select
End 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.

255
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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/unidad
Costo de ordenar $ 250/orden
Costo unitario de almacenamiento $ 0,55/unidad/dia
Costo 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:

256
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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-
[Link](R, m, desv), 0)
c. Genera el tiempo de entrega mediante una instrucción de Te (i) = min + (max
- min) * R1
d. 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 Double
Dim D(1 To 10000) As Long, P(1 To 10000) As Double, Pe(1 To 10000) As Double
Dim INV(0 To 10000) As Long, LT As Integer, b(0 To 10000) As Long
Dim n As Integer, R As Variant, Q As Long, nu As Double, nv As Double
Dim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As Double
Dim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As Double
Limpiar
[Link] = False
n = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = n
miu = InputBox(“Digite el valor de media de la demanda:”): Cells(2, 1).Value = miu
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:”)
Range(“A1:M200”).Select
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 11
.HorizontalAlignment = xlCenter

257
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“C3:K3”).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
[Link]
ActiveCell.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
.[Link] = 45
End With
INV(0) = InputBox(“Digite el inventario inicial:”): Cells(5, 6).Value = INV(0)

258
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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 = [Link](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”: [Link] = 45
Cells(1, 4).Value = Q: TEprom = ((min + max) / 2): PRO = Round((miu + Z * Sqr(TEprom) *
desv), 0)
Range(“E1”).Select: ActiveCell.FormulaR1C1 = “Punto de reorden”: [Link]
= 45
Cells(1, 6).Value = PRO: Range(“G1”).Select: ActiveCell.FormulaR1C1 = “Costo total”
[Link] = 45: Range(“A4”).Select: ActiveCell.FormulaR1C1 = “[Link]
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 With
Range(Cells(5, 3), Cells(n + 5, 11)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
For i = 1 To n
Cells(i + 5, 3).Value = i

259
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

R = Rnd: D(i) = Round([Link](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 i
Range(“A5:A” & (n + 5)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
j=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
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

260
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

Cells(1, 8).Value = [Link](Range(Cells(6, 11), Cells(n + 5, 11)))


Range(Cells(6, 11), Cells(n + 5, 11)).Select
[Link] = "$ #,##0.00"
Range("H1").Select
[Link] = "$ #,##0.00"
Columns("H:H").ColumnWidth = 14.71
Range("A1").Select
End 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.

261
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

262
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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
([Link](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 Double
Dim D(1 To 10000) As Long, ESC As Double, Ez As Double, SL As Double
Dim INV(0 To 10000) As Long, LT As Integer, B(0 To 10000) As Long, SS As Double
Dim n As Integer, R As Variant, Q As Long, nu As Double, Sdp As Double
Dim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As Double
Dim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As Double
Dim normal1, normal2 As Double, nrt(1 To 10000) As Long, TotalOrden As Integer
Limpiar
[Link] = False
[Link]
With Selection

263
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
n = InputBox(“Cuál es el número de corridas:”): Cells(1, 1).Value = n
miu = InputBox(“Digite el valor de media de la demanda:”): Cells(1, 6).Value = miu
desv = InputBox(“Digite la desviación estándar de la demanda:”): Cells(2, 4).Value = desv
Range(“C4:J5”).Select
With 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 With
Range(“C4:J4”).Select
[Link]
ActiveCell.FormulaR1C1 = “SIMULACIÓN DE INVENTARIO MODELO DE REVISIÓN PERIÓDICA”
[Link] = 6
Range(“C5:J5”).Select
[Link] = 45
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”
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”

264
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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: [Link] = 45
Rows(“1:1”).[Link]: Rows(“2:2”).[Link]
Columns(“C:C”).ColumnWidth = 16.86
Range(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 With
Range(Cells(6, 3), Cells(n + 6, 10)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
For i = 1 To n
Cells(i + 6, 3).Value = i
R = Rnd: D(i) = Round([Link](R, miu, desv), 0): Cells(i + 6, 4).Value = D(i)
R1 = Rnd
Next i
INV(0) = Cells(6, 7).Value
For x = 1 To n
D(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 x
RequerimientosFijo

265
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 = [Link](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 = [Link](Range(Cells(6, 10), Cells(n + 6, 10)))
Cells(2, 8).Value = [Link](Range(Cells(6, 10), Cells(n + 6, 10)))
Range(Cells(6, 10), Cells(n + 6, 10)).Select: [Link] = "$ #,##0.00"
Range("H1:H2").Select: [Link] = "$ #,##0.00"
Columns("H:H").ColumnWidth = 18
Range("A1").Select
End Sub
Sub RequerimientosFijo()
Dim SS, req As Integer, busq As Variant, FOQ(1 To 10000) As Long, INV(0 To 10000) As Long
Dim nrt(1 To 10000) As Long, B(0 To 10000) As Long
n = Cells(1, 1).Value: INV(0) = Cells(6, 7).Value
comenzar10:
Mensaje9 = “Cual es el Periodo de Orden Fijo”: req = InputBox(Mensaje9)
If req = 0 Then
MsgBox “El Periodo de Orden Fijo no puede ser igual cero”, vbOKOnly, “ ! ERROR!”
GoTo comenzar10
End If
If req >= n Then
MsgBox “El Periodo de Orden Fijo no puede ser mayor o igual al número de corridas”,
vbOKOnly, “! ERROR!”
GoTo comenzar10
Else
Cells(1, 4).Value = req
End If

266
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

l=1
For x = 1 To n
nrt(x) = Cells(x + 6, 5).Value
Next x
Do While l <= n
If nrt(l) = 0 Then
FOQ(l) = 0: Cells(l + 6, 6).Value = FOQ(l): l = l + 1
Else
Exit Do
End If
Loop
coc = (Int((n - l) / req) + 1): y = 0: cont = 0
For x = 1 To coc
Sum = 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 + req
Next x
End 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

267
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Double
Dim D(1 To 10000) As Long, ESC As Double, Ez As Double, SL As Double
Dim INV(0 To 10000) As Long, LT As Integer, B(0 To 10000) As Long, SS As Double
Dim n As Integer, R As Variant, Q As Long, nu As Double, Sdp As Double
Dim PRO As Long, FOQ(1 To 10000) As Long, Z As Double, Csl As Double
Dim CT(1 To 10000) As Double, c As Double, Co As Double, Ch As Double, Cs As Double
Dim normal1, normal2 As Double, nrt(1 To 10000) As Long, TotalOrden As Integer
Limpiar
[Link] = False
Range(“A1:L200”).Select
With Selection
.[Link] = True

268
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

.[Link] = “Arial”
.[Link] = 12
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
n = InputBox(“Cuál es el número de corridas:”): Cells(1, 2).Value = n
miu = InputBox(“Digite el valor de media de la demanda:”): Cells(1, 6).Value = miu
desv = InputBox(“Digite la desviación estándar de la demanda:”): Cells(2, 4).Value = desv
Range(“C4:J4”).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
[Link]
ActiveCell.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
.[Link] = 45
End With
INV(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

269
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Co = InputBox(“Digite el costo de ordenar:”): Cells(2, 8).Value = Co


Ch = InputBox(“Digite el costo unitario de almacenamiento:”): Cells(2, 2).Value = Ch
Range(“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: [Link] = 45
Rows(“1:1”).[Link]: Rows(“2:2”).[Link]: Columns(“I:I”).ColumnWidth
= 16.86
Range(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 With
Range(Cells(6, 3), Cells(n + 6, 10)).Select
With Selection
.[Link] = 6
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
For i = 1 To n
Cells(i + 6, 3).Value = i
R = Rnd
D(i) = Round([Link](R, miu, desv), 0): Cells(i + 6, 4).Value = D(i)
Next i
INV(0) = Cells(6, 7).Value
For x = 1 To n
D(x) = Cells(x + 6, 4).Value: INV(x) = Cells(x + 6, 7).Value: nrt(x) = D(x) - INV(x - 1)

270
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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 x
CantidadPeriodica
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 = [Link](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 = [Link](Range(Cells(6, 10), Cells(n + 6, 10)))
Cells(2, 10).Value = [Link](Range(Cells(6, 10), Cells(n + 6, 10)))
Range(Cells(6, 10), Cells(n + 6, 10)).Select
[Link] = "$ #,##0.00"
Range("B2,H1:H2,J1:J2").Select: [Link] = "$ #,##0.00"
Range("A1").Select
End Sub
Sub CantidadPeriodica()
Dim poq As Integer, FOQ(1 To 10000) As Long, INV(0 To 10000) As Long
Dim nrt(1 To 10000) As Long, B(0 To 10000) As Long, num As Double
Worksheets(“Hoja1”).Activate
comenzar:
n = Cells(1, 2).Value: INV(0) = Cells(6, 7).Value
inicio:
Ch = Cells(2, 2).Value: Co = Cells(2, 8).Value

271
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

c = Cells(1, 8).Value: miu = Cells(1, 6).Value


If Ch = 0 Then
MsgBox “El costo de almacenamiento no puede ser igual cero”, vbOKOnly, “! ERROR!”
Ch = InputBox(“Digite el costo unitario de almacenamiento”): Cells(2, 2).Value = Ch
GoTo inicio
End If
If (miu = 0) Then
MsgBox “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 = miu
End If
num = ((2 * miu * Co) / Ch): EOQ = Sqr(num): poq = Round(EOQ / miu, 0)
If poq = 0 Then
MsgBox “La Cantidad de Orden periódica no puede ser igual cero”, vbOKOnly, “! ERROR!”
GoTo comenzar
End If
If poq >= n Then
MsgBox “La Cantidad de Orden periódica no puede ser mayor o igual al número de corridas”,
vbOKOnly, “ ! ERROR!”
GoTo comenzar
Else
Cells(1, 4).Value = poq
End If
l=1
For x = 1 To n
nrt(x) = Cells(x + 6, 5).Value
Next x
Do While l <= n
If nrt(l) = 0 Then
FOQ(l) = 0: Cells(l + 6, 6).Value = FOQ(l)
l=l+1
Else
Exit Do
End If
Loop
coc = Int((n - l) / poq) + 1
y = 0: cont = 0
For x = 1 To coc
Sum = 0
For w = l + y To poq - 1 + l + y

272
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica

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 + poq
Next x
End 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.

273
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

274
Validación de resultados y diseño
de experimentos de simulación 8

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.
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 ocurrencia


85 0,05
110 0,10
130 0,15
145 0,20
150 0,12
165 0,15
175 0,13
190 0,05
200 0,05

Esta prueba se llevará a cabo mediante una macro que se mostrará a continuación.

276
Colección
Validación de resultados y diseño de experimentos de simulación

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 Integer
Dim x(1 To 1000) As Long, P(1 To 1000) As Double
Dim V(1 To 1000) As Double, sigmacuad As Double
Dim alfa, nivel, chicero, chialfa As Double
Dim n As Integer, NA As Variant
Dim FO(1 To 1000), FE(1 To 1000) As Integer
Dim r(1 To 1000), dif(1 To 1000) As Double
Limpiar
[Link] = False
Range(“A1:Q200”).Select
With Selection
.[Link] = True
.[Link] = 12
.[Link] = “Arial”
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
End With
Range(“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 = 45
Inicio:
k = InputBox(“Cuántos datos o eventos a introducir: (No debe ser mayor que 1000)”)
If (m > 1000) Then
GoTo Inicio
End If
‘Cuadricular
Range(“B2:G” & (k + 2)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin

277
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End With
comenzar:
Sum = 0: Cells(3, 5).Value = 0: miu = 0
For i = 1 To k
x(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 = Sum
Cells(i + 3, 5).Value = Sum: miu = miu + x(i) * P(i)
Next i
Cells(k + 3, 5).Value = “”
If (Sum > 1) Then
Range(“B3:G” & (k + 3)).ClearContents
GoTo comenzar
End If
Set rango = Worksheets(1).Range(“$E$3:$G$” & (k + 2))
n = InputBox(“Cuál es el número de corridas:”)
Range(“B” & (k + 4)).Select
ActiveCell.FormulaR1C1 = “La media es”: Cells(k + 4, 3).Value = miu
‘Calculo de la varianza
sigmacuad = 0
For i = 1 To k
sigmacuad = sigmacuad + ((x(i) - miu) ^ 2) * P(i)
Next i
Range(“B” & (k + 5)).Select: ActiveCell.FormulaR1C1 = “La varianza es”
Cells(k + 5, 3).Value = sigmacuad
‘Calculo de la desviación standard
Range(“B” & (k + 6)).Select: ActiveCell.FormulaR1C1 = “La desviación Standard es”
sigma = Sqr(sigmacuad): Cells(k + 6, 3).Value = sigma
Columns(“B:B”).ColumnWidth = 13.71: Rows(k + 6).RowHeight = 51
Range(“B” & (k + 7)).Select: ActiveCell.FormulaR1C1 = “El número de corrida es”
Cells(k + 7, 3).Value = n
Range(“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”

278
Colección
Validación de resultados y diseño de experimentos de simulación

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 With
For i = 1 To n
Cells(i + 2, 8).Value = i
r(i) = Rnd: Cells(i + 2, 9).Value = r(i): NA = Cells(i + 2, 9).Value
D(i) = [Link](NA, rango, 3): Cells(i + 2, 10).Value = D(i)
Next i
Range(“B” & (k + 8)).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”
nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivel
Cells(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 = m
Range(“B” & (k + 10)).Select: ActiveCell.FormulaR1C1 = “Grado de libertad”
g = m - 1: Cells(k + 10, 3).Value = g
Range(“B” & (k + 11)).Select: ActiveCell.FormulaR1C1 = “valor Crítico”
chialfa = [Link](Cells(k + 8, 3), Cells(k + 10, 3)): Cells(k + 11, 3).Value = chialfa
chicero = 0: DMin = [Link](Range(“B2:B” & (k + 2)))
DMax = [Link](Range(“B2:B” & (k + 2)))
interv = ((DMax - DMin) / m): y = (DMin - 1)
For i = 1 To m
Cells(i + 2, 11) = Str(y) + “ - “ + Str((y + interv)): FO(i) = 0
For j = 1 To n
If D(j) > y And D(j) <= (y + interv) Then
FO(i) = FO(i) + 1
End If
Next j
Cells(i + 2, 12).Value = FO(i): y = y + interv
FE(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)

279
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Next i
Range("B" & (k + 12)).Select: ActiveCell.FormulaR1C1 = "El estadístico"
Cells(k + 12, 3).Value = chicero
Columns("N:N").[Link]
If chicero < chialfa Then
aceptacion = 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 If
Range("B2").Select
End 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 = Vr
Ha: Vm ≠ Vr

n1 = tamaño de la muestra del modelo


n2 = 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.

280
Colección
Validación de resultados y diseño de experimentos de simulación

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 Double
Dim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As Double
Dim Vm, Vr As Double
Limpiar
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End 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 Then
Exit Sub
End If
Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”
Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Modelo”
Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Real”
Range(“C3:E3”).Select
[Link] = 6
n1 = InputBox(“Introduzca el número de corridas del modelo :”): Cells(4, 2).Value = n1
Range(“C4:E” & (n1 + 3)).Select
[Link] = 19
For i = 1 To n1
Cells(i + 3, 3).Value = i

281
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Next i
GenerarvariablesWeibull
n2 = InputBox("Introduzca el número de datos reales :")
For i = 1 To n2
x2(i) = InputBox("Entre el valor real " & i): Cells(i + 3, 5).Value = x2(i)
Next i
Vm = Cells(n1 + 5, 5).Value
Vr = [Link](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 = n2
Range("A6").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del modelo"
Cells(6, 2).Value = Vm
Range("A7").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del real"
Columns("A:A").[Link]
Cells(7, 2).Value = Vr
Range("A8").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"
nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(8, 2) = alfa
Range("A9").Select: ActiveCell.FormulaR1C1 = "Valor Fo"
Cells(9, 2).Value = Fcero
Range("A10").Select: ActiveCell.FormulaR1C1 = "Grado de libertad 1"
v1 = n1 - 1: Cells(10, 2).Value = v1
Range("A11").Select: ActiveCell.FormulaR1C1 = "Grado de libertad 2"
v2 = n2 - 1: Cells(11, 2).Value = v2
Range("A12").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"
Falfa = [Link](alfa / 2, v1, v2): Cells(12, 2).Value = Falfa
Range("A4:B12").Select
[Link] = 20
If Fcero < Falfa Then
aceptacion = MsgBox("No se rechaza el modelo de simulación que está arrojando resultados" _
& " con la misma varianza que el sistema real", vbInformation)
Else
rechazo = MsgBox("Se rechaza el modelo de simulación que está arrojando resultados" _
& " con la misma varianza que el sistema real", vbInformation)
Range("A1").Select
End If
End Sub

282
Colección
Validación de resultados y diseño de experimentos de simulación

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).Value
Range(Cells(n + 4, 4), Cells(n + 8, 5)).Select
[Link] = 44
Range("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 = v
End Sub
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Ln(x As Double) As Double
Ln = [Link](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.

283
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

µ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:

284
Colección
Validación de resultados y diseño de experimentos de simulación

Procedimiento 8.3. Macro para realizar prueba t de Student para un modelo simulado

Sub PruebaT()
Dim alfa, nivel, Tcero, Talfa As Double
Dim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As Double
Dim Vm, Vr As Double
Limpiar
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End 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 Then
Exit Sub
End If
Range(“C3”).Select: ActiveCell.FormulaR1C1 = “Número de corrida”
Range(“D3”).Select: ActiveCell.FormulaR1C1 = “Modelo”
Range(“E3”).Select: ActiveCell.FormulaR1C1 = “Real”
Range(“C3:E3”).Select
[Link] = 6
n1 = InputBox(“Digite el número de corridas:”): Cells(4, 2).Value = n1
Range(“C4:E” & (n1 + 3)).Select
[Link] = 19
For i = 1 To n1
Cells(i + 3, 3).Value = i
Next i
GenerarvariablesErlang
Range(“A4:B13”).Select
[Link] = 20
n2 = InputBox(“Introduzca el número de datos reales :”)
For i = 1 To n2
x2(i) = InputBox(“Entre el valor real “ & i): Cells(i + 3, 5).Value = x2(i)

285
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Next i
Vm = Cells(n1 + 8, 4).Value
Vr = [Link](Range("E4:E" & (n2 + 3)))
Mm = Cells(n1 + 7, 4).Value
Mr = [Link](Range("E4:E" & (n2 + 3)))
Columns("A:A").ColumnWidth = 35
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 = n2
Range("A6").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del modelo"
Cells(6, 2).Value = Vm
Range("A7").Select: ActiveCell.FormulaR1C1 = "Varianza de la muestra del real"
Cells(7, 2).Value = Vr
Range("A8").Select: ActiveCell.FormulaR1C1 = "Media de la muestra del modelo"
Cells(8, 2).Value = Mm
Range("A9").Select: ActiveCell.FormulaR1C1 = "Media de la muestra del real"
Cells(9, 2).Value = Mr
Range("A10").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"
nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(10, 2) = alfa
Range("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 = Tcero
Range("A12").Select: ActiveCell.FormulaR1C1 = "Grado de libertad "
g = n1 + n2 - 2: Cells(12, 2).Value = g
Range("A13").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"
Talfa = [Link](alfa / 2, g): Cells(13, 2).Value = Talfa
If Abs(Tcero) < Talfa Then
aceptacion = MsgBox("No se rechaza el modelo de simulación que está arrojando resultados" _
& " con la misma varianza que el sistema real", vbInformation)
Else
rechazo = MsgBox("Se rechaza el modelo de simulación que está arrojando resultados" _
& " con la misma varianza que el sistema real", vbInformation)
End If
End Sub

286
Colección
Validación de resultados y diseño de experimentos de simulación

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 = a
Range(Cells(n + 4, 3), Cells(n + 8, 4)).Select
[Link] = 20
Range("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).Select
End Sub
Function Ln(x As Double) As Double
Ln = [Link](x)
End Function
Function Erlang(k As Integer, lambda As Integer, a As Double) As Double
Y = 0: R = Rnd
M = (1 / k * lambda)
For Z = 1 To k
Y = Y + Ln(1 - R)
Next Z
Erlang = (-1) * M * Y + lambda * (a)
End Function

287
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

288
Colección
Validación de resultados y diseño de experimentos de simulación

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.

289
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 Long
Dim n1, n2 As Integer, x1(1 To 1000), x2(1 To 1000) As Double
Limpiar
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End 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 Then
Exit Sub
End If
Range(“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”).Select
[Link] = 6
n1 = InputBox(“Digite el número de datos simulados del modelo:”): Cells(1, 2).Value = n1
For i = 1 To n1

290
Colección
Validación de resultados y diseño de experimentos de simulación

x1(i) = InputBox(“Entre el valor simulado “ & i): Cells(i + 3 + n1, 5).Value = n1 + i


Cells(i + 3, 1).Value = x1(i): Cells(i + 3, 6).Value = x1(i)
Next i
n2 = InputBox(“Introduzca el número de datos reales :”): Cells(2, 2).Value = n2
For i = 1 To n2
x2(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 i
k = n1 + n2
Range(“F4:F” & (k + 3)).Select
[Link](“Hoja1”).[Link]
[Link](“Hoja1”).[Link] Key:=Range(“F4”), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With [Link](“Hoja1”).Sort
.SetRange Range(“F4:F” & (k + 3))
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
x=4
For i = x To k + x - 1
cont = 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 j
x = x + cont - 1
R2 = Cells(x, 5).Value
For Z = x - cont + 1 To x
rango = (R1 + R2) / 2: Cells(Z, 7).Value = rango
Next Z
x=x+1
Next i
For i = 4 To n1 + 3

291
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Cells(i, 3).Value = [Link](Cells(i, 1), Sheets(1).Range("F4:G" & (k + 3)), 2)


Sum = Sum + Cells(i, 3).Value
Next i
Range("C" & (n1 + 4)).Select: ActiveCell.FormulaR1C1 = "Suma"
[Link] = 6
Cells(n1 + 5, 3).Value = Sum
For i = 4 To n2 + 3
Cells(i, 4).Value = [Link](Cells(i, 2), Sheets(1).Range("F4:G" & (k + 3)), 2)
sum1 = sum1 + Cells(i, 4).Value
Next i
Range("D" & (n2 + 4)).Select: ActiveCell.FormulaR1C1 = "Suma"
[Link] = 6
Cells(n2 + 5, 4).Value = sum1: R1 = Sum: R2 = sum1
If (R1 < R2) Then
U = n1 * n2 + (n1 * (n1 - 1) / 2) - R1
Else
U = n1 * n2 + (n2 * (n2 - 1) / 2) - R2
End If
Range("H3").Select: ActiveCell.FormulaR1C1 = "Valor de U": Cells(3, 9).Value = U
Range("J3").Select: ActiveCell.FormulaR1C1 = "Nivel de Significancia"
nivel = CDbl(InputBox("Introduzca el nivel de significación")): alfa = 1 - nivel: Cells(3, 11) = alfa
media = n1 * (n1 + n2 + 1) / 2: Varza = n1 * n2 * (n1 + n2 + 1) / 12
zetacero = (U - media) / Sqr(Varza)
Range("L3").Select: ActiveCell.FormulaR1C1 = "El estadístico": Cells(3, 13).Value = zetacero
Range("N3").Select: ActiveCell.FormulaR1C1 = "Valor Crítico"
zetaalfa = [Link](alfa / 2): Cells(3, 15).Value = zetaalfa
If Abs(zetacero) < zetaalfa Then
aceptacion = MsgBox("No se rechaza el modelo de simulación y los valores reales" _
& " que provienen de la misma poblacion", vbInformation)
Else
rechazo = MsgBox("Se rechaza el modelo de simulación y los valores reales" _
& " que provienen de la misma poblacion", vbInformation)
End If
End Sub

292
Colección
Validación de resultados y diseño de experimentos de simulación

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 Double
Dim n As Integer, x, y As Double
Dim FO(1 To 1000), FE(1 To 1000) As Integer
Dim r(1 To 1000), dif(1 To 1000) As Double
Limpiar
[Link] = False
respuesta = 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 Then
Exit Sub
End If
n = 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 = k
GenerarvariablesExponenciales
Range(“A4”).Select

293
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

ActiveCell.FormulaR1C1 = “Tamaño de la muestra”


Columns(“A:A”).[Link]
Range(“A5”).Select
ActiveCell.FormulaR1C1 = “Nivel de Significancia”
alfa = CDbl(InputBox(“Introduzca el nivel de significación”)): Cells(5, 2) = alfa
m = Round(1 + 3.322 * ([Link](n)), 0)
Range(“A6”).Select
ActiveCell.FormulaR1C1 = “Números de intervalos”
Cells(6, 2).Value = m
DMin = Round([Link](Range(“G4:G” & (k + 3))), 3)
DMax = Round([Link](Range(“G4:G” & (k + 3))), 3)
interv = Round(((DMax - DMin) / m), 3)
Range(“A7”).Select
ActiveCell.FormulaR1C1 = “Grado de libertad”
g = m - 1: Cells(7, 2).Value = g
Range(“A8”).Select
ActiveCell.FormulaR1C1 = “valor Crítico”
chialfa = [Link](alfa, g): Cells(8, 2).Value = chialfa
For x = 1 To n
r(x) = Cells(x + 3, 7).Value
Next x
Range(“H3”).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”).[Link]
Range(“H3:I3”).Select
[Link]
Range(“H3:L3”).Select
[Link] = True
[Link] = “Arial”
[Link] = True
[Link] = xlCenter
[Link] = xlCenter
[Link] = 6
y = Round(DMin, 3)

294
Colección
Validación de resultados y diseño de experimentos de simulación

chicero = 0
For i = 1 To m
Cells(i + 3, 9) = y & " - " & (y + interv)
FO(i) = 0
For j = 1 To n
If r(j) > y And r(j) <= (y + interv) Then
FO(i) = FO(i) + 1
End If
Next j
y = 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 i
Range("A9").Select
ActiveCell.FormulaR1C1 = "El estadístico"
Cells(9, 2).Value = chicero
If chicero < chialfa Then
aceptacion = MsgBox("No se rechaza que las variables aleatorias generadas provienen de una
distribución de probabilidad" _
& " teórica", vbInformation)
Else
rechazo = MsgBox("Se rechaza que las variables aleatorias generadas provienen de una distribu-
ción de probabilidad" _
& " teórica", vbInformation)
End If
End 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
[Link] = 24
Range(“D4:E” & (n + 4)).Select
[Link] = 19

295
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Range(“F4:G” & (k + 4)).Select


[Link] = 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 With
Range(Cells(n + 4, 4), Cells(n + 5, 5)).Select
[Link] = 20
Range(Cells(k + 4, 6), Cells(k + 6, 7)).Select
[Link] = 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

296
Colección
Validación de resultados y diseño de experimentos de simulación

[Link]
With Selection
.HorizontalAlignment = xlCenter
End With
For i = 1 To k
For j = 1 To n
Cells(j + 3, 4) = j
r = Rnd
x = Round((-1 * EX) * ([Link](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([Link](Range("E4:E" & (n + 4))), 2)
Cells(i + 3, 7) = promedio
Next i
Cells(k + 4, 7).Value = [Link](Range("G4:G" & (k + 4)))
Cells(k + 5, 7).Value = [Link](Range("G4:G" & (k + 4)))
Cells(k + 6, 7).Value = [Link](Range("G4:G" & (k + 4)))
Range("A1").Select
End 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

297
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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.

298
Colección
Validación de resultados y diseño de experimentos de simulación

Sean:
a = número de tratamientos
n = número de réplicas
m=a–n
yij = 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.

299
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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()
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“A1”).Select: ActiveCell.FormulaR1C1 = “DISEÑO DE EXPERIMENTO DE
SIMULACION DE LINEA DE ESPERA CON VARIOS SERVIDORES”

300
Colección
Validación de resultados y diseño de experimentos de simulación

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”).Select
[Link]
[Link] = 6
Range(“A2:B2,A3:B3,D2:E2,D3:E3,A4:F4,B5:F5,B6:C6,A9:F9,B10:F10,B11:C11”).Select
[Link]

301
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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").Select
[Link]
Range("A1,A2:F3,A4,B5,B6:D6,A9,B10,B11:D11,A14,I2:P3").Select
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 = xlThin
End With
Range("A2,A3,D2,D3").Select
[Link] = 46
Range("A4,B5,B6,B9,B10,B11,I2").Select
[Link] = 22
Range("I3:P3").Select
[Link] = 46
Range(Cells(15, 1), Cells(24, 1)).Select
[Link] = 20
Range(Cells(14, 1), Cells(24, 4)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
End Sub
Sub ExperimentoCola01()
Dim i As Integer, j, z, tr As Integer, n, c As Integer, Serv As Integer
Dim medialleg, mediaserv As Double, inicio(1 To 10000) As Single
Dim 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 Single
Cuadricula04
Range(“I4:P1350”).ClearContents
Range(“C2:C3,F2:F3”).ClearContents
Range(“D6,D11,D15:D24”).ClearContents
Range(“A27:F205”).ClearContents
n = InputBox(“Digite el número de Clientes:”): Cells(2, 3).Value = n

302
Colección
Validación de resultados y diseño de experimentos de simulación

Serv = InputBox(“Digite el número de servidores:”): Cells(3, 3) = Serv


tasaserv = InputBox(“Introduzca la tasa de servicio:”)
Cells(11, 4).Value = tasaserv
pos = 27
tr = InputBox(“Digite el número de Tratamiento de la tasa de llegada:”)
Cells(2, 6) = tr
c = InputBox(“Digite el número de Réplicas:”): Cells(3, 6) = c
m=0
For y = 1 To tr
MsgBox “TRATAMIENTO NUMERO” + Str(y), vbOKOnly, “TRATAMIENTO”
Cells(pos + y - 1 - m, 1).Value = y
For z = 1 To c
Cells(pos + z - 1, 3).Value = z
Next z
tasalleg = InputBox(“Introduzca la tasa de llegada para el tratamiento “ & y)
Cells(6, 4).Value = tasalleg
For x = 1 To c
Range(“I4:P” & (n + 3)).ClearContents
minVal = 10000
ultVal = 10000
semilla = 12000
medialleg = (1 / tasalleg): mediaserv = (1 / tasaserv)
For i = 1 To Serv
Cells(i + 3, 9).Value = i
R = Rnd
TLLeg(i) = (-1) * (medialleg) * ([Link](1 - R)) ‘Tiempo entre llegadas
Cells(i + 3, 10).Value = TLLeg(i)
R2 = Rnd
Tserv(i) = (-1) * (mediaserv) * ([Link](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)

303
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 i
j = Serv + 1
Cells(j + 3, 9).Value = j
R = Rnd
TLLeg(j) = (-1) * (medialleg) * ([Link](1 - R))
Cells(j + 3, 10).Value = TLLeg(j)
R2 = Rnd
Tserv(j) = (-1) * (mediaserv) * ([Link](1 - R2))
Cells(j + 3, 13).Value = Tserv(j)
Tmlleg(j) = Cells(j + 2, 11).Value + Cells(j + 2, 10).Value
Cells(j + 3, 11).Value = Tmlleg(j)
inicio(j) = [Link](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).Value
Tmlleg(j) = Cells(i + 3, 11).Value: Tserv(j) = Cells(i + 3, 13).Value
Wq(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) * ([Link](1 - R))
Cells(i + 3, 10).Value = TLLeg(i)
R2 = Rnd
Tserv(i) = (-1) * (mediaserv) * ([Link](1 - R2))
Cells(i + 3, 13).Value = Tserv(i)
Tmlleg(i) = Cells(i + 2, 11).Value + Cells(i + 2, 10).Value

304
Colección
Validación de resultados y diseño de experimentos de simulación

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 = [Link](Range(“P4:P” & (n + 3))): Cells(21, 4).Value = Round(Wprom, 2)
Wqprom = [Link](Range(“O5:O” & (n + 3))): Cells(20, 4).Value =
Round(Wqprom, 2)
L = ([Link](Range(“P4:P” & (n + 3)))) / (([Link](Range(“N4:N” & (n +
3)))) - Cells(4, 11).Value)
Cells(19, 4).Value = Round(L, 0)
Lq = ([Link](Range(“O4:O” & (n + 3)))) / (([Link](Range(“N4:N” & (n +
3)))) - Cells(4, 11).Value)

305
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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
[Link] = "0.00%"
NumPromDesocp = Serv - servprom
If (NumPromDesocp < 0) Then
Cells(16, 4).Value = 0
Else
Cells(16, 4).Value = NumPromDesocp
End If
SumaTserv = [Link](Range("M4:M" & (n + 3))): Cells(22, 4).Value = SumaTserv
SumaWq = [Link](Range("O4:O" & (n + 3))): Cells(23, 4).Value = SumaWq
SumaW = [Link](Range("P4:P" & (n + 3))): Cells(24, 4).Value = SumaTserv
MsgBox "REPLICA NUMERO" + Str(x), vbOKOnly, "REPLICA"
Cells(pos, 2).Value = Cells(6, 4).Value
Cells(pos, 4).Value = Cells(15, 4).Value
pos = pos + 1
Next x
m=m+1
Next y
Anova
End Sub
Sub Anova()
Dim alfa, nivel, Fcero, Falfa As Double
Dim n, a As Integer, yi(1 To 1000), promyi(1 To 1000), totyi, totpromyi As Double
Dim SST, SSE, SSTR As Double, matriz(1 To 1000, 1 To 1000) As Double
Dim i, j As Byte
Range(“R2:S8”).ClearContents
Range(“AA1”).Select
[Link]
Range(“T1:AB100”).Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
[Link] = False
[Link]
Range(“Q1:AZ300”).Select
With Selection
.HorizontalAlignment = xlCenter

306
Colección
Validación de resultados y diseño de experimentos de simulación

.VerticalAlignment = xlCenter
.WrapText = True
.[Link] = “Arial”
.[Link] = 12
.[Link] = True
End With
a = Cells(2, 6).Value: n = Cells(3, 6).Value
Range(Cells(1, 21), Cells(1, n + 20)).Select
With Selection
.[Link] = 43
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
[Link]
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
.[Link] = 6
End With
fila = 0
For 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 + a
Next i
sum1 = 0: sum2 = 0
For x = 1 To a

307
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

sum1 = sum1 + yi(x): sum2 = sum2 + promyi(x)


Next
Cells(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)).Select
[Link](xlEdgeBottom).Weight = xlMedium
Range(Cells(i + 3, 20), Cells(i + 3, 24)).Select
With Selection
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.[Link] = 6
End With
totyi = sum1: Cells(a + 3, j + 20).Value = totyi
totpromyi = (sum2 / a): Cells(a + 3, j + 21).Value = totpromyi
Range(Cells(a + 6, 20), Cells(a + 6, 24)).Select
[Link](xlEdgeBottom).Weight = xlMedium
m=a*n
SST = [Link](Range(Cells(3, 21), Cells(a + 2, n + 20))) - ((totyi) ^ 2 / m)
Cells(i + 6, 21).Value = SST
SSTR = (1 / n) * ([Link](Range(Cells(3, n + 21), Cells(a + 2, n + 21)))) - ((totyi) ^ 2 /
m)
Cells(i + 4, 21).Value = SSTR
SSE = SST - SSTR: Cells(i + 5, 21).Value = SSE
Cells(i + 4, 22).Value = a - 1: Cells(i + 5, 22).Value = m - a
Cells(i + 6, 22).Value = m - 1
MSTR = SSTR / (a - 1): Cells(i + 4, 23).Value = MSTR
MSE = SSE / (m - a): Cells(i + 5, 23).Value = MSE
Fcero = MSTR / MSE: Cells(i + 4, 24).Value = Fcero
Range(“R2”).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”
nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivel: Cells(2, 19) = alfa
Range(“R3”).Select: ActiveCell.FormulaR1C1 = “Valor Fo”
Cells(3, 19).Value = Fcero
Range(“R4”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento”
v1 = a - 1: Cells(4, 19).Value = v1
Columns(“R:R”).[Link]
Range(“R5”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del error”
v2 = m - a: Cells(5, 19).Value = v2

308
Colección
Validación de resultados y diseño de experimentos de simulación

Range("R6").Select: ActiveCell.FormulaR1C1 = "valor Crítico"


Falfa = [Link](alfa / 2, v1, v2): Cells(6, 19).Value = Falfa
If Fcero < Falfa Then
aceptacion = MsgBox("Las medias de los tratmientos no difieren", vbInformation)
Else
rechazo = MsgBox("Las medias de los tratmientos difieren", vbInformation)
End If
End 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.

309
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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

310
Colección
Validación de resultados y diseño de experimentos de simulación

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

311
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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()
[Link] = False
[Link]
With Selection
.[Link] = True
.[Link] = “Arial”
.[Link] = 12
.WrapText = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“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) =”

312
Colección
Validación de resultados y diseño de experimentos de simulación

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”).Select
[Link]
[Link] = 6
Range(“A2:B2,A3:B3,D2:E2,D3:E3,A4:F4,B5:F5,B6:C6,A9:F9,B10:F10,B11:C11”).Select
[Link]
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”).Select
[Link]
Range(“A1,A2:F3,A4,B5,B6:D6,A9,B10,B11:D11,A14,I2:P3”).Select
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 = xlThin
End With
Range(“A2,A3,D2,D3”).Select
[Link] = 46

313
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

Range(“A4,B5,B6,B9,B10,B11,I2”).Select
[Link] = 22
Range("I3:P3").Select
[Link] = 46
Range(Cells(15, 1), Cells(24, 1)).Select
[Link] = 20
Range(Cells(14, 1), Cells(24, 4)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
End Sub
Sub ExperimentoCola02()
Dim i As Integer, j, z, tr As Integer, n, c As Integer, Serv As Integer
Dim medialleg, mediaserv As Double, inicio(1 To 10000) As Single
Dim 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 Single
Dim trll, trs As Integer, servprom As Double
Range(“I4:P1350”).ClearContents
Range(“C2:C3,F2:F3”).ClearContents
Range(“D6,D11,D15:D24”).ClearContents
Range(“A27:F205”).ClearContents
n = InputBox(“Digite el número de Clientes:”): Cells(2, 3).Value = n
Serv = InputBox(“Digite el número de servidores:”): Cells(3, 3) = Serv
pos = 27
trll = InputBox(“Digite el número de Tratamiento de la tasa de llegada:”)
Cells(7, 4) = trll
trs = InputBox(“Digite el número de Tratamiento de la tasa de servicio:”)
Cells(12, 4) = trs
c = InputBox(“Digite el número de Réplicas:”): Cells(2, 6) = c
m = 0: l = 0
Fila = 0
mult = (trll) * (c)
For t = 1 To trs
MsgBox “A CONTINUACION DIGITAR TRATAMIENTO DE LA TASA SERVICIO
NUMERO” + Str(t), _
vbOKOnly, “TRATAMIENTO DE LA TASA DE SERVICIO”

314
Colección
Validación de resultados y diseño de experimentos de simulación

tasaserv = InputBox(“Introduzca la TASA DE SERVICIO para el tratamiento “ & t)


Cells(11, 4).Value = tasaserv
For u = 1 To mult
Cells(pos + u - 1, 2).Value = t
Next u
For y = 1 To trll
MsgBox “A CONTINUACION DIGITAR TRATAMIENTO DE LA TASA LLEGADA
NUMERO” + Str(y), _
vbOKOnly, “TRATAMIENTO DE LA TASA DE LLEGADA”
Cells(pos + Fila, 1).Value = y
For z = 1 To c
Cells(pos + z - 1, 5).Value = z
Next z
tasalleg = InputBox(“Introduzca la TASA DE LLEGADA para el tratamiento “ & y)
Cells(6, 4).Value = tasalleg
For x = 1 To c
Range(“I4:P” & (n + 3)).ClearContents
minVal = 10000
ultVal = 10000
semilla = 12000
medialleg = (1 / tasalleg): mediaserv = (1 / tasaserv)
For i = 1 To Serv
Cells(i + 3, 9).Value = i
R = Rnd
TLLeg(i) = (-1) * (medialleg) * ([Link](1 - R)) ‘Tiempo entre llegadas
Cells(i + 3, 10).Value = TLLeg(i)
R2 = Rnd
Tserv(i) = (-1) * (mediaserv) * ([Link](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

315
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

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 i
j = Serv + 1
Cells(j + 3, 9).Value = j
R = Rnd
TLLeg(j) = (-1) * (medialleg) * ([Link](1 - R))
Cells(j + 3, 10).Value = TLLeg(j)
R2 = Rnd
Tserv(j) = (-1) * (mediaserv) * ([Link](1 - R2))
Cells(j + 3, 13).Value = Tserv(j)
Tmlleg(j) = Cells(j + 2, 11).Value + Cells(j + 2, 10).Value
Cells(j + 3, 11).Value = Tmlleg(j)
inicio(j) = [Link](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).Value
Tmlleg(j) = Cells(i + 3, 11).Value: Tserv(j) = Cells(i + 3, 13).Value
Wq(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) * ([Link](1 - R))
Cells(i + 3, 10).Value = TLLeg(i)
R2 = Rnd
Tserv(i) = (-1) * (mediaserv) * ([Link](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)

316
Colección
Validación de resultados y diseño de experimentos de simulación

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 = [Link](Range(“P4:P” & (n + 3)))
Cells(21, 4).Value = Round(Wprom, 2)
Wqprom = [Link](Range(“O5:O” & (n + 3)))
Cells(20, 4).Value = Round(Wqprom, 2)
maxdesp = (([Link](Range(“N4:N” & (n + 3)))) - Cells(4, 11).Value)
l = ([Link](Range(“P4:P” & (n + 3)))) / maxdesp
Cells(19, 4).Value = Round(l, 0)
Lq = ([Link](Range(“O4:O” & (n + 3)))) / maxdesp
Cells(18, 4).Value = Round(Lq, 0)

317
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

servprom = l - Lq: Cells(15, 4).Value = servprom


u = (servprom / Serv): Cells(17, 4).Value = u
Range("D17").Select
[Link] = "0.00%"
NumPromDesocp = Serv - servprom
If (NumPromDesocp < 0) Then
Cells(16, 4).Value = 0
Else
Cells(16, 4).Value = NumPromDesocp
End If
SumaTserv = [Link](Range("M4:M" & (n + 3))): Cells(22, 4).Value = SumaTserv
SumaWq = [Link](Range("O4:O" & (n + 3))): Cells(23, 4).Value = SumaWq
SumaW = [Link](Range("P4:P" & (n + 3))): Cells(24, 4).Value = SumaTserv
MsgBox "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 + 1
Next x
Next y
Next t
Fila = Fila + c
End 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 Double
Dim n, a, b, z As Integer, yi(1 To 1000), y2i(1 To 1000), totyi, sumcuad As Double
Dim SST, SSE, SSA, SSB, SSI, sumcuad2 As Double
Dim i, j As Byte
Range(“R2:S15”).ClearContents
Range(“Q1”).Select
[Link]
Range(“R1:BB100”).Select
[Link] Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

318
Colección
Validación de resultados y diseño de experimentos de simulación

[Link] = False
[Link]
Range(“Q1:AZ200”).Select
With Selection
.WrapText = True
.[Link] = “Arial”
.[Link] = 12
.[Link] = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range(“R2”).Select: ActiveCell.FormulaR1C1 = “Número de tratamientos del primer factor”
a = Cells(7, 4).Value: Cells(2, 19).Value = a
Range(“R3”).Select: ActiveCell.FormulaR1C1 = “Número de tratamientos del segundo factor”
Columns(“R:R”).[Link]
b = Cells(12, 4).Value: Cells(3, 19) = b
Range(“R4”).Select: ActiveCell.FormulaR1C1 = “Número de Réplicas”
n = Cells(2, 6).Value: Cells(4, 19) = n
l = Int(n / 2): m = n - l
Range(Cells(1, 21), Cells(1, b * (m + 1) + 20)).Select
With Selection
.[Link] = 43
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
[Link]
ActiveCell.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 With
z=1
For x = 21 To b * (m + 1) + 21 Step m + 1
Range(Cells(2, x), Cells(2, x + 1)).Select
With Selection
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium

319
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End 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 = 0
Range(“T2”).Select
For 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 = 0
For x = 1 To a
suma3 = suma3 + y2i(x)
Next x

320
Colección
Validación de resultados y diseño de experimentos de simulación

Next i
totyi = suma3
Cells(2 * a + 3, b * (m + 1) + 21).Value = totyi
Range(Cells(2 * a + 2, 20), Cells(2 * a + 2, b * (m + 1) + 21)).Select
[Link](xlEdgeBottom).Weight = xlMedium
Range(Cells(2 * a + 3, 20), Cells(2 * a + 3, b * (m + 1) + 21)).Select
[Link](xlEdgeBottom).Weight = xlMedium
Cells(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 = 45
Cells(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)).Select
[Link](xlEdgeBottom).Weight = xlMedium
With Selection
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.[Link] = 6
End With
Range(Cells(2 * a + 8, 20), Cells(2 * a + 8, 24)).Select
[Link](xlEdgeBottom).Weight = xlMedium
Columns(“T:T”).ColumnWidth = 15
sum2 = 0: sum3 = 0: k = a * b * n
For x = 21 To b * (m + 1) + 19 Step m + 1
suma4 = CDbl([Link](Range(Cells(3, x), Cells(2 * a + 2, x + 1))))
Cells(2 * a + 3, x).Value = suma4
sumcuad = [Link](Range(Cells(3, x), Cells(2 * a + 2, x + 1)))
sum2 = sum2 + sumcuad: sum3 = sum3 + (suma4) ^ 2
Next
SST = sum2 - ((totyi) ^ 2) / (k): Cells(2 * a + 9, 21).Value = SST
Cells(2 * a + 9, 22).Value = a * b * n - 1
SSB = ((sum3) / (a * n)) - ((totyi) ^ 2 / k): Cells(2 * a + 6, 21) = SSB
Cells(2 * a + 6, 22) = b - 1
MSB = (SSB / (b - 1)): Cells(2 * a + 6, 23).Value = MSB

321
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

sum4 = 0
For i = 1 To a
sum4 = sum4 + (y2i(i)) ^ 2
Next i
SSA = ((sum4) / (b * n)) - ((totyi) ^ 2 / k)
Cells(2 * a + 5, 21) = SSA: Cells(2 * a + 5, 22) = a - 1
MSA = (SSA / (a - 1)): Cells(2 * a + 5, 23).Value = MSA
sum5 = 0
For x = 21 + m To b * (m + 1) + 20 Step m + 1
sumcuad2 = [Link](Range(Cells(3, x), Cells(2 * a + 2, x)))
sum5 = sum5 + sumcuad2
Next
SSI = ((sum5) / n) - ((totyi) ^ 2 / k) - SSA - SSB: Cells(2 * a + 7, 21) = SSI
Cells(2 * a + 7, 22) = (a - 1) * (b - 1)
MSI = (SSI) / ((a - 1) * (b - 1)): Cells(2 * a + 7, 23).Value = MSI
SSE = SST - SSA - SSB - SSI: Cells(2 * a + 8, 21) = SSE
Cells(2 * a + 8, 22) = a * b * (n - 1)
MSE = (SSE / (a * b * (n - 1))): Cells(2 * a + 8, 23).Value = MSE
FceroA = (MSA / MSE): Cells(2 * a + 5, 24).Value = FceroA
FceroB = (MSB / MSE): Cells(2 * a + 6, 24).Value = FceroB
FceroI = (MSI / MSE): Cells(2 * a + 7, 24).Value = FceroI
Range(“R5”).Select: ActiveCell.FormulaR1C1 = “Nivel de Significancia”
nivel = CDbl(InputBox(“Introduzca el nivel de significación”)): alfa = 1 - nivel: Cells(5, 19) = alfa
Range(“R6”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del primer factor”
Cells(6, 19).Value = FceroA
Range(“R7”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del segundo factor”
Cells(7, 19).Value = FceroB
Range(“R8”).Select: ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento de la interacción”
Cells(8, 19).Value = FceroI
Range(“R9”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento del primer
factor”
v1 = a - 1: Cells(9, 19).Value = v1
Range(“R10”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento del segundo
factor”
v2 = b - 1: Cells(10, 19).Value = v2
Columns(“R:R”).[Link]
Range(“R11”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del Tratamiento de la
interación”
v3 = (a - 1) * (b - 1): Cells(11, 2).Value = v3
Range(“R12”).Select: ActiveCell.FormulaR1C1 = “Grado de libertad del error”

322
Colección
Validación de resultados y diseño de experimentos de simulación

v4 = a * b * (n - 1): Cells(12, 19).Value = v4


Range(“R13”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con interacion”
FalfaI = [Link](alfa / 2, v3, v4): Cells(13, 19).Value = FalfaI
Range(“R14”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con primer factor”
FalfaA = [Link](alfa / 2, v1, v4): Cells(14, 19).Value = FalfaA
Range(“R15”).Select: ActiveCell.FormulaR1C1 = “valor Crítico con segundo factor”
FalfaB = [Link](alfa / 2, v2, v4): Cells(15, 19).Value = FalfaB
Range(Cells(2, 18), Cells(15, 19)).Select
With Selection
.[Link] = 20
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeRight).Weight = xlMedium
End With
Range(“T2”).Select
End Sub
Sub probando()
Dim alfa, nivel, FceroA, FceroB, FceroI, FalfaA, FalfaB, FalfaI As Double
Dim n, a, b, z As Integer, yi(1 To 1000), y2i(1 To 1000), totyi, sumcuad As Double
Dim SST, SSE, SSA, SSB, SSI, sumcuad2 As Double, suma4 As Double
Dim i, j As Byte
a=3
b=3
n=4
k=a*b*n
m=2
l=2
y2i(1) = 158.12
y2i(2) = 158.91
y2i(3) = 175.87
totyi = Cells(9, 13).Value
Cells(2 * a + 3, b * (m + 1) + 4).Value = totyi
For x = 4 To b * (m + 1) + 2 Step m + 1
suma4 = CDbl([Link](Range(Cells(3, x), Cells(2 * a + 2, x + 1))))
Cells(2 * a + 3, x).Value = suma4
sumcuad = [Link](Range(Cells(3, x), Cells(2 * a + 2, x + 1)))
sum2 = sum2 + sumcuad
sum3 = sum3 + (suma4) ^ 2
Next
SST = sum2 - ((totyi) ^ 2) / (k)
Cells(2 * a + 9, 4).Value = SST
Cells(2 * a + 9, 5).Value = a * b * n - 1

323
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC

SSB = ((sum3) / (a * n)) - ((totyi) ^ 2 / k)


Cells(2 * a + 6, 4) = SSB
Cells(2 * a + 6, 5) = b - 1
MSB = (SSB / (b - 1)): Cells(2 * a + 6, 6).Value = MSB
sum4 = 0
For i = 1 To a
sum4 = sum4 + (y2i(i)) ^ 2
Next i
SSA = ((sum4) / (b * n)) - ((totyi) ^ 2 / k)
Cells(2 * a + 5, 4) = SSA
Cells(2 * a + 5, 5) = a - 1
MSA = (SSA / (a - 1)): Cells(2 * a + 5, 6).Value = MSA
sum5 = 0
For x = 4 + m To b * (m + 1) + 3 Step m + 1
sumcuad2 = [Link](Range(Cells(3, x), Cells(2 * a + 2, x)))
sum5 = sum5 + sumcuad2
Next
SSI = ((sum5) / n) - ((totyi) ^ 2 / k) - SSA - SSB
Cells(2 * a + 7, 4) = SSI
Cells(2 * a + 7, 5) = (a - 1) * (b - 1)
MSI = (SSI) / ((a - 1) * (b - 1)): Cells(2 * a + 7, 6).Value = MSI
SSE = SST - SSA - SSB - SSI
Cells(2 * a + 8, 4) = SSE
Cells(2 * a + 8, 5) = a * b * (n - 1)
MSE = (SSE / (a * b * (n - 1))): Cells(2 * a + 8, 6).Value = MSE
FceroA = MSA / MSE
Cells(2 * a + 5, 7).Value = FceroA
FceroB = MSB / MSE
Cells(2 * a + 6, 7).Value = FceroB
FceroI = MSI / MSE
Cells(2 * a + 7, 7).Value = FceroI
Range(“A5”).Select
ActiveCell.FormulaR1C1 = “Nivel de Significancia”
alfa = CDbl(InputBox(“Introduzca el nivel de significación”)): Cells(5, 2) = alfa
Range(“A6”).Select
ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del primer factor”
Cells(6, 2).Value = FceroA
Range(“A7”).Select
ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento del segundo factor”
Cells(7, 2).Value = FceroB
Range(“A8”).Select
ActiveCell.FormulaR1C1 = “Valor Fo del tratamiento de la interacción”
Cells(8, 2).Value = FceroI

324
Colección
Validación de resultados y diseño de experimentos de simulación

Range("A9").Select
ActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento del primer factor"
v1 = a - 1: Cells(9, 2).Value = v1
Range("A10").Select
ActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento del segundo factor"
v2 = b - 1: Cells(10, 2).Value = v2
Columns("A:A").[Link]
Range("A11").Select
ActiveCell.FormulaR1C1 = "Grado de libertad del Tratamiento de la interación"
v3 = (a - 1) * (b - 1): Cells(11, 2).Value = v3
Range("A12").Select
ActiveCell.FormulaR1C1 = "Grado de libertad del error"
v4 = a * b * (n - 1): Cells(12, 2).Value = v4
Range("A13").Select
ActiveCell.FormulaR1C1 = "valor Crítico con interacion"
FalfaI = [Link](alfa / 2, v3, v4): Cells(13, 2).Value = FalfaI
Range("A14").Select
ActiveCell.FormulaR1C1 = "valor Crítico con primer factor"
FalfaA = [Link](alfa / 2, v1, v4): Cells(14, 2).Value = FalfaA
Range("A15").Select
ActiveCell.FormulaR1C1 = "valor Crítico con segundo factor"
FalfaB = [Link](alfa / 2, v2, v4): Cells(15, 2).Value = FalfaB
Range("C2").Select
End 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.

325
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 digital
Hipertexto Ltda.
Impreso por:
Xpress Estudio Gráfico y Digital S.A
Sapientia aedificavit sibi domum
Bogotá, D. C., Colombia

También podría gustarte