1 Introducción a la Simulación

1.1 Revisión de los conceptos de sistema y modelo.

Es importante comenzar comentando la definición de sistema, dado que es el objetivo del cursso de simulación de la licenciatura en Ingeniería Industrial comprender los diferentes sistemas que integran las actividades productivas, en este sentido, podemos definir sistema como:

El conjunto ordenado de normas y procedimientos, relacionados entre si, que regulan el funcionamiento de un conjunto de elementos.

Por ejemplo:

  • El sistema de leyes y normas qu regulan las relaciones comerciales entre las empresas.
  • El sistema de cobro de cualquier supermercado.
  • La red de computadoras de una compañía.
    Todos ellos son ejemplos de sistema, dado que cumplen la condición fundamental, estar interconectados.

1.2 Concepto de Simulación

Es una técnica numérica para conducir experimentos en una computadora digital. Estos experimentos comprenden ciertos tipos de relaciones matemáticas y lógicas, las cuales son necesarias para describir el comportamiento y la estructura de los sistemas complejos del mundo real a través de largos periodos de tiempo (Coss Bu, 2005).

Shannon nos ofrece una segunda definición, la cual dice que la simulación es el proceso de diseñar y desarrollar un modelo computarizado de un sistema o proceso y conducir experimentos con este modelo, con el propósito de entender el comportamiento del sistema o evaluar varias estrategias con las cuales se puede operar el sistema (Shannon, Robert E., 1975).
Como es de observarse, ambas definiciones tienen puntos en común, las dos hablan de la generación de modelos matemáticos cuyo objetivo es modelar el problema real mediante abstracciones, y el segundo punto en común es la utilización de programas de cómputo para el análisis y conducción de los experimentos.
La simulación es una técnica de gran utilidad en la actualidad, sin embargo, también es necesario conocer sus limitaciones, en este sentido, la principales ventajas de la simulación son:

  • Es útil cuando la resolución analítica del proceso a simular no es de fácil de determinar.
  • Cuando existen medios de resolver analíticamente el problema pero dicha resolución es complicada y costosa (o solo proporciona una solución aproximada).
  • Si se desea experimentar antes de que exista el sistema (pruebas para la construcción de un sistema).
  • Cuando es imposible experimentar sobre el sistema real por ser dicha experimentación destructiva.
  • En ocasiones en las que la experimentación sobre el sistema es posible pero no ética.
  • En sistemas que evolucionan muy lentamente en el tiempo (Fernández Casal, Rubén, 2022).

El principal inconveniente puede ser el tiempo de computación necesario, aunque gracias a la gran potencia de cálculo de los computadores actuales, se puede obtener rápidamente una solución aproximada en la mayor parte de los problemas susceptibles de ser modelizados.

1.3 Tipos de Simulación

1.3.1 Discreta (Determinista o Estocástica)

Es aquella simulación en la que se ven implicadas variables de tipo discreto, es decir, variables enteras, generalmente mayores o iguales que cero que están separadas en el tiempo, una característica importante de estas variables es que los eventos pueden ser contados.

1.3.2 Continua (Determinista o Estocástica)

Es aquella simulación en la que se ven implicadas variables de tipo continuo, es decir, variables que cambian continuamente en el tiempo, una característica importante de estas variables es que los eventos pueden ser medidas.

1.4 Descripción de ejemplos o casos prototipo

La simulación resulta de utilidad en multitud de contextos diferentes. Los principales campos de aplicación son:

  • Estadística:
    • Muestreo
    • Aproximación de Distribuciones de Probabilidad
    • Realización de contrastes e intervalos de confianza
    • Comparación de estimadores
    • Validación de teoría
    • Inferencia Bayesiana
  • Optimización: Algoritmos Genéticos, recocido simulado, Hill Climbing, etc.
  • Análisis numérico: Aproximación de integrales, resolución de ecuaciones, etc.
  • Computación: Diseño, verificación y validación de algoritmos.
  • Criptografía: Protocolos de comunicación segura
  • Física: Simulación de fenómenos naturales (Fernández Casal, Rubén, 2022).

1.4.1 De simulación discreta

