Simulacion Visual Basic Web
Simulacion Visual Basic Web
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)
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
6
Colección
Contenido
7
Índice de macros
10
Colección
Í ndice de macros
11
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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
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
19
Introducción a la simulación
1
Aplicaciones de la simulación
Para comenzar, se puede analizar una serie de situaciones en las cuales es apropiado
el uso de la simulación. Estas situaciones fueron puestas de manifiesto por Shannon
(1975). La simulación es conveniente cuando:
• No existe una formulación matemática analíticamente resoluble. Muchos sis-
temas reales no pueden ser modelados matemáticamente con las herramientas
actualmente disponibles; por ejemplo, la conducta de un cliente de un banco.
• Existe una formulación matemática, pero es difícil obtener una solución
analítica. Los modelos matemáticos utilizados para modelar un reactor
nuclear o una planta química son imposibles de resolver en forma analítica
sin realizar serias simplificaciones.
• No existe el sistema real. Es problema del ingeniero, que tiene que diseñar
un sistema nuevo; el diseño del sistema mejorará notablemente si se cuenta
con un modelo adecuado para realizar experimentos.
• Los experimentos son imposibles debido a impedimentos económicos, de
seguridad, de calidad o éticos. En este caso, el sistema real está disponible
para realizar experimentos, pero la dificultad de estos hace que se descarte
esta opción. Un ejemplo de esto es la imposibilidad de provocar fallas en un
avión real para evaluar la conducta del piloto; tampoco se puede variar el
valor de un impuesto para evaluar la reacción del mercado.
• El sistema evoluciona muy lentamente o muy rápidamente. Un ejemplo de
dinámica lenta es el problema de los científicos que estudian la evolución
del clima. Ellos deben predecir la conducta futura del clima, pero, dadas las
condiciones actuales, no pueden esperar a que un tornado arrase una ciudad
para luego dar el mensaje de alerta. Por el contrario, existen fenómenos
muy rápidos que deben ser simulados para poder observarse en detalle, por
ejemplo, una explosión.
22
Colección
I ntroducción a la simulación
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.
Estos datos deberán ser procesados adecuadamente para darles la forma exigida
por el modelo.
24
Colección
I ntroducción a la simulación
25
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
F(x) = P (X≤ x)
Se comprueba que:
a)
a) f(x) ≥ 0
b)
26
Colección
I ntroducción a la simulación
Gráficamente se tiene:
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
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.
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.
29
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
30
Colección
I ntroducción a la simulación
Sub Nombre_Procedimiento ()
Conjunto de instrucciones
Y termina con la instrucción
End Sub
31
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 1.1
32
Colección
I ntroducción a la simulación
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
34
Colección
I ntroducción a la simulación
Nota: el procedimiento Limpiarborrar se realizó mediante la ayuda del grabador de macros del Excel.
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
36
Colección
I ntroducción a la simulación
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
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
38
Colección
I ntroducción a la simulación
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
Si t ≥ 0
Si 5 ≤ x ≤ 10
41
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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.
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
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
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
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
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.
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.
Procedimiento 2.5. Macro para generar números aleatorios por el algoritmo de cuadrados medios
49
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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:
50
Colección
Generación de números aleatorios con aplicaciones de visual basic
51
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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:
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.
54
Colección
Generación de números aleatorios con aplicaciones de visual basic
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
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
57
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
a = constante multiplicativa = 8k +3
59
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
60
Colección
Generación de números aleatorios con aplicaciones de visual basic
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
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
Se crea una macro del mismo nombre del algoritmo, que haga lo siguiente:
62
Colección
Generación de números aleatorios con aplicaciones de visual basic
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
64
Colección
Generación de números aleatorios con aplicaciones de visual basic
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
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.
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:
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
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)))
68
Colección
Generación de números aleatorios con aplicaciones de visual basic
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.
ri = número aleatorio i
Nivel = nivel de significancia
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:
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:”)
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:
= estadístico de Chi-cuadrado.
73
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 2.3
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
α = 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
Ejemplo 2.4
77
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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:
Se prueba que R sigue una distribución normal con media igual a y varianza
b. Evaluar:
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α.
Para realizar una macro y hacer prueba de rachas, se parte de los mismos números
aleatorios en el mismo rango del ejemplo anterior.
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
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.
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).
83
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
X = [Link](R, Rango1,c)
86
Colección
Generación de variables aleatorias mediante la técnica de montecarlo
Ejemplo 3.1
87
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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
Ejemplo 3.2
92
Colección
Generación de variables aleatorias mediante la técnica de montecarlo
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:
93
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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
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
99
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 3.4
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
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
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:
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
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
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:
108
Colección
Generación de variables aleatorias mediante la técnica de montecarlo
Las tablas siguientes muestran las demandas diarias de automóviles, así como la
oferta diaria de automóviles factibles de subcontratación (outsourcing).
109
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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.
110
Colección
Generación de variables aleatorias mediante la técnica de montecarlo
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.
111
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
112
Generación de variables aleatorias continuas
4
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
Si 0 ≤ x ≤ 6
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.
114
Colección
Generación de variables aleatorias continuas
115
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Si x ≥ a
media =
varianza =
moda = a
la función acumulativa es:
; donde se tiene:
116
Colección
Generación de variables aleatorias continuas
; X≥0
La función acumulativa es:
X=
117
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 4.1
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
119
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Procedimiento 4.3. Macro para generar variables exponenciales con el valor mínimo
120
Colección
Generación de variables aleatorias continuas
121
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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:
122
Colección
Generación de variables aleatorias continuas
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
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
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
125
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
Ejemplo 4.4
127
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
DH = días hábiles
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
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
132
Colección
Generación de variables aleatorias continuas
F(x) = R =
F(x) = R =
Despejando la variable, se tiene:
133
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 4.5
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
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
Método de composición
137
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
138
Colección
Generación de variables aleatorias continuas
139
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
140
Colección
Generación de variables aleatorias continuas
141
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
X=
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.
142
Colección
Generación de variables aleatorias continuas
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
144
Colección
Generación de variables aleatorias continuas
145
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Intervalo entre a y b
Intervalo entre b y c
146
Colección
Generación de variables aleatorias continuas
Intervalo entre c y d
147
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Resumiendo, se tiene:
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
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
153
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Λ = 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
Λ = 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 / λ
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
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
159
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
α = 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
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
162
Colección
Generación de variables aleatorias continuas
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
164
Colección
Generación de variables aleatorias continuas
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:
Ejemplo 4.9
165
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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:
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,
169
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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.
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
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.
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
172
Colección
Generación de variables aleatorias continuas
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.
Ejemplo 4.12
173
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
174
Colección
Generación de variables aleatorias continuas
Generación de la variable t1
175
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Generación de la variable t2
176
Colección
Generación de variables aleatorias continuas
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
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
180
Colección
Generación de variables aleatorias continuas
Simule hasta 100 lotes para determinar la probabilidad de que el proveedor incumpla
con el pedido generando faltantes.
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:
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
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
Si t ≥ 5
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í:
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
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
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
188
Colección
Generación de variables aleatorias discretas
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).
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
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
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=
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
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
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.
198
Colección
Generación de variables aleatorias discretas
199
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
201
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Así, como los Xi siguen una distribución exponencial con parámetro λ, se simulan
valores sucesivos de Xi hasta que:
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:
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
La macro para generar variables aleatorias de tipo Poisson se hará mediante 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
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
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
Ejercicios
210
Colección
Generación de variables aleatorias discretas
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.
211
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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.
ta(i) = variable aleatoria del tiempo entre llegadas generada por una
distribución de probabilidad para el cliente i.
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:
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.
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
218
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica
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
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
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
229
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
230
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica
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
Para hacer la macro, se realizan previamente las cuadrículas con sus respectivos
datos, con el fin de evitar realizar procedimientos muy extensos.
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
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
235
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
240
Colección
Modelos de simulación de líneas de espera con distribución de probabilidad teórica
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
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:
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.
245
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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.
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.
Formulaciones básicas:
250
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
Ejemplo 7.1
251
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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
255
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
256
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
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
259
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
260
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
261
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
262
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
Ejemplo 7.3
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
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
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:
= demanda promedio
267
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Ejemplo 7.4
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
270
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
271
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
272
Colección
Modelos de simulación de problemas de in ventarios con distribución de probabilidad teórica
Ejercicios
273
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
274
Validación de resultados y diseño
de experimentos de simulación 8
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.
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.
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
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
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:
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
283
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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.
288
Colección
Validación de resultados y diseño de experimentos de simulación
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
289
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
291
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
292
Colección
Validación de resultados y diseño de experimentos de simulación
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
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
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
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
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.
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
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.
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
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
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
305
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
308
Colección
Validación de resultados y diseño de experimentos de simulación
309
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
Sean:
a = número de tratamientos del primer factor
n = número de réplicas
l = entero( n / 2 )
yijk = observación en el i tratamiento del primer factor, j tratamiento del segundo factor con k
réplicas
SSA = suma de los cuadrados totales de los tratamientos del primer factor
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
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
312
Colección
Validación de resultados y diseño de experimentos de simulación
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
315
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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
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
323
Colección
SIMULACIÓN EMPRESARIAL CON APLICACIONES DE VISUAL BASIC
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.
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