Estudio comparativo del paquete de simulación orientado a eventos discretos SimPy. Desarrollo de un manual de usuario con ejemplos resueltos
132
0
0
Texto completo
(2) “Nunca consideres el estudio como una obligación sino como una oportunidad para penetrar en el bello y maravilloso mundo del saber”. Albert Einstein.
(3) Dedicatoria Dedico este gran paso y logro en mi vida a:. Dios y la divinidad por estar velando de mi en todo momento y darme lo mas grande que todo ser humano posee ... “Vida”.. A mis padres José Briceño y Marı́a Marquez, por ser fuente ejemplar de constancia, dignidad y entusiasmo, brindandome ası́ su constante apoyo, cariño y amor durante toda mi carrera !Lo logramos¡.. A mis hermanos Karen, Richards y Katiuska, por creer y confiar en mi en todo momento, brindarme su apoyo, y compartir el siginificado de tener una familia para vencer todos los obstaculos. Espero que esta meta que he alcanzado los impulse para que logren las de ustedes, de la misma manera. “El que persevera vence”.. A mi Tı́a Carmen, que con su apoyo incondicional, me enseño que la verdadera lucha de la vida es luchando con tesón y tenacidad.. A mi novia Marbely, la mujer que llego a mi vida y despertó la alegria de mis sueños, que con su constante apoyo, ayuda y cariño brindado me impulso en los momentos que mas lo necesité, es por ello que este gran logro alcanzado también es tuyo. !Te amo mi NENA¡. .
(4) Agradecimientos A la ilustre Universidad de los Andes por ser una fuente de conocimientos y refugio a lo largo de mi carrera.. Al mi profesor tutor Sebastián Medina por su ayuda, apoyo, dedicación, esfuerzo y paciencia que lo caracteriza para el cumplimiento de esta meta.. A mis compadres Wolfgang y Elena por ser una fuente constante de apoyo y ayuda en los momentos mas difı́ciles de esta etapa en la vida, como lo es ser Estudiante.. A la Sra. Alba por abrirme las puertas de su casa y brindarme resguardo a lo largo de esta carrera.. A mis amigos Jesús y Juan Miguel por todas las alegrı́as, tristezas y logros vividos y que faltan por vivir.. Al Dr. Klauss Müller por toda la colaboración brindada durante el desarrollo de ésta investigación.. A todas aquellas personas que de una u otra manera contribuyeron con el objetivo de esta investigación. !MUCHAS GRACIAS!. .
(5) Resumen En el siguiente trabajo de investigación se presenta el desarrollo de un manual comentado y ejemplificado del paquete de Simulación Orientado a Eventos Discretos SimPy.. Se sugiere un enfoque para la implantación de un modelo en SimPy junto con una descripción de los comandos y sentencias que hacen posible una rápida y eficaz simulación.. Se presentan un conjunto de ejemplos, extraı́dos de casos tı́picos en los diferentes sistemas tales como sistemas de producción, manufactura, transporte logı́stica y otros. Se evidencian las capacidades y ventajas que ofrece SimPy a la hora de modelar estos sistemas.. Además se desarrollan los ejemplos en otros paquetes como Arena y Glider para mostrar los resultados de cada uno de éstos junto con los de SimPy.. Palabras Clave: SimPy, Python, modelo, simulación, simulación por eventos discretos.. .
(6) Indice General 1. Introducción y Planteamiento del Problema.. 1. 1.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1. 1.2. Antecedentes de la investigación. . . . . . . . . . . . . . . . . . . . . . . .. 2. 1.3. Planteamiento del Problema. . . . . . . . . . . . . . . . . . . . . . . . . .. 3. 1.4. Justificación y alcance de la investigación. . . . . . . . . . . . . . . . . . .. 4. 1.5. Objetivos de la Investigación. . . . . . . . . . . . . . . . . . . . . . . . . .. 5. 1.5.1. Objetivo General. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5. 1.5.2. Objetivos Especı́ficos. . . . . . . . . . . . . . . . . . . . . . . . .. 5. 1.6. Métodos y Herramientas. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6. 1.6.1. Simulación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6. 1.6.2. Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 7. 1.6.3. SimPy (Simulador en Pyhon). . . . . . . . . . . . . . . . . . . . .. 7. 1.6.4. Glider.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 7. 1.6.5. Arena. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 8. 1.7. Organización del Documento. . . . . . . . . . . . . . . . . . . . . . . . .. 8. 2. Marco Teórico.. 10. 2.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2. Conceptos Básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.1. Sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2. Modelos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14. .
(7) INDICE GENERAL. . 2.2.3. Tipos de modelos. . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3. Simulación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.1. Ventajas, desventajas y peligros de la Simulación. . . . . . . . . . . 19 2.3.2. Simulación de sistemas orientados a eventos discretos. . . . . . . . 26 2.3.3. Elementos de un Simulador de Eventos Discretos. . . . . . . . . . 26 2.3.4. Estrategias de Simulación de Sistemas Orientados a Eventos Discretos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.3.5. Simulación Orientada a Objetos. . . . . . . . . . . . . . . . . . . . 32 2.4. Softwares de Simulación. . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3. Modelado y Simulación en SimPy.. 35. 3.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2. SimPy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.2.1. Concepto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.2.2. Caracterı́sticas Generales. . . . . . . . . . . . . . . . . . . . . . . 36 3.3. Desarrollo de un programa de Simulación en SimPy. . . . . . . . . . . . . 38 3.3.1. Estructura básica de un programa en SimPy. . . . . . . . . . . . . . 38 3.3.2. Enfoque para la implantación de un Modelo en SimPy. . . . . . . . 42 3.3.3. Construyendo el primer modelo en SimPy. . . . . . . . . . . . . . 43 3.4. Proceso (Process). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4.1. Definición de un Proceso. . . . . . . . . . . . . . . . . . . . . . . 56 3.4.2. Comienzo y parada de un Proceso. . . . . . . . . . . . . . . . . . . 57 3.4.3. Avance del tiempo durante la ejecución de un Proceso. . . . . . . . 58 3.4.4. Ejemplo de la definición de un Proceso. . . . . . . . . . . . . . . . 58 3.5. Manejo de Sincronizaciones en SimPy. . . . . . . . . . . . . . . . . . . . . 59 3.5.1. Definiendo un SimEvent. . . . . . . . . . . . . . . . . . . . . . . . 59 3.5.2. Esperando en cola por un SimEvent. . . . . . . . . . . . . . . . . 60 3.5.3. Esperando una señal para un SimEvent. . . . . . . . . . . . . . . . 61 3.5.4. Ejemplo de Sincronización. . . . . . . . . . . . . . . . . . . . . . 61.
(8) INDICE GENERAL. . 3.5.5. Sincronización “wait until”, en espera de una condición. . . . . 63 3.6. Recurso.(Resources) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.6.1. Definición de un Recurso. . . . . . . . . . . . . . . . . . . . . . . 64 3.6.2. Solicitando un recurso. . . . . . . . . . . . . . . . . . . . . . . . . 65 3.6.3. Ejemplo de un recurso. . . . . . . . . . . . . . . . . . . . . . . . . 66 3.7. Nivel (Level). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.7.1. Definiendo un Nivel. . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.8. Almacenes (Store). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.8.1. Definiendo un Almacen. . . . . . . . . . . . . . . . . . . . . . . . 70 3.9. Registrando los resultados de la simulación. . . . . . . . . . . . . . . . . . 71 3.9.1. Definiendo un objeto de tipo Tally y Monitor. . . . . . . . . . . . . 71 3.9.2. Observando los datos. . . . . . . . . . . . . . . . . . . . . . . . . 72 3.9.3. Sumario de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.10. Graficando los Resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4. Ejemplos de muestra.. 76. 4.1. Modelos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.1.1. Modelo de una Panaderı́a. . . . . . . . . . . . . . . . . . . . . . . 77 4.1.2. Modelo de Máquinas Inestable. . . . . . . . . . . . . . . . . . . . 88 4.1.3. Modelo de un Puerto de Traslado de Carbón. . . . . . . . . . . . . 94 4.1.4. Modelo de Grúas en un Puerto. . . . . . . . . . . . . . . . . . . . . 102 4.1.5. Modelo de un Recurso Limitado. . . . . . . . . . . . . . . . . . . . 110 5. Conclusiones y Recomendaciones.. 114. 5.1. Conclusiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.2. Recomendaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Bibliografı́a. 116.
(9) INDICE GENERAL. A. Instalación del paquete SimPy en las plataformas Windows y GNU/Linux.. 119. A.1. Requisitos del Sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 A.2. En Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 A.3. En GNU/Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.
(10) Indice de Tablas 2.1. Aplicaciones de la Simulación . . . . . . . . . . . . . . . . . . . . . . . . . . 22. .
(11) Indice de Figuras 2.1. Proceso de manufactura como sistema. . . . . . . . . . . . . . . . . . . . . . . 12 2.2. Correspondencia entre un sistema y modelo. . . . . . . . . . . . . . . . . . . . 14 2.3. Formas de estudiar un Sistema. . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4. Etapas en un estudio de Simulación. . . . . . . . . . . . . . . . . . . . . . . . 25 2.5. Flujo de control entre los elementos de un simulador orientado a eventos discretos. . 28 3.1. Gráfico Generado por el módulo SimPlot. . . . . . . . . . . . . . . . . . . . . . 75 4.1. Grafico para el numero de Baguetts (SimPy). . . . . . . . . . . . . . . . . . . . 81 4.2. Diagrama del Modelo Panaderı́a en Arena. . . . . . . . . . . . . . . . . . . . . 82 4.3. Grafico para el numero de Baguetts (Arena). . . . . . . . . . . . . . . . . . . . 83 4.4. Gráfico para el numero de Baguetts (Glider). . . . . . . . . . . . . . . . . . . . 87 4.5. Diagrama del Modelo de Maquina Inestable en Arena. . . . . . . . . . . . . . . . 91 4.6. Diagrama del Modelo del Puerto de Carbon en Arena. . . . . . . . . . . . . . . . 98 4.7. Diagrama del Modelo de Grúas en Arena. . . . . . . . . . . . . . . . . . . . . . 106 4.8. Diagrama del Modelo de un Recurso Limitado. . . . . . . . . . . . . . . . . . . 113 A.1. Acceso a la carpeta SimPy-1.7.1 en modo MS-DOS a través de un terminal. . . . . . 120 A.2. Ejecución del comando de instalación de SimPy, a través de la lı́nea de comando MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121. .
(12) Capı́tulo 1 Introducción y Planteamiento del Problema.. El siguiente capı́tulo tiene como finalidad realizar una exposición de los elementos más importantes que componen la presente investigación. Entre estos aspectos se resaltan: los antecedentes que motivaron la realización del mismo, el problema planteado, la justificación e importancia, el objetivo general y los objetivos especı́ficos, la metodologı́a y las herramientas a usar.. 1.1.. Introducción.. La simulación desde sus inicios ha perseguido predecir los resultados, a través de modelos, de ciertos procesos antes de ser llevados a cabo por el hombre, para ası́ comprobar hipótesis o mejoras al sistema que se estudia y posibles soluciones (óptimas) para el mejor rendimiento de la problemática planteada. Es por ello que el hombre utiliza como una de las herramientas principales hoy en dı́a el computador, para desarrollar simulaciones de los modelos de sistemas en los diferentes campos con ciertos niveles de tolerancia y tiem-. 1.
(13) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 2. pos de corrida o simulación mı́nimos; obteniendo de esta manera resultados que permiten entender, explicar o mejorar la dinámica del sistema en cuanto al interés del estudio. Hoy en dı́a existe diversidad de herramientas computacionales, que simulan los comportamientos de los sistemas de acuerdo al modelo y al espacio donde éste se desenvuelve; éstos pueden ser discretos o continuos y orientados a eventos discretos. Uno de los mayores inconvenientes en el uso de estas herramientas es el hecho de que son software privado, que se usa bajo licencia comercial y algunas de estas poseen un elevado costo económico, lo que imposibilita la capacidad de hacer uso extensivo de estas herramientas. Por tales razones ya existen, dentro de la comunidad “Open Source” herramientas computacionales para el Modelado y Simulación especı́ficamente en el campo de la Simulación por Eventos Discretos, tal es el caso del simulador SimPy, el cual es un paquete de simulación por eventos discretos desarrollado en el lenguaje de alto nivel Python que es de código abierto y con una amplia variedad de caracterı́sticas de lenguajes como C++ o Java, gratuito y presenta muchas ventajas respecto a otros softwares.. 1.2.. Antecedentes de la investigación.. El desarrollo de manuales en español para los softwares que se usan en la Escuela de Sistemas tiene un antecedente en el trabajo de pasantı́as “Desarrollo de un manual de la herramienta NS Network Simulator”. (Profesora Tania Jiménez, Asesora). NS es un simulador discreto para la implementación de redes, fue desarrollado en Berkley UC; escrito en C++ y OTcl. Su principal área de aplicación son las redes de área local y amplia del tipo IP. La caracterı́stica mas resaltante de esta herramienta es el establecimiento de protocolos de redes en ejecución tales como TCP y UDP y comportamiento de la fuente del tráfico tales como FTP (File Tranfer Protocol) y CBR (Constant Bit Rate). La escuela de Ingenierı́a de Sistemas incluye un curso en Simulación de Sistemas, es.
(14) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 3. por ello que ha venido trabajando con diversos software de modelado y simulación; algunos de ellos comerciales, es decir son software privados con un elevado costo, tal es el caso de Arena; en otros casos son gratuitos, aunque no de fuente abierta, como Glider. Recientemente hay un gran interés por el uso de herramientas libres en Venezuela, debido a un decreto presidencial el cual expone el uso de Software Libre para entes públicos. Por tales razones se plantea la idea de estudiar un software de simulación de eventos discretos como SimPy, ya que éste conjuga los hechos de ser gratuito y de fuente abierta. Actualmente hay un desarrollo muy importante del lenguaje Python en la comunidad internacional de Open Source. Tanto ası́, que se habla de que éste es un posible reemplazo de Java, dado que éste último, a pesar de ser gratuito, no es de fuente abierta. Este aumento en el uso del lenguaje Python influye en el desarrollo de un sinnúmero de herramientas para usos especı́ficos escritas haciendo uso de él.. 1.3.. Planteamiento del Problema.. En la estrategia de Modelado y Simulación debe prestarse especial atención en la selección de las herramientas computacionales en cuanto a capacidad, eficiencia y rendimiento económico. Actualmente existen un sinnúmero de lenguajes y/o paquetes para la Simulación por Eventos Discretos que ofrecen al modelador grandes capacidades para representar al sistema en estudio, tal es el caso de Arena, Witness, GPSS/H por mencionar algunos. A pesar del conjunto de caracterı́sticas y bondades que puedan presentar éstos paquetes, se requiere de grandes inversiones de dinero para su adquisición. Cabe destacar que para la elección de un Software de Simulación en el campo de la Simulación por Eventos Discretos depende de múltiples factores: funcionalidad, facilidad, eficiencia y portabilidad, entre otros. Es por tal razón que en el presente proyecto de investigación se pretende dar a conocer el paquete de Simulación por Eventos Discretos SimPy, el.
(15) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 4. cual reúne en cierta manera las caracterı́sticas antes expuestas, además el hecho de ser gratuito y de fuente abierta (Open Source). Concretamente, con la realización de este proyecto de investigación se pretende desarrollar un manual en español comentado y ejemplificado de SimPy, para dar a conocer las potencialidades y bondades del simulador, esto debido a la inexistencia de documentación en español de esta herramienta.. 1.4.. Justificación y alcance de la investigación.. El gran auge que ha venido presentando los paquetes bajo la filosofı́a de Software Libre es debido a que éstos presentan caracterı́sticas de ser gratuitos, poderosos y eficientes. Cada dı́a se desarrollan herramientas bajo estas premisas en los diferentes campos de aplicación empresarial, uno de estos campos es la Simulación por Eventos Discretos. A pesar que ya existen herramientas de Simulación por Eventos Discretos que se aplican a diferentes áreas, tal es el caso de SimPy, éste aparte de presentar caracterı́sticas de ser Software Libre y Open Source, no cuenta con una buena documentación en español. Por tal razón, es evidente la importancia de este proyecto de investigación como respuesta a la necesidad de una herramienta computacional para la Simulación por Eventos Discretos que cumpla con las caracterı́sticas antes mencionadas. El desarrollo del manual en español de SimPy permitirá mostrar el uso y aplicación de éste paquete en el modelado y simulación de diferentes sistemas; ası́ el usuario contará con un programa que presenta las siguientes libertades:. Usarlo para cualquier propósito dentro del campo de la Simulación por Eventos Discretos, es decir, como instrumento para el modelado de sistemas. Dar soluciones a los problemas de Simulación Orientados a Eventos Discretos de manera más rápida y sencilla..
(16) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 5. Posibilidad de adaptar el programa a sus necesidades ya que, el usuario contará con el código fuente. Mejorar el programa y hacer públicas las mejoras, de forma que toda la sociedad se beneficie.. Todas las razones expuestas previamente justifican y dan importancia al desarrollo de la presente investigación.. 1.5.. Objetivos de la Investigación.. 1.5.1.. Objetivo General.. Desarrollar un manual de usuario en español comentado y ejemplificado, donde se pueda reflejar la capacidad del simulador con ejemplos bien probados y corridos.. 1.5.2.. Objetivos Especı́ficos.. Obtener conocimientos del lenguaje de programación Python. Revisar los conceptos de simulación orientada a eventos discretos. Aprender a utilizar el lenguaje de simulación SimPy. Aprender y/o repasar el uso de los paquetes de simulación que se usan en la carrera de Ingenierı́a de Sistemas. Desarrollar un conjunto de ejemplos de muestra, desde casos de sistemas sencillos hasta problemas complejos, que serán resueltos usando simulación en SimPy..
(17) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 6. Desarrollar los modelos en SimPy de los ejemplos generados en el punto anterior. Ejecutar la simulación en SimPy de los modelos del punto anterior y mostrar los resultados obtenidos. Intentar simular en otros paquetes los modelos desarrollados en SimPy Escribir el manual de usuario de SimPy en español.. 1.6.. Métodos y Herramientas.. 1.6.1.. Simulación.. Simular implica crear un modelo que aproxima cierto aspecto de un sistema del mundo real y que puede ser usado para generar historias artificiales del sistema, de forma tal que nos permite predecir cierto aspecto del comportamiento del sistema. En particular, usaremos computadores para imitar comportamientos de los sistemas evaluando numéricamente un modelo del mismo. Estas evaluaciones numéricas son las que nos permiten generar los comportamientos artificiales que no son más que experimentos. Para llevar a cabo estas simulaciones partimos de un modelo, el cual nos es más que una representación matemática del comportamiento de un objeto (ente) en un determinado sistema, realizando para ello abstracciones de las caracterı́sticas más significativas del objeto o sistema en estudio..
(18) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 1.6.2.. 7. Python.. Python [9]1 fue desarrollado hace diez años por Guido van Rossum, su sintaxis simple se deriva en gran parte del ABC, un lenguaje desarrollado en los 1980s para la enseñanza. Presenta una variedad amplia de caracterı́sticas de lenguaje de programa como C++, Java, Modula-3 y Scheme. El cómodo uso del lenguaje se deriva del hecho que es un lenguaje interpretado, lo que ahorra un tiempo considerable en el desarrollo del programa, pues no es necesario compilar ni enlazar. El uso del intérprete es como invocar una maquina virtual, que facilita experimentar con caracterı́sticas del lenguaje, escribir programas desechables o probar funciones durante el desarrollo del mismo.. 1.6.3.. SimPy (Simulador en Pyhon).. SimPy [5] es un simulador orientado a objetos para procesos basados en eventos discretos, soportado en el lenguaje Python. SimPy está basado en las ideas de los lenguajes de simulación como Simula y Simscript pero utilizando el estándar del lenguaje Python de allı́ la etimologı́a de su nombre (SimPy: Simulador en Python). El soporte del simulador está basado en la implantación de corutinas utilizando la capacidad generadora de Python introducida por versiones superiores a la 2.2.. 1.6.4.. Glider.. Glider [24] es un lenguaje de Simulación para Sistemas discretos y continuos. Los sistemas a simular se representan por medio de una red, donde cada nodo representa a un subsistema y se comunican entre si a través del paso de mensajes ó por acción de métodos sobre variables compartidas. 1. Tomado de Wikipedia. La encicloedia libre http://es.wikipedia.org/wiki/Python.
(19) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 1.6.5.. 8. Arena.. Arena R [28]2 es un paquete de simulación gráfico para Sistemas discretos y continuos desarrollado por la empresa norteamericana Rockwell Automation, Inc. El sistema es representado por diagramas de flujo y a través del diseño orientado a objetos para establecer el modelo. Entre las aplicaciones que se pueden desarrollar con esta herramienta se encuentran procesos de fabricación, logı́stica almacenes y transporte.. 1.7.. Organización del Documento.. El manuscrito del proyecto se desglosa en cinco (5) capı́tulos, los cuales se describen a continuación: Capitulo 1. Introducción y Planteamiento del Problema. Donde se expone una breve introducción y los antecedentes del proyecto desarrollado, el planteamiento del problema, ası́ como los objetivos tanto generales y especı́ficos que se persiguen, su justificación y metodologı́a que se usó en el desarrollo del proyecto. Capı́tulo 2. Marco Teórico. En él se desarrollan los basamentos teóricos de los cuales se nutre el proyecto; conceptos básicos de sistema y los elementos que lo forman, modelos y tipos de modelos. Por otro lado, se encuentra la Simulación, sus ventajas, desventajas e inconvenientes; la simulación de sistemas orientados a eventos discretos, (que en nuestro caso es la base de este proyecto de investigación por ser el enfoque de estudio) las etapas, ası́ como también el uso de los distintos lenguajes y paquetes de simulación. Capitulo 3. Modelado y Simulación en SimPy. Capı́tulo donde se describe paso a paso, la metodologı́a en que se encuentra basado éste paquete de simulación a eventos 2. Tomado de la versión en ingles de http://www.arenasimulation.com.
(20) CAPÍTULO 1. INTRODUCCIÓN Y PLANTEAMIENTO DEL PROBLEMA.. 9. discretos con un enfoque basado en los métodos descritos en el capı́tulo anterior. Ası́ como código de ejemplo para reflejar las secciones antes descritas. Capı́tulo 4. Aplicación. En este capı́tulo se mostrará un conjunto de modelos desde casos sencillos, pasando por los de nivel intermedio, para finalmente pasar a los más complejos. Éstos se desarrollarán uno a uno, empleando para ello en primera instancia el paquete SimPy, luego Arena de Rockwell Software y finalmente Glider de la ULA (freware). Capı́tulo 5. Conclusiones y Recomendaciones. Se detallarán las conclusiones arrojadas por el proyecto y las recomendaciones que se plantean para ampliar esta investigación en estudios posteriores..
(21) Capı́tulo 2 Marco Teórico.. Este capitulo tiene la finalidad de sentar las bases teóricas fundamentales para el desarrollo de la presente investigación y el alcance de los objetivos planteados. Es por ello que se hace necesario abordar las siguientes áreas de estudio: Conceptos relacionados con sistemas, modelos y tipos de modelos, simulación junto con sus diferentes enfoques; ası́ como también información del software utilizado para llevar a cabo las simulaciones. A su vez esta sección pretende informar al lector sobre algunos conceptos que no le sean familiares, y colaborar en que la información presentada sea comprensible.. 2.1.. Introducción.. En la actualidad, la necesidad de encontrar soluciones al sinnúmero de problemas que se plantean en las diferentes empresas y corporaciones, es lo que ha generado que la Simulación se haya masificado. Para estas empresas, no es viable, comenzar con la implantación de un proyecto determinado sin antes realizar una serie de hipótesis a través de pruebas y experimentos, las cuales planteen buscar la rentabilidad económica del mismo. Es por ello, que se ven en la necesidad de plantear un modelo, el cual represente de la manera mas 10.
(22) CAPÍTULO 2. MARCO TEÓRICO.. 11. explicita posible, las caracterı́sticas relevantes del sistema a estudiar. Para llevar a cabo estas pruebas con el modelo, se valen del soporte de una computadora. Estos experimentos son los que permitirán realizar un análisis exhaustivo de las variables que juegan un papel determinante dentro del sistema. Los análisis más empleados son los de sensibilidad y los basados en técnicas estadı́sticas y/o probabilı́sticas; ya que, la introducción de factores aleatorios al modelo es lo que permitirá ajustarlo a la realidad.. 2.2.. Conceptos Básicos.. 2.2.1.. Sistema.. La palabra Sistema es muy empleada en diferentes contextos, es por ello que se hace difı́cil dar una definición concreta; pero en el área de Investigación de Operaciones algunos autores la definen como:. “Conjunto de cosas que ordenadamente relacionadas entre si contribuyen a determinado objeto” [4]. Schimidt y Taylor en [7] “es una colección de entidades como por ejemplo personas o máquinas, que actúan e interaccionan juntos entre si, hacia el cumplimiento de un objetivo”. Combinación de elementos o componentes interrelacionados y relacionados con el entorno, que actúan juntos para lograr un cierto objetivo [2].. Es de hacer notar en estas definiciones lo siguiente, para que un sistema este concebido necesariamente tiene que estar formado por varias partes (objetos); los cuales, a su vez,.
(23) CAPÍTULO 2. MARCO TEÓRICO.. 12. deben estar interconectados por varias relaciones. Hoy dı́a existen una diversidad de sistemas tan complejos, que se hace un tanto difı́cil establecer relaciones entre sus partes, es por ello que conviene realizar una descomposición en partes más pequeñas (subsistemas), permitiendo simplificar su estudio. Ejemplo de esto son los sistemas de manufactura compuestos de varios departamentos, sistemas de transporte, logı́sticos, de gestión de recursos y otros [4] (ver figura 2.1)1 .. Figura 2.1: Proceso de manufactura como sistema. Debido a que las propiedades más importantes de un sistema, involucran conocimiento de sus partes, se hace necesario el conocimiento de algunos conceptos como entidad, entidades permanentes, atributos, relación, recursos, estado y evento, los cuales se detallan a continuación:. Entidad: Es algo (objeto), que tiene realidad fı́sica u objetiva y que posee un conjunto de caracterı́sticas (atributos) distinguibles de los demás [3], por ejemplo: productos, departamentos, piezas, clientes moviéndose en un restaurant, empleados, etc. 1. Tomado de Barcelo J. (1996) p.20.
(24) CAPÍTULO 2. MARCO TEÓRICO.. 13. Entidades temporales: Son todos aquellos objetos que se procesan en el sistema [8], como por ejemplo las piezas en un sistema de manufactura, los clientes en un banco. Atributos: Conjunto de propiedades que caracterizan a las entidades que forman parte del sistema [4], por ejemplo: cantidades de pedidos, numero de maquinas de un tipo dado, color, prioridad, etc. Relación: Es la manera en que, las propiedades de una o mas entidades dependen entre sı́; causando de esta manera que, un cambio en la propiedad de una entidad ocasiona un cambio en una propiedad de otra entidad [1]; ejemplo: En la clase entidad: departamento de producción en el sistema manufactura, sus cambios pueden afectar a los departamentos de compra y ensamblaje. Recursos o entidades permanentes: Como su nombre lo indica son una clase de entidades estáticas, las cuales son los medios para ejecutar las actividades. Éstos definen quién o qué ejecuta la actividad. Los recursos presentan caracterı́sticas como capacidad, velocidad, averı́as y reparaciones [8]. Ejemplo de recursos son las maquinas en un sistema de manufactura, los mecanismos de transporte o los operadores. Estado: Son los valores y/o condiciones de los atributos de las entidades en un instante dado, después de suscitarse un evento; de forma que se puede saber si una acción se puede ejecutar o si se puede elegir entre varias [4]. Ejemplo: el numero de clientes en una cola, los procesos de manufactura en cada departamento de una factorı́a, etc. Evento: Son los diferentes hechos que ocurren en instantes de tiempo, para dar lugar a cambios en el estado del sistema y ası́ identificar qué es lo que origina el cambio y cuando se origina [17]. Ejemplo: Una llegada, una salida de una entidad..
(25) CAPÍTULO 2. MARCO TEÓRICO.. 2.2.2.. 14. Modelos.. El uso de modelos no es algo nuevo. Los estudios piloto que requieren las grandes empresas hoy dı́a, pueden llevarse a cabo gracias a la técnica de modelización, es decir, la construcción de modelos donde se realizan estos análisis con el fin de obtener resultados, conclusiones y/o recomendaciones aplicables al sistema real. Dicho lo anterior, un modelo es una interpretación explı́cita de lo que se entiende de una situación la cual puede expresarse con sı́mbolos matemáticos, grafismos (letras, signos) ó fonemas; pero en esencia es una representación del sistema con sus partes y relaciones para un determinado fin [3]. Dado que uno de los requerimientos básicos de un modelo es que éste debe describir al sistema para realizar predicciones sobre el comportamiento del mismo, es decir las caracterı́sticas del modelo deben corresponder a caracterı́sticas del sistema bajo estudio y operar en un rango de trabajo especı́fico [4], explicación que puede representarse a través de la figura 2.2.. Figura 2.2: Correspondencia entre un sistema y modelo..
(26) CAPÍTULO 2. MARCO TEÓRICO.. 2.2.3.. 15. Tipos de modelos.. Debido a que el campo del modelado es muy amplio, y dado que en este proyecto no se abordará en profundidad este punto, solo se hará una breve descripción (caracterı́sticas más relevantes) de los diferentes tipos de modelos. De acuerdo a la realidad que representen y la perspectiva que le dé el analista, los modelos se clasifican en [1]:. Modelos de Tiempo Continuo: Se representan cuando las variables de estado están definidas para instantes de tiempo determinado [1], muy utilizados en la actualidad por ejemplo, para denotar el número de trabajos en cola en espera por recurso. Modelos de Tiempo Discreto: Empleados cuando el estado del sistema se define solo para particulares instantes de tiempo especı́ficos [1], ejemplo el número de clientes que visitan el banco un dı́a de semana determinado. Modelos de Estado Continuo o de Eventos Continuos: Representan sistemas cuyos cambios de estado son graduales [1]. Las variables intervinientes son continuas. Modelos representados por ecuaciones diferenciales donde una de las variables de estado representa la cantidad de corriente en una bobina. Modelos de Estado Discreto o de Eventos Discretos: En estos modelos, las variables de estado que describen al sistema cambian de valor en instantes no periódicos del tiempo. Estos instantes de tiempo se corresponde con la ocurrencia de un evento el cual obedece a un patrón aleatorio [8]. Por ejemplo el modelo de cola en un banco, al cual llegan clientes de modo aleatorio y en el cual se desea prever el tiempo de espera de los clientes en las colas en función del número de cajeros disponibles. Modelos Determinı́sticos: Son aquellos donde la solución para determinadas condiciones es única y siempre la misma [1]. Ejemplo de éste tipo, son los modelos de optimización lineal donde la solución esta sujeta por el conjunto de ecuaciones y/o inecuaciones que se suministran como restricciones..
(27) CAPÍTULO 2. MARCO TEÓRICO.. 16. Modelos Probabilı́sticos o Aleatorios: Son aquellos donde las caracterı́sticas del sistema se representan por variables aleatorias [1]. Por ejemplo los simuladores de colas, donde las llegadas a éstas se produce a través de una función de distribución de probabilidades . Modelos Estáticos: Utilizados para representar sistemas cuyo estado es invariable a través del tiempo [1]. Por ejemplo la cantidad de materia en energı́a E = m ∗ c2 . Modelos Dinámicos: Contrario a los anteriores, en éstos las variables de salida si varı́an en el tiempo [1], muy empleados en el área de control para modelar la dinámica de un sistema fı́sico a través de ecuaciones diferenciales dependientes del tiempo. Modelos Lineales: Son aquellos cuya salida del sistema se representa por una lı́nea recta [1], ejemplo de éstos son los modelos de regresión lineal y = a ∗ x + b. Modelos No Lineales: Empleados para representar sistemas en donde las salidas no sean lineales [1], por ejemplo la solución en el tiempo de una ecuación diferencial de segundo orden. Modelos Abiertos: Si los datos de entrada son externos al modelo e independientes de él [1], ejemplo los sistema de cola de un banco donde los arribos son externos al modelo. Modelos Cerrados: Éstos no disponen de una entrada del exterior [1], ejemplo de ellos son los modelos de control en su estado natural (No hay entrada presente). Modelos Estables: Son aquellos donde la variable de salida converge a un valor (independiente del tiempo) [1], ejemplo cuando el intervalo de llegada de clientes es mayor que el tiempo de servicio. Modelos Inestables: Cuando el comportamiento del sistema cambia constantemente [1], al contrario del anterior no hay tendencia a un valor estable, ejemplo de éstos.
(28) CAPÍTULO 2. MARCO TEÓRICO.. 17. modelos son los sistemas de colas en un banco, donde el intervalo entre llegadas es menor que el tiempo de servicio.. Es de hacer notar que algunas veces los modelos y los sistemas no pertenecen al mismo tipo, ejemplo de ello es el estudio del fluido por una cañerı́a (dinámica de fluido) el cual corresponde a un sistema continuo. Sin embargo si el fluido se discretiza dividiéndolo en gotas y se construye un modelo discreto por el cual circulan gotas de agua (una, dos, diez, cien, mil) se está representando un sistema continuo por un modelo discreto [3].. 2.3.. Simulación.. “Simular” significa imitar el comportamiento de una maquina, una persona o un fenómeno. Generalmente son simuladas las conductas de un sistema fı́sico con el fin de estudiarlo. Para efectuar ésto, es necesario crear una representación del sistema, un modelo. Es decir, hacer algunas suposiciones, más o menos precisas, acerca de su operación. Este conjunto de postulados, con frecuencia toman una forma matemática o de relaciones lógicas, y constituyen el modelo conceptual. Este modelo servirá para entender mejor el sistema, y posiblemente estudiar el impacto de ciertas modificaciones, lo cual es, básicamente, la razón del inicio de la simulación. En otras palabras, la simulación consiste en una evaluación numérica del modelo a través de un computador, durante un perı́odo determinado de tiempo, tomando medidas y experiencias durante este tiempo para hacer posible la descripción de su comportamiento [7]. Estas definiciones de simulación permiten plantear suposiciones del sistema bajo estudio en cualquiera de sus etapas, para ası́ evaluar distintos escenarios, encontrar repuestas a preguntas del tipo “qué pasara sı́” y ası́ entender o mejorar el sistema..
(29) CAPÍTULO 2. MARCO TEÓRICO.. 18. Uno de los objetivos de la simulación es realizar ensayos de cambios en el sistema probándolos en el modelo, con el fin de elegir la mejor alternativa, y ası́ enfrentar mejor a una realidad que varı́a dı́a a dı́a [4]. Con respecto al sistema, modelo y simulación, Law y Kelton (2000) [7] señalan:. “luego de definir el sistema de interés, se hacen experimentos con el sistema, sı́ implica mucho costo, se diseña un modelo y se experimenta con él para obtener un modelo fı́sico ó matemático; y en caso de éste último, emplear las técnicas analı́ticas y/o de simulación”.. tal y como se esquematiza en la Figura 2.3 [7]2. Figura 2.3: Formas de estudiar un Sistema. 2. Tomado de (Law & Kelton, p. 4).
(30) CAPÍTULO 2. MARCO TEÓRICO.. 2.3.1.. 19. Ventajas, desventajas y peligros de la Simulación.. A continuación se presentará de manera esquemática las ventajas, desventajas y peligros de la simulación según posturas de ciertos autores [1,2,3,4]:. Ventajas. 1. Con el modelo de Simulación construı́do éste se puede utilizar repetidamente para analizar cambios en el diseño, polı́ticas y diversos escenarios de operación con el sistema. 2. Se identifica en un sistema complejo aquellas áreas con problema (“cuellos de botella”). 3. Se adquiere una rápida experiencia a muy bajo costo y sin riesgos. No se compromete la confiabilidad del sistema en los ensayos (las aglomeraciones, las largas demoras son simuladas y no reales). 4. Generalmente los modelos de Simulación son más fáciles de aplicar que los métodos analı́ticos. 5. No es necesario interrumpir las operaciones de la compañı́a. 6. Permite estudiar el sistema por perı́odos muy largos en un tiempo comprimido ó alternativamente un trabajo minucioso, analizarlo en tiempo expandido. 7. Se puede tener un mejor control sobre condiciones experimentales, para no experimentar con el sistema real. 8. Puede ser aplicada para diseño de sistemas nuevos en los cuales se quieren comparar alternativas muy diversas surgidas a través de la utilización de diferentes tecnologı́as..
(31) CAPÍTULO 2. MARCO TEÓRICO.. 20. 9. La Simulación puede utilizarse durante la vida de un sistema, para probar modificaciones antes que éstas se implementen (si es que los resultados de la simulación aconsejan su uso).. Desventajas. 1. Son costosas ya que requieren gran cantidad de corridas computacionales para encontrar soluciones, consume mucho tiempo en su desarrollo para que el modelo sea válido. 2. Los resultados de simulación son numéricos; por tanto, surge el peligro de atribuir a los números un grado mayor de validez y precisión; en consecuencia, las soluciones obtenidas no son optimas. 3. No se debe utilizar cuando existan técnicas analı́ticas que permitan plantear, resolver y optimizar todo el sistema o alguna parte del mismo. 4. No es posible asegurar que el modelo sea válido, ya que no existe criterio cientı́fico para la selección de alternativas a simular (Estrategias). 5. Dificultad en vender la idea por falta de conocimientos.. Peligros. 1. Subestimar el tiempo y costos involucrados en el proceso de modelación. 2. Es posible elaborar todo un gran andamiaje3 de pruebas y resultados falsos, basados en un modelo confiable y válido bajo otras condiciones. 3. La palabra andamiaje bajo este contexto significa como un soporte de lo que se está diciendo. Según la Real Academia Española andamiaje es un conjunto de andamios y andamio es una armazón de tablones, usado para trabajar sobre él en la parte alta de un edificio.
(32) CAPÍTULO 2. MARCO TEÓRICO.. 21. 3. Los modelos de simulación son generalmente programas grandes, que si no se tienen las precauciones respectivas, es posible tener errores de programación que hagan las conclusiones sin sentido. Es por ello, que se debe evitar el entendimiento superficial del sistema a ser modelado. 4. Por tratar de ahorrar tiempo de análisis y de computación, las corridas de simulación pueden ser muy cortas. Los resultados en estos casos dependen fuertemente de las condiciones iniciales y pueden no representar al sistema real. El tiempo de corrida adecuado depende de la metodologı́a estadı́stica, deseada (intervalos de confianza) y de la varianza de las cantidades observadas.. Los campos y áreas de aplicación de la simulación son extensos, sin embargo, se intentará presentarlos de manera resumida en la tabla 2.1 [17]4 . CAMPOS. APLICACION. Computación. Redes de ordenadores, componentes, programación, bases de datos, fiabilidad.. Manufactura. Manejo de materiales, lı́neas de montaje, equipos de almacenamiento, control de inventario, mantenimiento, distribución en planta, diseño de máquinas.. Negocios. Análisis de existencias, polı́tica de precios, estrategias de marketing, estudios de adquisición, análisis de flujo de caja, predicción, alternativas del transporte, planificación de mano de obra.. Gobierno. Armamento y su uso, tácticas militares, predicción de la población, uso del suelo,. 4. continúa. . . Tomado de la página del Profesor Jesús Racero http://racero.us.es/.
(33) CAPÍTULO 2. MARCO TEÓRICO.. 22. . . .continuación CAMPOS. APLICACION prevención de incendios, servicios de policı́a, justicia criminal, diseño de vı́as de comunicación, servicios sanitarios.. Ecologı́a y medio ambiente. Contaminación y purificación del agua, control de residuos, contaminación del aire, control de plagas, predicción del tiempo, análisis de seı́smos y tormentas, exploración y explotación de minerales, sistemas de energı́a solar, explotación de cultivos.. Sociedad y comportamiento. Estudios de alimentación de la población, polı́ticas educativas, estructuras organizativas, análisis de sistemas sociales, sistemas de asistencia social, administración universitaria.. Biociencias. Rendimiento en el deporte, control de epidemias, ciclos de vida biológicos, estudios biomédicos. Tabla 2.1: Aplicaciones de la Simulación. Según lo anterior, la aplicación de la simulación a diferentes tipos de sistemas combinada con los diferentes enfoques de estudio, conducen a una gran variedad de maneras en que se puede realizar un estudio de simulación. No obstante, hay determinados pasos o etapas básicas, los cuales se denominan: “Metodologı́a de un estudio de Simulación” [4], las cuales serán explicadas en detalle a continuación: Las ideas aquı́ planteadas han sido tomadas, principalmente, de Guash A. et al. [8], 2005..
(34) CAPÍTULO 2. MARCO TEÓRICO.. 23. 1. Definición del problema y planificación del estudio. En esta etapa se definen los objetivos perseguidos por el planteamiento del problema. Si éstos objetivos no se definen con claridad existirá el peligro de no abordar correctamente el problema, para el cual se ha solicitado la técnica de simulación, como vı́a para su posible solución. 2. Recogida de datos. La recopilación de datos e información deben ser de fuentes creı́bles, y a su vez, cuestionables. Como en el campo de trabajo ésto sucede muy poco, se debe responder a las preguntas planteadas del problema, realizando hipótesis razonables en colaboración con el usuario final. 3. Formulación del modelo conceptual. Conocidos los objetivos del problema, existirá la posibilidad (tentación) de comenzar la construcción del modelo de simulación inmediatamente en el computador. Ello conduce a obtener modelos de difı́cil mantenimiento; es por esto que se recomienda plantear un modelo conceptual con un nivel de abstracción superior al planteado en el código, éste contemplará las relaciones estructurales mas importantes del sistema y la coordinación de la sucesión de actividades que ocurrirán. 4. Construcción del modelo. Para esto se plantearán varios modelos simplificados que caractericen las partes más esenciales del sistema, para ası́ avanzar rápidamente a la consecución de los objetivos planteados, y ası́ obtener un posible modelo general (decimos posible ya que un modelo tiene que estar en constante mantenimiento y verificación). 5. Verificación, validación y pruebas. Una de las etapas más importantes en la técnica de la simulación, ya que, con una buena cantidad de pruebas se verificará que el modelo se ejecuta correctamente y según las especificaciones (modelo conceptual) y validaremos que las hipótesis planteadas, la teorı́a empleada y otras suposiciones son correctas; esto favorece que nuestro.
(35) CAPÍTULO 2. MARCO TEÓRICO.. 24. modelo tenga un comportamiento lo mas parecido posible a la realidad. 6. Diseño de los experimentos de simulación. Se decidirá que caracterı́sticas del sistema se mostraran a través de las estadı́sticas, la duración de cada simulación, las condiciones iniciales y el numero de ejecuciones (replicas); para ası́ inferir y tomar decisiones con mayor seguridad. 7. Análisis de los resultados. Se estudiarán los resultados obtenidos, observando carencias y mejoras, realizando un estudio de sensibilidad de las variables de estado. 8. Documentación e implementación. En las etapas precedentes, es muy importante mantener un documento que muestre el estado del proyecto de simulación, su evolución en paralelo de cada etapa. La implementación consistirá en tomar decisiones como fruto del estudio de simulación realizado.. Como se puede apreciar en la Figura 2.4, estos pasos en general no son secuenciales, sino iterativos, ya que, algunos de los pasos pueden tener que repetirse en función de los resultados intermedios..
(36) CAPÍTULO 2. MARCO TEÓRICO.. Figura 2.4: Etapas en un estudio de Simulación.. 25.
(37) CAPÍTULO 2. MARCO TEÓRICO.. 2.3.2.. 26. Simulación de sistemas orientados a eventos discretos.. Según Law y Kelton [7], la Simulación de Eventos Discretos es la que involucra el modelo de un sistema que evoluciona en el tiempo, en donde, las variables de estado cambian en determinados instantes de tiempo. Este comportamiento discreto del sistema permite la implementación del mismo en un programa computacional mediante una lista de sucesos futuros, un reloj que salte en el tiempo hacia el siguiente suceso, las variables de salida que miden el comportamiento del sistema y unos acumuladores estadı́sticos que tomen un registro de los valores de las variables de estado [8].. 2.3.3.. Elementos de un Simulador de Eventos Discretos.. Actualmente la gran mayorı́a de simuladores para Sistemas Orientados a Eventos Discretos, presentan una serie de caracterı́sticas inherentes a la estrategia de simulación adoptada. Estas caracterı́sticas de por sı́ generales, no escapan de la filosofı́a de SimPy y se encuentran bien implantadas en el código fuente, estas caracterı́sticas son:. Un generador de números aleatorios U[0,1]: es el módulo base para la generación de valores aleatorios entre [0,1] uniformemente distribuidos. SimPy se vale de las bondades del lenguaje Python, que ya tiene implantado un modulo para tales fines. Generadores de variables aleatorias: Generar valores que siguen las distintas funciones de distribución de probabilidades, a partir de los valores aleatorios U[0,1], usando para ello diversas técnicas. Reloj de simulación: Es una variable global que almacena el tiempo de la simulación. Lista de Eventos Futuros (LEF): Es una estructura que almacena los instantes de tiempo, cuando deben activarse los eventos que esperan por suceder. Esta lista es.
(38) CAPÍTULO 2. MARCO TEÓRICO.. 27. consultada antes de la simulación de cada evento y durante la simulación de un evento para programar nuevos eventos. Módulos para la generación de estadı́sticas: conjunto de variables y rutinas para obtener las medidas de comportamiento de interés y las salidas al final de la simulación. Módulo de inicialización: En él se fijan los estados iniciales de las variables de estado del modelo, el reloj de simulación, la lista de eventos, ası́ como los generadores de secuencias de números seudo-aleatorios, a través de la semilla. Rutina de actualización del reloj del simulador: es un subprograma que determina el instante de tiempo en el que debe activarse el siguiente evento, ası́ como el evento que debe ser disparado. Esta información es obtenida de la lista de eventos futuros. Rutina de tratamiento de eventos: para cada tipo de evento existe una rutina de tratamiento de evento, la cual actualiza los valores de algunas de las variables de estado y puede generar entradas nuevas a la lista de eventos futuros. Programa principal o código ejecutivo: Agrupa todas las rutinas para controlar la ejecución de la simulación, en función de la estrategia de simulación adoptada. Rutinas de trazado: Utilizadas para desplegar resultados intermedios durante la ejecución de la simulación, se emplean para la depuración (debugging) del simulador.. A través del diagrama de flujo de la figura (Figura 2.5), se explica en forma grafica el flujo de control existente entre los elementos de un Simulador Orientado a Eventos Discretos..
(39) CAPÍTULO 2. MARCO TEÓRICO.. 28. Figura 2.5: Flujo de control entre los elementos de un simulador orientado a eventos discretos. Al igual que en las etapas de un estudio de simulación la explicación de estos elementos fue obtenida de Guash A. et al., 2005. [8]. El gran auge que han tenido en la actualidad los diferentes simuladores de eventos discretos, es pues, la presencia de estos factores ya implantados intrı́nsicamente en ellos.. 2.3.4.. Estrategias de Simulación de Sistemas Orientados a Eventos Discretos.. Los lenguajes y paquetes para la simulación de sistemas orientados a eventos discretos, fundamentalmente se elijen de acuerdo a lo atractivo de sus caracterı́sticas, sin embargo hay una de ellas que resulta determinante e impone su filosofı́a, es la estrategia enfoque o visión del mundo [4], utilizada para la selección del suceso siguiente y la gestión del tiempo durante la simulación. Según Kiviat [19] estas estrategias o enfoques se clasifican en:.
(40) CAPÍTULO 2. MARCO TEÓRICO.. 29. 1. Programación de eventos (Event Schedulling). 2. Exploración de actividades (Activity Scanning). 3. Interacción de Procesos (Process Interaction).. 1.- Programación de eventos.. El enfoque de Programación de Eventos (Event Schedulling), es una técnica que envuelve una secuencia de eventos incondicionados5 a lo largo del tiempo de simulación. Es por ello que los modelos de simulación expresados a través de esta técnica, se basan en considerar la operación (es) del sistema como una secuencia temporal y ordenada de eventos incondicionales. Barceló (1996) considera la implantación de esta técnica de la siguiente manera:. Se selecciona de la lista de eventos aquel evento cuyo tiempo de ocurrencia es el mas cercano, solucionando los empates por las prioridades asignadas a éstos, o por defecto, actualizando el tiempo de reloj de simulación al valor en que ocurre tal suceso, llamando para ello a la rutina correspondiente para ese evento (p. 123).. El bosquejo de implantación citado anteriormente hace inferir que una de las caracterı́sticas más resaltantes de esta estrategia de simulación es que, tan solo pueden codificarse las rutinas de tratamiento de eventos incondicionales. Por otro lado, como la mayorı́a de sistemas a simular, presentan tanto eventos incondicionales como condicionales, éstos últimos se deberán incluir en las rutinas de tratamiento de eventos incondicionales [8]. 5. Eventos incondicionados son aquellos eventos que están planificados para su ejecución y no dependen de condiciones.
(41) CAPÍTULO 2. MARCO TEÓRICO.. 30. 2.- Exploración de Actividades.. En este enfoque se presta mayor atención al conjunto de actividades que tienen que ejecutar cada una o lote de entidades (personas, mensajes, piezas) presentes en el sistema, identificando ası́ el conjunto de condiciones que permiten que suceda la actividad y la naturaleza de éstas. Bajo este esquema el modelador, se concentra en el conjunto de condiciones que permite iniciar una actividad. Según Pooch [20], una de las debilidades principales de este enfoque es la necesidad de tener un incremento de tiempo reducido ya que; en caso contrario, eventos que están separados en el tiempo puedan aparecer simultáneamente en el simulador. Por tanto, éste incremento de tiempo tiene que ser lo suficientemente pequeño para que dos eventos separados en el tiempo también aparezcan separados en la simulación. Debido a ello y otros factores, este enfoque ha evolucionado hacia la denominada estrategia de tres fases, la cual combina el incremento de tiempo propio de la programación de eventos con la exploración de actividades. En la actualidad, esta evolución se sintetiza en los siguientes pasos:. 1. Extraer de la lista de eventos futuros el evento mas próximo a suceder, avanzar el reloj de la simulación hasta ese tiempo y extraer el resto de eventos de la lista de eventos futuros que tienen el mismo tiempo. 2. Ejecutar todos los eventos extraı́dos, del paso anterior. Recordar que estos eventos son incondicionales. En esta fase se pueden liberar recursos y/o cambiar el estado del sistema. 3. Buscar todas aquellas actividades asociadas a eventos condicionados para ejecutar las que cumplen todas las condiciones. Esta búsqueda se repite hasta que no halla ninguna actividad adicional.. Es de notar que, a través de esta nueva visión de tres fases, del enfoque de exploración.
(42) CAPÍTULO 2. MARCO TEÓRICO.. 31. de actividades, se separan claramente las actividades ligadas a eventos incondicionados de los condicionados.. 3.- Interacción de Procesos.. Aquı́ el enfoque se basa en la entidad que fluye por el proceso. En donde, el proceso es definido como todo el ciclo de vida de la entidad que fluye a través del sistema. En esta técnica, se diferencian las entidades temporales (piezas, clientes, mensajes) que se mueven en el sistema, de las entidades permanentes o también llamadas recursos (grúas, maquinas, cajeros). A través de este paradigma el analista define la situación (modelo) a resolver, desde el punto de vista de las entidades temporales que llegan al sistema, demandando múltiples recursos de capacidad limitada, esperando en colas si los recursos están ocupados o retardándose cierta cantidad de tiempo en la utilización del recurso. Según Guash et al., 2005 [8], la popularidad de este enfoque radica en describir el modelo de simulación con bloques de alto nivel en los cuales la interacción de los procesos es tratada directamente por la herramienta de simulación, para ası́ ahorrar gran cantidad de tiempo en la etapa de implantación del modelo. Intrı́nsicamente, estas herramientas manipulan los eventos incondicionales de la lista de eventos futuros, tal como se realiza en el enfoque de programación de eventos (explicada previamente). Ahora bien, el caso de estudio que compete al proyecto, es el enfoque basado en la interacción de procesos, por ser éste el pilar fundamental en el cual está sustentado el simulador SimPy, a través del Método de Ejecución de Procesos (PEM Process Execution Method -el cual será tratado en detalle más adelante en el capı́tulo 3)..
(43) CAPÍTULO 2. MARCO TEÓRICO.. 2.3.5.. 32. Simulación Orientada a Objetos.. Recientemente ha comenzado un gran interés por la Simulación Orientada a Objetos. Esto, probablemente, como consecuencia del gran interés en general por la programación orientada a objeto. La programación y la Simulación Orientada a Objetos, nacieron de SIMULA: que es un lenguaje de simulación orientado a objeto, creado en los años de 1960 [7], por Kristen Nygaard y Ole-Johan Dahl del Centro Noruego de Computación en Oslo, y su desarrollo se extendió desde 1962 a 1967 [29]. Partiendo de las ideas planteadas con la creación de Simula, la Simulación Orientada a Objeto, considera que el sistema a simular, esta compuesto de objetos (por ejemplo clientes), los cuales interaccionan con otros objetos a través del tiempo. En el sistema, pueden existir varias instancias de ciertos tipos de objetos (por ejemplo entidades), actualmente presentes durante la ejecución de la simulación. Estos objetos contienen datos (atributos) que se emplean para describir su estado en un punto particular en el tiempo. También poseen métodos; éstos describen las acciones que son capaces de ejecutar los objetos. Los datos de un objeto únicamente pueden cambiar a través de sus propios métodos [7]. Lo antes expuesto es lo que se conoce hoy dı́a como el paradigma de programación orientada a objeto.. 2.4.. Softwares de Simulación.. Destacando el orden de ideas antes expuestas sobre las caracterı́sticas que deben presentar los simuladores de sistemas orientados a eventos discretos, es posible pensar que, cualquier lenguaje de programación podrı́a ser utilizado para simular el comportamiento de estos sistemas, aunque ello va a depender en alto grado de la estrategia adoptada y de las virtudes presentadas por el lenguaje seleccionado. Es por ello, que las herramientas.
(44) CAPÍTULO 2. MARCO TEÓRICO.. 33. de simulación actuales ofrecen los módulos necesarios para programar de forma rápida y habilidosa un modelo. Éstas y otras caracterı́sticas presentes en los diferentes paquetes de simulación actuales reducen considerablemente el tiempo de programación del modelo y en añadidura el mantenimiento del mismo se ve enormemente simplificado [21]. En virtud de lo anterior, en la rama de la simulación de sistemas orientados a eventos discretos, existen los llamados “Lenguajes de Propósito General”, que son los lenguajes de programación convencionales (por ejemplo Pascal, Fortran, C++, Python). “Lenguajes de Simulación de Propósito General”, al igual que el anterior son lenguajes de programación, con la distinción que ya poseen módulos programados con caracterı́sticas especı́ficas para la simulación (por ejemplo GPSS, Simscript, Siman,), que aparecieron a partir de 1960. “Paquetes de Simulación de Propósito General”, a parte de poseer módulos especı́ficos para simulación, éstos integran capacidades de animaciones para la simulación e informes de resultados (informes estándar o especı́ficos, tabulares o gráficos, accesos a muestras individuales), permiten definir el modelo empleando un dialogo. A pesar de todas estas ventajas que pueden presentar los paquetes de simulación, éstos poseen un elevado costo de adquisición (licencia para su uso). Debido a la gran popularidad que ha tomado la simulación en el campo empresarial, ciertas corporaciones se han dedicado a la construcción y mantenimiento de éstas herramientas, haciéndolas privativas y de difı́cil acceso para el ámbito académico. A pesar que los lenguajes de programación disponen de librerı́as completas para implantar cualquier tipo de modelo (continuo o discreto) por complejo que éste sea, requieren de una gran inversión de tiempo y además de un conocimiento exhaustivo por parte del analista (modelador) sobre el lenguaje empleado. Por su parte, los lenguajes y paquetes de simulación tienen como objetivo primordial facilitar el uso de la simulación en la etapa de programación del modelo y permiten al analista concentrarse en aspectos especı́ficos del sistema. El código de éstos es modular, fácil de leer y proveen herramientas para la depuración de errores, a través del trazado de sus corridas y experimentos con el modelo [1]..
(45) CAPÍTULO 2. MARCO TEÓRICO.. 34. El constante desarrollo que han presentado los lenguajes de simulación desde su creación, se caracteriza por la variedad de opciones que muestran, ya que son empleados para fines especı́ficos. Entre los mas conocidos se pueden mencionar: General Purpose Simulation System (GPSS desarrollado en por G. Gordon en la IBM en el año de 1961 [22]), Simulation Analysis (SIMAN, creado a mediados de 1960 por el centro Noruego de Computación [23]), SIMULA67 (Creado por los mismos autores de Simula Kristen Nygaard y Ole Johan Dahl), GLIDER (Creado durante los años 1991-1996, en la Universidad de los Andes por IEAC & CESIMO [24]), Simscript II.5 [23] y SLAM [23] por mencionar algunos..
(46) Capı́tulo 3 Modelado y Simulación en SimPy.. En este capı́tulo se presentarán de forma detallada, las diferentes estructuras que componen el paquete de simulación SimPy, ası́ como también los pasos a seguir en la implantación de un modelo empleando este paquete.. 3.1.. Introducción.. SimPy [5] nace en el año 2002, bajo las ideas de Simulación Orientada a Objetos detalladas en el capı́tulo anterior, las cuales fueron introducidas por SIMULA en la década de los 60. Bajo esta premisa y combinando las ideas de SIMULA y Simscript y empleando el estándar de Python, el Dr. Klauss Müller (con experiencia en la programación con Simula) y Tony Vignaux (Programador de Simscript) crean SimPy .. 35.
(47) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 3.2.. SimPy.. 3.2.1.. Concepto.. 36. SimPy [5]1 es un sistema de simulación de eventos discretos basado en Python. SimPy usa procesos paralelos para modelar componentes activos tales como mensajes, individuos, piezas. Proporciona un gran número de herramientas para el analista del modelo y una interfaz que puede ser manejada en plataformas Windows y en distribuciones GNU/Linux. Incluye los procesos de las entidades a través de la creación de objetos de tipo Proceso (Process) y tres tipos de objetos recursos: Recursos, Niveles y Almacenes (Resources, Level and Stores). Además, formas de almacenar las estadı́sticas de la simulación, usando Monitor y Tally.. 3.2.2.. Caracterı́sticas Generales.. Los elementos básicos de un modelo en SimPy son objetos de tipo proceso (por ejemplo, objetos de una clase Process -en el apartado 3.5 se explica en detalle). Éstos son retardados por tiempos fijos o aleatorios de acuerdo a las especificaciones del modelo conceptual y colocados en cola para el uso de algunos de los recursos. Un script de SimPy contiene la declaración de una o más instancias de procesos y la creación de una serie de objetos a partir de éstos. Cada objeto proceso ejecuta su Método de Ejecución de Proceso (PEM: Process Execution Method, -éste será tratado en detalle en el apartado 3.6 de este mismo capı́tulo). Cada PEM se ejecuta en paralelo invocando las diferentes rutinas de los subprocesos y, además puede interactuar con varios PEM de otros objetos de tipo Process. En lo sucesivo se empleará el acrónimo PEM para indicar las 1. El texto es una traducción libre de la versión en ingles de http://simpy.sourceforge.net/.
(48) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 37. actividades de las entidades dentro de los sistemas a modelar. El paquete está formado por un conjunto de módulos escritos en python, los cuales se mencionan a continuación:. 1. Simulation: Es el Módulo que tiene implementada las definiciones de las clases y métodos para los objetos Process (Procesos) y Resources (Recursos), empleados en los modelos de simulación. 2. Monitor: Módulo para la compatibilidad de versiones anteriores a SimPy (por ejemplo la versión 1.7.1 con la 1.6). 3. SimulationTrace: Módulo que implementa las trazas para los eventos. 4. SimulationRT: Módulo para controlar la velocidad de la Simulación a través de la sincronización de los eventos. 5. SimulationStep: Módulo para realizar la Simulación paso a paso a través del seguimiento de los eventos 6. SimPlot: Módulo que permite realizar gráficas de estadı́sticas durante la simulación. Está basado en la librerı́as Tk/Tkinter. 7. SimGui: Este Módulo provee las herramientas para implementar el modelo de simulación con interfaces gráficas de usuario (GUI). Al igual que el modulo SimPlot, SimGUI está basado en las librerı́as Tk/Tkinter. 8. Lister: Módulo empleado para darle un mejor formato de impresión a los objetos SimPy empleados por el modelo..
(49) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 3.3.. 38. Desarrollo de un programa de Simulación en SimPy.. Este apartado describe los pasos y la estructura para describir un programa de simulación en SimPy. Las ideas aquı́ planteadas han sido tomadas, principalmente, del capı́tulo 3 del trabajo del Dr. Klauss Müller [27].. 3.3.1.. Estructura básica de un programa en SimPy.. Para implementar un modelo de simulación en SimPy, el usuario tiene que programar en Python los siguientes pasos observando el marco de referencia de SimPy:. 1. Importar la librerı́a de Simulación de SimPy. 2. Definir al menos una clase de componentes activos de Simulación (Procesos). 3. Formular un modelo, el cual: a) Inicializa la maquinaria del tiempo de ejecución de SimPy (Efectivamente, el manejador de eventos). b) Genera al menos una o más instancias de estas clases de componentes activos. c) Activa estas instancias. d) Inicializa la colección de datos. e) Comienza la ejecución de la Simulación. 4. Definir los valores de datos, para el experimento de Simulación. 5. Ejecutar el experimento. 6. Analizar los datos recolectados..
(50) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 39. 7. Mostar la salida de los resultados. Esto se entenderá en una estructura de programa SimPy tal como sigue:. import SimPy.Simulation as Sim. (1). # #Componentes del modelo class MyProcess(Sim.Process):. (2). def myPEM(self): yield hold,self,myDuration # # Modelo def model():. (3). Sim.initialize(). (4). p=MyProcess(). (5). Sim.activate(p,p.myPEM(),at=tFirst). (6). results=Sim.Monitor(). (7). Sim.simulate(until=endtime). (8). return results # # Datos del Experimento. (9). tFirst=100 myDuration=10 endtime=1234 # Experimento outcome=model(). (10). # Analisis answer=outcome.mean(). (11). # Salida print ‘‘Result is: %s"\%answer. (12). Es de hacer notar que para el desarrollo de un programa de Simulación en SimPy, es muy útil tener la estructura anterior de seis secciones en el desarrollo de los modelos. Estas secciones son:.
(51) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 40. 1. Componentes del modelo. 2. Modelo. 3. Datos del Experimento. 4. Experimento. 5. Análisis. 6. Salidas.. Esta estructura se empleará para el conjunto de modelos de ejemplo a ser desarrollados en el capı́tulo 4. Si un programa de Simulación tiene corridas de modelos (es decir experimentos), utilizando varios conjuntos de datos, las últimas cuatros secciones deben repetirse tantas veces como conjuntos de datos haya. Es de hacer notar que esta estructura de seis secciones ayudará a plantear los modelos a desarrollar. Es altamente recomendable mantener la función model (modelo) libre de datos y solamente utilizar variables a las cuales serán asignadas sus valores por un conjunto de datos del experimento. Esto mantiene al modelo general y permite que sea utilizado para cualquier número de experimentos (es decir corridas de Simulación) basados en diferentes conjuntos de datos del experimento. Similarmente, todos los componentes del modelo deben mantenerse libre de datos utilizando variables, las cuales obtendrán sus valores a partir de los datos del experimento directamente o por el envı́o de sus parámetros a la función model..
(52) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 41. Los objetos denotados por Sim son suministrados por el módulo SimPy.Simulation. Éstos objetos dan al usuario del programa las siguientes capacidades:. Por herencia de Sim.Process, las instancias de la clase MyProcess se pueden convertir en componentes activos para los cuales se puedan definir o colocar en horario eventos. El PEM con nombre myPEM define su ciclo de vida. Sim.initialize inicializa la maquinarı́a del tiempo de ejecución (o corrida) de la simulación. Inicializa una lista de eventos y coloca el tiempo inicial de la simulación en 0. La llamada Sim.activate define un evento inicial para la entidad p de MyProcess en el tiempo tFirst. La llamada Sim.simulate ejecuta todos los eventos que están en la lista de eventos en una secuencia temporal hasta que no hayan mas eventos en la lista de eventos o hasta que el reloj de la simulación haya alcanzado endTime su tiempo final.. SimPy.Simulation, es solo uno de los cuatro módulos de la librerı́a de simulación que dispone SimPy. Se utiliza en la mayorı́a de los casos. Otros módulos alternativos de simulación que están disponibles son:. SimPy.SimulationTrace. Que provee todas las capacidades de Simulacion de SimPy más la caracterı́stica de traza de la ejecución. Está orientado principalmente a la introspección de modelos, para depurarlos y para propósitos de enseñanza o documentación. SimPy.SimulationStep. Todas las posibilidades de Simulación de SimPy, más la capacidad de ejecutar un modelo evento por evento. Esto es útil por ejemplo, en simulaciones interactivas con una persona que esté interactuando con el modelo..
(53) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 42. SimPy.SimulationRT. Tiene todas las capacidades de Simulación de SimPy, más la capacidad de sincronizar el tiempo de Simulación con el tiempo de reloj de pared (esto significa hacer simulaciones en tiempo real). Esto es útil por ejemplo, para implementar modelos de sistemas fı́sicos donde el usuario de la simulación quiere ganar visión acerca de los tiempos de los eventos o el comportamiento dinámico de un sistema modelado.. Solo una de estas cuatro librerı́as disponibles, puede ser invocada dentro de un script de SimPy. El nuevo usuario de SimPy debe siempre importar las facilidades de simulación de SimPy por medio de la sentencia SimPy.Simulation as (nombre) por ejemplo importar SimPy.Simulation as Sim. En el modelo, esto identifica totalmente todos los objetos importados. Por ejemplo Sim.Process, o Sim.hold. Esto muestra, rápidamente, que su construcción viene de la librerı́a de SimPy y además proteje de la sobrecarga accidental con los objetos propios del usuario. En etapas posteriores, cuando el usuario esté mas familiarizado con SimPy, la cantidad de escritura puede ser reducida empleando: from SimPy.Simulation import * y escribiendo Process o hold.. 3.3.2.. Enfoque para la implantación de un Modelo en SimPy.. Es altamente recomendable emplear un diseño interactivo incremental (también llamado “construir un poco”, “ejecutar un poco”, “aprendiendo mucho”). El diseño del programa deberı́a arrancar con un escenario que describa la situación a ser simulada. En este escenario se deben identificar los actores, sus acciones y los recursos que ellos necesitan. En el diseño, se deben escribir los ciclos de vida de los actores. Mas importante aún, se deben definir cuales son los resultados que se desean obtener de la.
(54) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 43. Simulación. Al lograr una comprensión del modelo conceptual a través de un análisis del mismo, se debe comenzar a implementar el código, empleando comentarios que expresen lo que hacen las diferentes sentencias (se debe recordar emplear el enfoque de las seis secciones discutido previamente). En la primera etapa del desarrollo se recomienda utilizar SimPy.SimulationTrace en lugar de SimPy.Simulation, esto permite hacer trazas de la simulación y además ganar visión de cómo los procesos, eventos e interacciones están funcionando dentro de los comandos de SimPy. Para realizar validaciones dentro del programa SimPy que aseguren sincronizaciones entre múltiples procesos paralelos se utiliza la sentencia assert de Python (ver el modelo de visita al banco de la sección 3.3.3).. 3.3.3.. Construyendo el primer modelo en SimPy.. En este apartado se emplea un escenario sencillo “La Visita al banco”, el cual se describe a continuación: “Un banco abre una nueva oficina e invita al publico a un dı́a de apertura. Los visitantes llegan, son bienvenidos por el gerente de la oficina uno a uno y pueden observar las cosas nuevas que hay en el banco. Luego ellos se van. Para obtener alguna idea de la situación, se seguirán los eventos que le ocurren a tres visitantes (entidades Tony, Klaus y Simon) que arriban en los tiempos 0, 0.5 y 1 minuto después de abrir respectivamente. El gerente de la oficina gasta exactamente un minuto con cada visitante. Y un visitante se pasea por las oficinas del banco en un tiempo de 10.
(55) CAPÍTULO 3. MODELADO Y SIMULACIÓN EN SIMPY.. 44. minutos aproximadamente.” Una vez descrito el escenario del modelo conceptual, se debe plantear el objetivo de la simulación: ¿En que tiempo dejan las instalaciones del banco los 3 visitantes? A continuación se realiza un breve análisis del modelo conceptual identificando los actores, los ciclos de vida de las entidades, los datos del escenario y las decisiones a tomar para el diseño del programa. Este análisis se describe a continuación: Actores.. Visitante Tony. Visitante Klaus. Visitante Simon. Gerente del banco.. Ciclos de vida para las entidades.. Llegadas. Tratar de encontrar libre al recurso gerente (gerente del banco), esperar en una cola si no está disponible. Ponerse en conversación con el gerente (de forma que éste pasa a estar ocupado). Hablar con el gerente por un minuto. Liberar al gerente (para que pueda atender a otra persona) Darse una vuelta por el banco en 10 minutos..
Documento similar