Como ya se ha mencionado anteriormente, los eventos que implican variables aleatorias enteras y espaciadas en el tiempo se pueden englobar en los algoritmos de simulación discreta, para este caso, citemos algunos ejemplos:

  • El número de personas con síntomas de Covid-19 que llegan a un hospital a recibir atención médica.
  • El número de automóviles que llegan a un estacionamiento en el centro de una ciudad.
  • El número de personas que son atendidas por el cajero de un centro comercial.

Todas ellas tienen algo en común, todos son eventos que son susceptibles de contarse, dado que, por la naturaleza del fenómeno que los genera, deben ser considerados como números enteros para modelarse de manera adecuada.

1.4.2 De simulación continua

En el caso de que la variable aleatoria analizada pueda considerarse como un número decimal, racional, fraccionado, etc, caeremos en el caso de la simulación de eventos continuos. La principal característica de este tipo de eventos es que puede medirse, y por lo tanto, considerarse que pueden variar de manera constante en el tiempo, por ejemplo:

  • Simular el radio de una circunferencia con medidas dadas.
  • El flujo de efectivo que circula en un sistema financiero.
  • En el caso de fenómenos físicos, el efecto de la radiación solar sobre una región agrícola particular en presencia de factores climáticos adversos.

Todos ellos tienen la característica antes mencionada, sus unidades no están limitadas a eventos contables.

1.5 Catálogo de programas de cómputo comerciales de simulación.

Para establecer adecuadamente el listado de software comercial para simulación, les sugiero accesar a a la siguiente liga:

Ver enlace

1.6 Lectura de artículos sobre aplicaciones de la simulación.


2 Simulación de Variables Aleatorias

2.1 Producción de números con comportamiento estadístico aleatorio y uniforme en [0,1]

La modelización es una etapa presente en la mayor parte de los trabajos de investigación, especialmente en las ciencias experimentales. El modelo debería considerar las variables más relevantes para explicar el fenómeno en estudio y las principales relaciones entre ellas. La inferencia estadística proporciona herramientas para estimar los parámetros y contrastar la validez de un modelo estocástico a partir de los datos observados. La idea es emplear el modelo, asumiendo que es válido, para resolver el problema de interés. Si se puede obtener la solución de forma analítica, esta suele ser exacta (aunque en ocasiones solo se dispone de soluciones aproximadas, basadas en resultados asintóticos, o que dependen de suposiciones que pueden ser cuestionables) y a menudo la resolución también es rápida. Cuando la solución no se puede obtener de modo analítico (o si la aproximación disponible no es adecuada) se puede recurrir a la simulación. Nos centraremos en el caso de la simulación estocástica: las conclusiones se obtienen generando repetidamente simulaciones del modelo aleatorio. Muchas veces se emplea la denominación de método Monte Carlo como sinónimo de simulación estocástica, pero realmente se trata de métodos especializados que emplean simulación para resolver problemas que pueden no estar relacionados con un modelo estocástico de un sistema real. Para esto, es necesario considerar la utilización de números aleatorios, los cuales se caracterizan por que no existe ningún regla o plan que nos permita conocer sus valores. Normalmente, son obtenidos por medios físicos (loterías, ruletas, etc.) y se almacenan en tablas de dígitos aleatorios (Fernández Casal, Rubén, 2022).
El principal inconveniente para su aplicación en el campo de la Estadística (y en otros casos) es que los valores generados deberían ser independientes e idénticamente distribuidos con distribución conocida, algo que resulta difícil (o imposible) de garantizar. Siempre está presente la posible aparición de sesgos, principalmente debidos a fallos del sistema o interferencias. Por ejemplo, en el caso de la máquina RAND, fallos mecánicos en el sistema de grabación de los datos causaron problemas de aleatoriedad (Hacking, 1965, p. 129).

Debido a esta limitante, y con apoyo de de las computadoras, cada vez más potentes, a partir de 1960 empezó a resultar ser más eficiente generar valores mediante software en lugar de leerlos en tablas. Se distingue entre dos tipos de secuencias:

  • Números pseudo-aleatorios: simulan realizaciones de una variable aleatoria (con distribución uniforme (0,1)).
  • Números cuasi-aleatorios: secuencias deterministas con una distribución más uniforme en el rango considerado (se podría considerar que son una única generación de una variable aleatoria).

