SIMPY
¿QUÉ ES SIMPY?
(Simulation in Python) Es un modulo que permite fácilmente que se creen modelos
simulados de eventos discretos Su lenguaje de programación se basa en Python y
fue sacado a la venta por GNU GPL. El módulo provee un modelador con
componentes de una simulación modelo en la cual se incluyen procesos tanto
para componentes activos como clientes, mensajes, y vehículos y recursos como
para componentes pasivos que forman la capacidad limitada como puntos de
congestión, cajas, y túneles. Además provee variables en el monitor que permiten
recolectar estadísticas.
¿PARA QUÉ SE UTILIZA?
Áreas de aplicación:
Simulación/modelación de epidemias
Simulación del tráfico
Vigilancia aérea de aviones
Ingeniería Industrial
Estudios del rendimiento del hardware de una computadora
Funcionamiento del modelado
Estudios en el volumen de trabajo
Optimización de procesos industriales
Enseñanza de la metodología de la simulación.
Sincronización en tiempo real
Simulación de manejo telescopios en observatorios
Recolección de información (SimulationRT)
Principales funciones:
activate () > para activar un proceso, marcar una proceso como ejecutable
cuando es creada
simulate > empieza la simulación
reactivate () > reactivata un proceso suspendido
cancel () > hace un proceso pasivo
interrupt () > interrumpe un proceso suspendido
yield hold > indicar el paso de cierto tiempo en un proceso. Es un operador
cuyo primer operando es una función que es llamada, en este caso un
código para una función que interpreta la operación hold en la librería
simpy.
yield passivate > hace pasivo el proceso, hasta ser activado por otro
yield request > para pedir acceso a un recurso
yield release > acaba con el recurso, indica que el proceso ha terminado de
usar el recurso, habilitando el siguiente
Curso de control de las funciones (funcionamiento):
Cuando main() llama a simulate(), main() se bloquea. Después empieza la
simulación y main() no vuelve a correr de nuevo hasta que la simulación
termina. (Cuando main() renauda, despliega los resultados de la
simulación.)
Siempre que un proceso ejecute yield, ese proceso se pondrá en pausa.
Las funciones internas de Simpy correrán, y un proceso se reiniciará
(posiblemente el mismso proceso).
Cuando un proceso se reinicia finalmente, la ejecución se renauda justo
después de que algún yield statement se ejecutó por último en este
proceso.
Es importante reconocer que activate(), reactivate() y cancel no resultan en una
pausa a la llamada de la función. Una pausa ocurre sólo cuando un yield es
invocado.
Ejemplo del uso de la función yield
Este ejemplo muestra el plano animado (animated plot) del número del
visitantes de los bancos que esperan y el tiempo promedio de ese número.
Link: [Link]
Ejemplo de La Sincronización de un proceso entre consumidor y productor.
En este programa nos permite observar que el consumidor no consuma más
productos de los que se han producido. Si es necesario, el consumidor
puede esperar si el objeto que desea consumir no se encuentra disponible.
Este ejemplo muestra un proceso de arribar. Diversos tiempos de
distribuciones para arribaciones son mostradas.
Este es un ejemplo de un programa sobre el estudio de la congestión de
celulares. El objetivo es encontrar un número de períodos ocupados que se
observa en una celda del celular donde el número de canales es limitado.
Las llamadas entrantes cuando la celda se encuentre ocupada serán
tomadas como perdidas.
INSTRUCCIONES DE USO
1. Se importa el archivo de la biblioteca de simulación de Python.
2. Se define, por lo menos, una clase de componentes activos de simulación
(procesos).
3. Se formula el modelo, el cual debe cumplir las siguientes condiciones:
a. Inicia la máquina de tiempo de la ejecución (controlador de eventos)
b. Genera, una ó más instancias, de sus componentes activos.
c. Activa los casos.
d. Establece la recogida de datos.
4. Se inicia la ejecución de la simulación.
5. Se recogen los valores del experimento, para realizar la simulación.
6. Se ejecuta la prueba.
7. Se analizan los datos recogidos.
8. Se da los resultados de salida.
Como encontrar errores (Debugging)
En este link se muestra un claro ejemplo de un erro y como se puede componer.
[Link]