2.1.1 Uso del generador incluido en la hoja de cálculo

2.1.2 Teoría: métodos congruenciales

2.1.2.1 Números Pseudoaleatorios

La mayoría de los métodos de simulación se basan en la posibilidad de generar números pseudoaleatorios que imiten las propiedades de generaciones independientes de una distribución 𝒰(0, 1). El procedimiento habitual para obtiener estas secuencias es emplear un algoritmo recursivo denominado generador:

\[x_i=f(x_{i-1},x_{i-2},...,x_{i-k})\]

donde:

  • \(k\) es el orden del generador
  • \((x_0,x_1,...,x_{k-1})\) es la semilla (estado inicial)

La longitud del ciclo o periodo es la longitud de la secuencia antes de que vuelva a repetirse. Lo denotatremos por p.
Los números de la sucesión serán predecibles, conociendo el algoritmo y la semilla.
Sin embargo, si no se conociesen, no se debería poder distinguir una serie de números pseudo aleatorios de una sucesión de números verdaderamente aleatoria (utilizando recursos computacionales razonables). En caso contrario esta predecibilidad puede dar lugar a serios problemas.

Como regla general, por lo menos mientras está desarrollando un programa, interesa fijar la semilla de aleatorización.

  • Permite la reproducibilidad de los resultados.
  • Facilita la depuración del código.

Todo generador de números pseudoaleatorios mínimamente aceptable debe comportarse como si se tratase de una muestra genuina de datos independientes de una 𝒰(0, 1). Otras propiedades de interés serán:

  • Reproducibilidad a partir de la semilla
  • Periodo suficientemente largo
  • Eficiencia (rapidez y requerimientos de memoria)
  • Portabilidad
  • Generación de subsecuencias (computación en paralelo)

Existen diferentes métodos para generar números aleatorios, existen diferentes métodos, que si bien sus resultados no pueden ser considerados como números totalmente aleatorios, imitan de manera aceptable el comportamiento estadístico requerido, es decir, que sena números que se comporten bajo una distribución uniforme con valor mínimo de cero y máximo de uno. Los métodos que se abordarán en este estudio son:

  1. Algoritmo de Cuadrados Medios
  2. Algoritmo de Productos Medios
  3. Algoritmo de Multiplicador Constante
  4. Algoritmo lineal
  5. Algoritmo Congruencial Multiplicativo
  6. Algoritmo Congruencial Aditivo
  7. Algoritmos Congruenciales No Lineales

2.1.2.2 Algoritmo de Cuadrados Medios

Este algoritmo no congruencial fue propuesto en la década de los cuarenta del siglo XX por Von Neumann y Metrópolis, requiere un número entero detonador (llamado semilla) con D dígitos, el cual es elevado al cuadrado para seleccionar del resultado los D dígitos del centro. El procedimiento para obtener números pseudoaleatorios bajo este procedimiento es (García Dunna, Eduardo, García Reyes, Heriberto, & Cárdenas Barrón, Leopoldo E., 2013):

  1. Seleccionar una semilla (\(x_0\)) con D dígitos (\(D>3\)).
  2. Sea \(Y_0\)= resultado de elevar {\(x_0\)} al cuadrado; sea \(x_1\)= los D dígitos del centro y sea \(r_1\)=\(0.D\).
  3. Sea \(Y_i\)= resultado de elevar {\(x_i\)} al cuadrado; sea \(x_{i+1}\)= los D dígitos del centro y sea \(r_i\)=\(0.D\), para toda {\(i=1,2,...,n\)}.
  4. Repetir el paso c) hasta obtener los n números \(r_i\) deseados.

Nota: Si no es posible obtener los D dígitos del centro del número \(Y_i\), agregue ceros a la izquierda del número.

Una alternativa para seleccionar los D dígitos centrales de cada iteración es la propuesta por Fernández Casal y Cao (2022), misma que se representa con la siguiente expresión:

\[x_{i+1}=Z(\dfrac{x_i^2-Z[\dfrac{x_i^2}{10^{(2k-\frac{k}{2})}}]{10^{(2k-\frac{k}{2})}}}{10^{\frac{k}{2}}})\]

Donde la variable \(Z\) indica que el número pertenece al conjunto de los números enteros. Esta expresión es de importancia cuando es necesario desarrollar un algoritmo computacional para generar números pseudoaleatorios.

Una situación importante a resaltar acerca de este algoritmo es que generalmente es incapaz de generar una secuencia de \(r_i\) con periodo de vida \(n\) grande, es decir, su periodo \(p\) es corto, lo que ocasionará que en un número relativamente pequeño de repeticiones de la secuencia entre en periodicidad, es decir, que comience a repetir la secuencia de \(r_i\) números anteriormente generada.

2.1.2.3 Algoritmo de Productos Medios

La mecánica de generación de números pseudoaleatorios de este algoritmo no congruencial es similar a la del algoritmo de cuadrados medios. La diferencia entre ambos radica en que el algoritmo de productos medios requiere dos semillas, ambas con D dígitos; además, en lugar de elevarlas al cuadrado, las semillas se multiplican y del producto se seleccionan los D dígitos del centro, los cuales formarán el primer número pseudoaleatorio \(r=0.D\) dígitos. A continuación se presentan con más detalle los pasos del método para generar números con el algoritmo de producto medios:

  1. Seleccionar una semilla (\(x_0\)) con \(D\) dígitos (\(D>3\)).
  2. Seleccionar una semilla (\(x_1\)) con \(D\) dígitos (\(D>3\)).
  3. Sea \(Y_0={x_0}{x_1}\); sea \(x_2\) los \(D\) dígitos del centro, y sea \(r_1=0.D\) dígitos del centro.
  4. Sea \(Y_1={x_1}{x_{i+1}}\); sea \(x_2\) los \(D\) dígitos del centro, y sea \(r_{i+1}=0.D\) dígitos del centro para \(i=1,2,...,n\).
  5. Repetir el paso 4 hasta obtener los \(n\) números \(r_i\) deseados.

Para la selección de los dígitos centrales, podrá recurrirse también a la fórmula enunciada en el método anterior.

2.1.2.4 Algoritmo de Multiplicador Constante

Este algoritmo no congruencial es similar al algoritmo de productos medios. Los siguientes son los pasos necesarios para generar números pseudoaleatorios con el algoritmo de multiplicador constante:

  1. Seleccionar una semilla (\(x_0\)) con \(D\) dígitos (\(D>3\)).
  2. Seleccionar una constante \(a\) con \(D\) dígitos (\(D>3\)).
  3. Sea \(Y_0=a*{x_0}\), sea \(x_1\) los \(D\) dígitos del centro, y sea \(r_1=0.D\) dígitos del centro.
  4. Sea \(Y_i=a*{x_i}\); sea \({x_{i+1}}\) los \(D\) dígitos del centro, y sea \({r_i}=0.D\) dígitos del centro para toda \(i=1,2,...,n\).
  5. Repetir el inciso \(d\) hasta obtener los \(n\) números \(r_i\) deseados.

Para la selección de los dígitos centrales, podrá recurrirse también a la fórmula enunciada en el método de Cuadrados Medios.

2.1.2.5 Algoritmo lineal

Este algoritmo congruencial fue propuesto por D. H. Lehmer en 1951. Según Law y Kelton, no ha sido el más usado. El algoritmo congruencial lineal genera una secuencia de números enteros por medio de la siguiente ecuación recursiva:
\[{x_{i+1}={(a{x_i}+c)}mod(m)}~~i=0,1,2,...,n\] Donde \(x_0\) es la semilla, \(a\) es la constante multiplicativa, \(c\) es una constante aditiva y \(m\) es el módulo. \(x_0>0\),\(a>0\), \(c>0\) y \(m>0\) deben ser números enteros. La operación \(mod(m)\) significa multiplicar \(x_0\) por \(a\) para sumar \(c\) y dividir el resultado entre \(m\) para obtener el residuo \(x_{i+1}\). Es importante mencionar que la ecuación recursiva del algoritmo congruencial lineal genera una secuencia de números enteros \(S=\{0,1,2,3,...,{m-1}\}\), y que para obtener el número pseudoaleatorio en el intervalo \({\mathcal {U}}(0,1)\) se requiere la siguiente ecuación:
\[{r_i}={\frac{x_i}{m-1}}\]

2.1.2.6 Algoritmo congruencial multiplicativo

El algoritmo congruencial multiplicativo surge del algoritmo congruencial lineal cuando \(c=0\). Entonces la ecuación recursiva es:
\[x_{i+1}=(ax_i)mod(m)~i=0,1,2,3,...,n\] En comparación con el algoritmo congruencial lineal, la ventaja del algoritmo multiplicativo es que implica una operación menos a realizar. Los parámetros de arranque de este algoritmo son\(x_0\),\(a\) y \(m\), los cuales deben ser números enteros y mayores que cero. Para transformar los números \(x_i\) en el intervalo (0,1) se usa la expresión antes comentada, es decir:
\[r_{i}=\frac{x_i}{m-1}\] Las condiciones que deben de cumplir los parámetros para wue el algoritmo congruencial multiplicativo alcance su máximo periodo \(N\), son:
\[m=2^g\] \[a=3+8k~~o~~a=5+8k\] \[k=0,1,2,3,...\] \[x_0~debe~ser~un~número~par\] \[g~debe~ser~entero\] A partir de estas condiciones se logra un periodo de vida máximo de \(N=\frac{k}{4}=2^{g-2}\).

2.1.2.7 Algoritmo congruencial aditivo

Este algoritmo requiere una secuencia previa de \(n\) números enteros \({x_1},{x_2},{x_3},...,{x_n}\) para generar una nueva secuencia de números enteros que empieza en \({x_{n+1}},{x_{n+2}},{x_{n+3}},...\), su ecuación recursiva queda definida por:
\[x_i=(x_{i-1}+x_{i-n})mod(m)~~i=n+1,n+2,n+3,...,N\] Los números \(r_i\) pueden ser generados mediante la ecuación:
\[r_i=\frac{x_i}{m-1}\]

2.2 Simulación de otras variables aleatorias

La variabilidad de eventos y actividades se representa a través de funciones de densidad para fenómenos continuos, y mediante distribuciones de probabilidad para fenómenos de tipos discreto. La simulación de estos eventos o actividades se realiza con la ayuda de generación de variables aleatorias.
Los principales métodos para generar las variables aleatorias son:

  • Método de la transformada inversa
  • Método de convolución
  • Método de composición
  • Método de transformación directa
  • Método de aceptación y rechazo

2.2.1 Teoría: transformación inversa, composición, convolución y otros procedimientos.

2.2.1.1 Método de la transformada inversa

El método de la transformada inversa puede utilizarse para simular variables aleatorias continuas, lo cual se logra mediante la función acumulada \(F(x)\) y la generación de números pseudo aleatorios \(r_i\sim{\mathcal {U}}(0,1)\). La metodología se presenta mediante la siguiente secuencia:

  1. Definir la función de densidad \(F(x)\) que representa la variable a modelar.
  2. Calcular la función acumulada \(F(x)\)
  3. Despejar la variable aleatoria \(x\) y obtener la función inversa \(F(x)^{-1}\).
  4. Generar las variables aleatorias \(x\), sustituyendo valores con números pseudoaleatorios \(r_i\sim{\mathcal {U}}(0,1)\) en la función acumulada inversa.

El método de la transformada inversa también puede emplearse para simular variables aleatorias de tipo discreto, como en las distribuciones de Poisson, de Bernoulli, Binomial, Geométrica, discreta general, etc. La generación se lleva a cabo a través de la probabilidad acumulada \(P(x)\) y la generación de números pseudoaleatorios \(r_i\sim{\mathcal {U}}(0,1)\). El método consiste en:

  1. Calcular todos los valores de la distribución de probabilidad \(p(x)\) de la variable a modelar.
  2. Calcular todos los valores de la distribución acumulada \(P(x)\).
  3. Generar números pseudoaleatorios \(r_i\sim{\mathcal {U}}(0,1)\).
  4. Comparar con el valor de \(P(x)\) y determinar qué valor de \(x\) corresponde a \(P(x)\).

2.2.1.2 Método de convolución

Es importante comentar que el método visto anteriormente es útil cuando la función de densidad de la distribución a simular está dada, es decir la expresión:
\[F(x)=\int_{-\infty}^{\infty}{f(x)dx}\] está definida y genera como resultado una expresión matemática de la cual es posible despejar a la variable aleatoria \(x\).
Sin embargo, en muchos casos, esto no es posible, como en el caso de la distribución normal, cuya función de densidad esta dada por:
\[f(x)={\frac{1}{2{\pi}{\sigma^2}}}{e^{\frac{(x-\mu)^2}{2{\sigma^2}}}}\] Por la naturaleza de esta expresión, no es posible obtener una función matemática \(F(x)\) de la cual despejar a la variable aleatoria para implementar el método de la transformada inversa, aunque se pueden obtener aproximaciones mediante integración numérica, esta información no es útil para estimar a la variable aleatoria mediante el método antes mencionado.
Esta situación se extiende a otras distribuciones de como:

  • Distribución Erlang
  • Distribución Binomial
  • Distribución Poisson

Sin embargo, es posible generar estas distribuciones por medio de la suma de otras variables aleatorias, mediante la siguiente expresión:
\[Y=X_1+X_2+\dotsb+X_k\] Donde \(X_k\) es ña \(k-ésima\) variable aleatoria que, sumada, dará como resultado a la variable aleatoria deseada. Para esto mencionaremos algunos ejemplos, como la distribución K-Erlang, la cual puede ser generada mediante la suma de variables aleatorias exponeciales con media \(\frac{1}{k{\lambda}}\), de la siguiente manera:
\[Y=X_1+X_2+\dotsb+X_k\] \[Y=-{\frac{\ln(1-r_1)}{k{\lambda}}}-{\frac{\ln(1-r_2)}{k{\lambda}}}-\dotsb-{\frac{\ln(1-r_k)}{k{\lambda}}}\] Factorizando la expresión tenemos que:
\[Y=-{\frac{1}{k{\lambda}}}[{\ln(1-r_1)}+{\ln(1-r_2)}+\dotsb+\ln(1-r_k)]\] Aplicando propiedades de los logaritmos, finalmente escribimos que:
\[Y=-{\frac{1}{k{\lambda}}}{\ln{\prod_{i=1}^{k}{(1-r_k)}}}\]

Otro ejemplo de distribución de probabilidad que puede atenderse mediante esta metodología es la distribución Normal, aplicando la metodología propuesta se tiene:

2.2.2 Funciones inversas de hoja de cálculo, utilizables como simuladores.

2.3 Simulación de variables especiales: tablas.


3 Construcción de Modelos de Simulación

3.1 Ejemplo de una simulación de Montecarlo

3.1.1 Descripción y conceptualización de la simulación, establecer el problema, especificación del objetivo(s), definición de indicadores, simulación y determinación de la muestra.

3.1.2 Caracterización de cada indicador: agrupamiento de datos, gráficas y estimación de parámetros.

3.1.3 Aumentar el tamaño de la simulación y repetir

3.1.4 Establecer el efecto que sobre la variabilidad de un estimador tiene el tamaño de la simulación.

3.2 Definiciones: réplica, corrida, estado transitorio, estado estable, condiciones iniciales, reloj de la simulación.

3.3 Inicio del proyecto final de simulación.


4 Diseño de la Calidad de la Simulación

4.1 Lista de estimadores a obtener de la simulación


5 Simulación en Hoja de Cálculo


6 Programa de cómputo especial para Simulación

Bibliografía

Coss Bu. (2005). Simulación un enfoque práctico. México: Editorial Limusa.
Fernández Casal, Rubén. (2022). Simulación Estadística.
García Dunna, Eduardo, García Reyes, Heriberto, & Cárdenas Barrón, Leopoldo E. (2013). Simulación y Análisis de Sistemas con Promodel. México: Pearson.
Shannon, Robert E. (1975). La simulación de los sistemas. Nueva Jersey: Prentice Hall.