You are on page 1of 30

Simulacin discreta en Linux

Camilo Bernal
27 de agosto de 2015

ndice
1. Introduccin

2. Para qu sirve la simulacin discreta?

3. Qu es SimPy?

4. Qu es Python?

5. Qu es GNU/Linux?

6. Ejemplo de simulacin de un restaurante universitario

7. Conclusiones

A. Modelo de restaurante universitario

11

B. Resultado con seguimiento de eventos

15

1.

Introduccin

Cuando se intenta resolver problemas sumamente complejos, es posible que una modelacin matemtica sea inadecuada. Esto se debe no solamente a la complejidad intrnseca
del modelo que se est tratando, sino tambin a la dificultad que representa resolver
numricamente el problema planteado.
Ante estas situaciones es posible hacer uso de una tcnica de Investigacin de Operaciones llamada Simulacin Discreta. Esta tcnica intenta modelar sistemas del mundo real
a travs de la construccin de simulaciones basadas en los principales elementos de las
percepciones que se tienen sobre un problema en particular.
El objetivo de usar estas tcnicas es hacer anlisis del tipo Qu pasara si. . . donde
. . . representa cambios en los parmetros, variables y restricciones del modelo que se
est considerando. Este tipo de experimentos puede resultar muy til en caso de pruebas
destructivas y/o muy costosas sobre el objeto de estudio, con lo cual se combinan en un
mismo modelo elementos objetivos, elementos subjetivos, recomendaciones de expertos
y bases de datos de conocimiento.
En el presente documento se presenta una herramienta para hacer simulacin de eventos
discretos basados en procesos para el sistema operativo Linux. Se plantea un ejemplo
muy sencillo a modo de ilustracin.

2.

Para qu sirve la simulacin discreta?

La simulacin discreta sirve para analizar sistemas en los cuales la experimentaci directa
resulta destructiva y/o muy costosa. En algunas ocasiones tambin se puede usar para
modelar problemas complejos de produccin, redes logsticas y administracin,. . . en los
que los modelos matemticos son muy difciles de construir y/o resolver con tcnicas
ms convencionales de Investigacin de Operaciones.
La simulacin discreta tambin ayuda a combinar diversos enfoques de solucin de problemas como minera de datos, juicios de expertos y bases de datos de conocimiento,. . .
todo esto se puede combinar en algoritmos auto-adaptativos a fin de contar con herramientas ms flexibles y verstiles para codificar y resolver problemas.

3.

Qu es SimPy?

SimPy es un lenguaje de simulacin de eventos discretos basados en procesos y que usa


el lenguaje de programacin Python. Permite modelar componentes de una simulacin
como son procesos para componentes activos tales como clientes, mensajes y vehculos,
y recursos para componentes pasivos que actan como servidores que satisfacen las
necesidades de los usuarios.
SimPy tiene varias ventajas sobre otras herramientas de simulacin discreta como Promodel. Entre otras, estas son algunas ventajas:
Es software libre, con lo cual no debes gastar dinero para instalar y actualizar la
herramienta.
Usa python para construir los modelos, lo que permite usar todas las inmensas
capacidades y caractersticas de este lenguaje de programacin.
Est pensado para ser usado en ambientes de produccin real (como grandes industrias y/o laboratorios de investigacin, por ejemplo), ya que permite su trabajo
en servidores y grandes equipos de cmputo.
Para obtener el programa, los usuarios de sistemas operativos basados en Debian GNU/Linux
lo pueden buscar en el repositorio de software. Los dems pueden buscarlo en google.

4.

Qu es Python?

Python es un lenguaje de programacin multiparadigma (soporta programacin orientada a objetos, programacin imperativa y programacin funcional). Es un lenguaje
interpretado multiplataforma (se puede usar en Microsoft Windows, GNU/Linux, Unix
y MacOS) y de tipado dinmico.
El intrprete de Python viene pre-instalado en los sistemas tipo Unix (GNU/Linux y
MacOS). Para los que usan Microsoft Windows deben buscarlo en google.

5.

Qu es GNU/Linux?

GNU/Linux es el mejor sistema operativo que el dinero no puede comprar. A diferencia de otras alternativas, lo puedes usar no slo para desperdiciar el tiempo en tu PC
personal, sino tambin en entornos de sper-computacin y granjas de servidores.
Comparado con Microsoft Windows, es ms rpido, no tiene virus, es multitarea y multiusuario, no cobra por la licencia, no cobra por actualizaciones, no roba tu informacin
personal para enviarla a servidores remotos,... y ms.
Comparado con Mac OS, es multitarea y multiusuario, no te deja en la ruina econmica,
no te dice qu tipo de persona eres por usarlo (t decides quin eres, por ejemplo una
persona autntica),... y ms, aunque se reconoce la superioridad de Mac OS sobre Microsoft Windows, ambos sistemas te cobran cifras astronmicas por darte mucho menos
de lo que GNU/Linux te dara a precios ridculamente bajos (Ojo: no confundir valor
con precio).
Concretamente, Linux es un sistema operativo: un conjunto de programas que le permiten interactuar con su ordenador y ejecutar otros programas. Un sistema operativo
consiste en varios programas fundamentales que necesita el ordenador para poder comunicar y recibir instrucciones de los usuarios; tales como leer y escribir datos en el disco
duro, cintas, e impresoras; controlar el uso de la memoria; y ejecutar otros programas. La
parte ms importante de un sistema operativo es el ncleo. En un sistema GNU/Linux,
Linux es el ncleo. El resto del sistema consiste en otros programas, muchos de los cuales
fueron escritos por o para el proyecto GNU.

6.

Ejemplo de simulacin de un restaurante


universitario

El ejemplo planteado es muy sencillo y tiene propsitos ilustrativos nicamente.


Se disea la simulacin de un restaurante de auto-servicio para una universidad u otra
institucin educativa. Se plantea una serie de estaciones por las cuales pasar cada
estudiante a fin de servirse su almuerzo Figura (1).
Figura 1: Restaurante universitario



Fuente: Elaboracin propia
En el modelo planteado, el estudiante llega y espera (si es necesario) a que cada estacin
est disponible. Una vez que esto se cumple, el estudiante ocupa el recurso (la estacin
particular), lo utiliza durante algunos segundos y despus lo libera para ir a la siguiente
estacin. Cuando no quedan ma estaciones el estudiante abandona el auto-servicio y se
dirige a disfrutar de su almuerzo.

El elemento activo del modelo es el estudiante. Los elementos inactivos (las estaciones)
se pueden modelar como recursos. El tiempo de servicio en cada estacin se plantea
como una demora.
SimPy permite modelar las entidades del modelo como objetos (instancias de clases)
con caractersticas (atributos) y acciones (mtodos). Los eventos se modelan utilizando
generadores1 .
A continuacin se describen los principales elementos de SimPy para realizar la modelacin.
yield hold,self,t_demora: Sentencia de un mtodo perteneciente a un objeto
(instancia de clase). Con esto se expresa una espera (demora) de t_demora unidades de tiempo.
activate(objeto, mtodo(name=mi_objeto), at=0, delay=0, prior=False).
Esta sentencia se aplica a un objeto (instancia de clase). Con esta expresin se activan las acciones (mtodos) de un objeto activo (una entidad modelada como
instancia de clase en SimPy) con algunos parmetros opcionales como el momento
de activacin (at=...), demora(at=...), y prioridad(prior=...).
resource(capacity=1, name=a_resource, unitName=units, qType=FIFO,
preemptable=False, monitored=False, monitorType=Monitor). Permite
modelar una recurso (objeto pasivo). Se puede definir su capacidad (capacity=...),
un identificador(name=...), y otros parmetros opcionales.
yield request, self, resouce_name. Sentencia de un mtodo perteneciente a un
objeto (instancia de clase). Con esto se solicita el uso de un recurso. La entidad
se pone en espera hasta que el recurso est disponible. Una vez disponible, toma
el recurso (con lo cual no estar disponible para las entidades precedentes que lo
soliciten) durante algn tiempo y lo libera.
yield release, self, resource_name. Sentencia de un mtodo perteneciente a
un objeto (instancia de clase). Permite a una entidad liberar el recurso que est
utilizando a fin de que puede ser usado por otra.
Estas son algunas de las estructuras esenciales de SimPy. Esta herramienta permite un
gran nmero de opciones adicionales que pueden consultarse en el manual. En el anexo
1

Por favor, leer el manual de Python y de SimPy para entender lo que estoy diciendo

A se puede ver la aplicacin prctica de algunas de estas opciones usadas para modelar
el restaurante universitario.

7.

Conclusiones
Es posible usar SimPy para realizar simulacin discreta de una manera intuitiva
y escalable, a fin de que se puedan construir modelos tanto para propsitos pedaggicos como en ambientes de produccin real sin incurrir en costos ni licencias
adicionales.
A diferencia de otras herramientas, SimPy permite usar toda la potencia y versatilidad de un autntico lenguaje de programacin profesional como Python.

Referencias
[1] Wikipedia: La enciclopedia libre. GNU/Linux.
http://es.wikipedia.org/wiki/GNU/Linux?oldid=78087514. Fecha de acceso: 11 nov
2014.
[2] Wikipedia:
La
enciclopedia
libre.
Software
libre.
http://es.wikipedia.org/wiki/Software_libre?oldid=78063707. Fecha de acceso:
mi 12 nov 2014.
[3] Wikipedia: La enciclopedia libre. Python. http://es.wikipedia.org/w/index.php?oldid=75999492.
Fecha de acceso: vie 15 ago 2014.

10

A.

Modelo de restaurante universitario

>> A continuacin se muestra el script utilizado para simular el restaurante universitario


en un da normal de operaciones. Tanto el modelaje como el reporte son solamente
bosquejos con propsitos ilustrativos.
##################################################
# Simulacin de un restaurante para una universidad u otra
# entidad educativa en la cual cada estudiante
# pasa por una serie de estaciones para
# recoger sus alimentos.
#
# Programa realizado con el programa SimPy V2.3.1
# usando el lenguaje de programacin Python V3.3.3
# bajo el entorno Linux,
# Sistema Operativo Linux Mint Debian Edition (LMDE)
#####################################################
from SimPy.Simulation import *
from random import normalvariate
class Estudiante(Process):
"""Entidad que representa a un estudiante"""
def __init__(self, name):
Process.__init__(self, name)
def servirse(self, estaciones, t_servicio):
for i in range(6):
estacion = estaciones[i]
tiempo = t_servicio[i]
# Solicita servicio en la estacin
yield request, self, estacion
# Toma el tiempo necesario en la estacin
yield hold, self, tiempo
# Libera la estacin
yield release, self, estacion

def simular_restaurante():
initialize()
# Definir el nmero de estudiantes
N_estudiantes = 300

11

# Estaciones de servicio
estaciones = []
for i in range(6):
estaciones.append(Resource(capacity=1, name = "Estacin" + str(i+1),\
monitored = True, monitorType=Monitor))
# Tiempos de servicio
t_servicio = []
#-T. servicio para estacin 1
t_servicio.append(normalvariate(0.48,
#-T. servicio para estacin 2
t_servicio.append(normalvariate(0.42,
#-T. servicio para estacin 3
t_servicio.append(normalvariate(0.38,
#-T. servicio para estacin 4
t_servicio.append(normalvariate(0.55,
#-T. servicio para estacin 5
t_servicio.append(normalvariate(0.31,
#-T. servicio para estacin 6

0.15))
0.18))
0.21))
0.14))
0.22))

t_servicio.append(normalvariate(0.15, 0.08))
# creacin de estudiantes
estudiantes = []
for i in range(N_estudiantes):
estudiantes.append(Estudiante(name="Estudiante" + str(i+1)))
# tiempos de llegada de estudiantes
t_llegada = []
for i in range(N_estudiantes):
# Llegadas entre 12:00 y 12:20
if now() in [0,20]:
t_llegada.append(i*0.5) # 1 llegada cada 30 segundas
# Llegadas entre 12:20 y 14:00
elif now() in [20,120]:
t_llegada.append(i*1.0) # 1 llegada cada minuto
# Llegadas entre 14:00 y 14:20
elif now() in [120,140]:
t_llegada.append(i*0.5) # 1 llegada cada 30 segundos
# Llegadas despus de las 14:20
else:
t_llegada.append(i*1.0) # 1 llegada cada minuto

12

# Cada estudiante solicita el servicio de restaurante


for i in range(N_estudiantes):
activate(estudiantes[i], estudiantes[i].servirse(estaciones, t_servicio),\
at=t_llegada[i])
simulate(until=150) # La simulacin contina mximo hasta el periodo 150
# Realiza el reporte de la simulacin de un da
print(\n\nREPORTE DE LA SIMULACIN\n\n)
for i in range(6):
print(\n\nReporte para la estacin %s\n % (i+1))
estacion = estaciones[i]
print(Tiempo promedio de servicio: %s % estacion.actMon.timeAverage())
print(Tiempo promedio de espera: %s % estacion.waitMon.timeAverage())
print(\n\n)

# Se asegura de encontrar una simulacin exitosa


def simulacion_segura():
"""En ocasiones el tiempo de espera es negativo y el problema
se vuelve infactible, as que se debe encontrar un punto de inicio adecuado"""
while True:
try:
simular_restaurante()
break
except:
continue
# Realiza la simulacin de un da
simulacion_segura()

13

Al ejecutar el script anterior se obtiene el resultado mostrado a continuacin:


REPORTE DE LA SIMULACIN
Reporte para la estacin 1
Tiempo promedio de servicio: 0.9970678389295233
Tiempo promedio de espera: 0.0
Reporte para la estacin 2
Tiempo promedio de servicio: 0.9966764405369016
Tiempo promedio de espera: 47.816905102669025
Reporte para la estacin 3
Tiempo promedio de servicio: 0.1025974892555861
Tiempo promedio de espera: 0.0
Reporte para la estacin 4
Tiempo promedio de servicio: 0.8871040144436216
Tiempo promedio de espera: 0.0
Reporte para la estacin 5
Tiempo promedio de servicio: 0.3466970875544188
Tiempo promedio de espera: 0.0
Reporte para la estacin 6
Tiempo promedio de servicio: 0.257103025029875
Tiempo promedio de espera: 0.0

14

B.

Resultado con seguimiento de eventos

El mdulo SimPy.SimulationTrace permite hacer un seguimiento detallado a la ocurrencia de eventos en la simulacin. Al ejecutarlo en el script propuesto (con slo 10
estudiantes por motivos de extensin) se obtienen los siguientes resultados:
0 activate <Estudiante1> at time: 0 prior: False
0 activate <Estudiante2> at time: 0.5 prior: False
0 activate <Estudiante3> at time: 1.0 prior: False
0 activate <Estudiante4> at time: 1.5 prior: False
0 activate <Estudiante5> at time: 2.0 prior: False
0 activate <Estudiante6> at time: 2.5 prior: False
0 activate <Estudiante7> at time: 3.0 prior: False
0 activate <Estudiante8> at time: 3.5 prior: False
0 activate <Estudiante9> at time: 4.0 prior: False
0 activate <Estudiante10> at time: 4.5 prior: False
0 request <Estudiante1> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante1]
0 hold <Estudiante1> delay: 0.3821464630824958
0.3821464630824958 release <Estudiante1> <Estacin1>
. . .waitQ: []
. . .activeQ: []
0.3821464630824958 request <Estudiante1> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante1]
0.3821464630824958 hold <Estudiante1> delay: 0.23617154751125521
0.5 request <Estudiante2> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante2]
0.5 hold <Estudiante2> delay: 0.3821464630824958
0.618318010593751 release <Estudiante1> <Estacin2>
. . .waitQ: []
. . .activeQ: []
0.618318010593751 request <Estudiante1> <Estacin3> priority: default

15

. . .waitQ: []
. . .activeQ: [Estudiante1]
0.618318010593751 hold <Estudiante1> delay: 0.4173366787133764
0.8821464630824958 release <Estudiante2> <Estacin1>
. . .waitQ: []
. . .activeQ: []
0.8821464630824958 request <Estudiante2> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante2]
0.8821464630824958 hold <Estudiante2> delay: 0.23617154751125521
1.0 request <Estudiante3> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante3]
1.0 hold <Estudiante3> delay: 0.3821464630824958
1.0356546893071275 release <Estudiante1> <Estacin3>
. . .waitQ: []
. . .activeQ: []
1.0356546893071275 request <Estudiante1> <Estacin4> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante1]
1.0356546893071275 hold <Estudiante1> delay: 0.5160911426896564
1.118318010593751 release <Estudiante2> <Estacin2>
. . .waitQ: []
. . .activeQ: []
1.118318010593751 request <Estudiante2> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante2]
1.118318010593751 hold <Estudiante2> delay: 0.4173366787133764
1.3821464630824958 release <Estudiante3> <Estacin1>
. . .waitQ: []
. . .activeQ: []
1.3821464630824958 request <Estudiante3> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante3]
1.3821464630824958 hold <Estudiante3> delay: 0.23617154751125521

16

1.5 request <Estudiante4> <Estacin1> priority: default


. . .waitQ: []
. . .activeQ: [Estudiante4]
1.5 hold <Estudiante4> delay: 0.3821464630824958
1.5356546893071272 release <Estudiante2> <Estacin3>
. . .waitQ: []
. . .activeQ: []
1.5356546893071272 request <Estudiante2> <Estacin4> priority: default
. . .waitQ: [Estudiante2]
. . .activeQ: [Estudiante1]
1.5517458319967838 reactivate <Estudiante2> time: 1.5517458319967838 prior: 1
1.5517458319967838 release <Estudiante1> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante2]
1.5517458319967838 request <Estudiante1> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante1]
1.5517458319967838 hold <Estudiante1> delay: 0.15312650336171893
1.5517458319967838 hold <Estudiante2> delay: 0.5160911426896564
1.618318010593751 release <Estudiante3> <Estacin2>
. . .waitQ: []
. . .activeQ: []
1.618318010593751 request <Estudiante3> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante3]
1.618318010593751 hold <Estudiante3> delay: 0.4173366787133764
1.7048723353585027 release <Estudiante1> <Estacin5>
. . .waitQ: []
. . .activeQ: []
1.7048723353585027 request <Estudiante1> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante1]
1.7048723353585027 hold <Estudiante1> delay: 0.1623483436409886
1.8672206789994914 release <Estudiante1> <Estacin6>
. . .waitQ: []

17

. . .activeQ: []
1.8672206789994914 <Estudiante1> terminated
1.8821464630824958 release <Estudiante4> <Estacin1>
. . .waitQ: []
. . .activeQ: []
1.8821464630824958 request <Estudiante4> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante4]
1.8821464630824958 hold <Estudiante4> delay: 0.23617154751125521
2.0 request <Estudiante5> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante5]
2.0 hold <Estudiante5> delay: 0.3821464630824958
2.0356546893071275 release <Estudiante3> <Estacin3>
. . .waitQ: []
. . .activeQ: []
2.0356546893071275 request <Estudiante3> <Estacin4> priority: default
. . .waitQ: [Estudiante3]
. . .activeQ: [Estudiante2]
2.0678369746864402 reactivate <Estudiante3> time: 2.0678369746864402 prior: 1
2.0678369746864402 release <Estudiante2> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante3]
2.0678369746864402 request <Estudiante2> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante2]
2.0678369746864402 hold <Estudiante2> delay: 0.15312650336171893
2.0678369746864402 hold <Estudiante3> delay: 0.5160911426896564
2.118318010593751 release <Estudiante4> <Estacin2>
. . .waitQ: []
. . .activeQ: []
2.118318010593751 request <Estudiante4> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante4]
2.118318010593751 hold <Estudiante4> delay: 0.4173366787133764

18

2.220963478048159 release <Estudiante2> <Estacin5>


. . .waitQ: []
. . .activeQ: []
2.220963478048159 request <Estudiante2> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante2]
2.220963478048159 hold <Estudiante2> delay: 0.1623483436409886
2.3821464630824956 release <Estudiante5> <Estacin1>
. . .waitQ: []
. . .activeQ: []
2.3821464630824956 request <Estudiante5> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante5]
2.3821464630824956 hold <Estudiante5> delay: 0.23617154751125521
2.383311821689148 release <Estudiante2> <Estacin6>
. . .waitQ: []
. . .activeQ: []
2.383311821689148 <Estudiante2> terminated
2.5 request <Estudiante6> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante6]
2.5 hold <Estudiante6> delay: 0.3821464630824958
2.5356546893071275 release <Estudiante4> <Estacin3>
. . .waitQ: []
. . .activeQ: []
2.5356546893071275 request <Estudiante4> <Estacin4> priority: default
. . .waitQ: [Estudiante4]
. . .activeQ: [Estudiante3]
2.5839281173760966 reactivate <Estudiante4> time: 2.5839281173760966 prior: 1
2.5839281173760966 release <Estudiante3> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante4]
2.5839281173760966 request <Estudiante3> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante3]

19

2.5839281173760966 hold <Estudiante3> delay: 0.15312650336171893


2.5839281173760966 hold <Estudiante4> delay: 0.5160911426896564
2.6183180105937507 release <Estudiante5> <Estacin2>
. . .waitQ: []
. . .activeQ: []
2.6183180105937507 request <Estudiante5> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante5]
2.6183180105937507 hold <Estudiante5> delay: 0.4173366787133764
2.7370546207378155 release <Estudiante3> <Estacin5>
. . .waitQ: []
. . .activeQ: []
2.7370546207378155 request <Estudiante3> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante3]
2.7370546207378155 hold <Estudiante3> delay: 0.1623483436409886
2.8821464630824956 release <Estudiante6> <Estacin1>
. . .waitQ: []
. . .activeQ: []
2.8821464630824956 request <Estudiante6> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante6]
2.8821464630824956 hold <Estudiante6> delay: 0.23617154751125521
2.899402964378804 release <Estudiante3> <Estacin6>
. . .waitQ: []
. . .activeQ: []
2.899402964378804 <Estudiante3> terminated
3.0 request <Estudiante7> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante7]
3.0 hold <Estudiante7> delay: 0.3821464630824958
3.035654689307127 release <Estudiante5> <Estacin3>
. . .waitQ: []
. . .activeQ: []
3.035654689307127 request <Estudiante5> <Estacin4> priority: default

20

. . .waitQ: [Estudiante5]
. . .activeQ: [Estudiante4]
3.100019260065753 reactivate <Estudiante5> time: 3.100019260065753 prior: 1
3.100019260065753 release <Estudiante4> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante5]
3.100019260065753 request <Estudiante4> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante4]
3.100019260065753 hold <Estudiante4> delay: 0.15312650336171893
3.100019260065753 hold <Estudiante5> delay: 0.5160911426896564
3.1183180105937507 release <Estudiante6> <Estacin2>
. . .waitQ: []
. . .activeQ: []
3.1183180105937507 request <Estudiante6> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante6]
3.1183180105937507 hold <Estudiante6> delay: 0.4173366787133764
3.253145763427472 release <Estudiante4> <Estacin5>
. . .waitQ: []
. . .activeQ: []
3.253145763427472 request <Estudiante4> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante4]
3.253145763427472 hold <Estudiante4> delay: 0.1623483436409886
3.3821464630824956 release <Estudiante7> <Estacin1>
. . .waitQ: []
. . .activeQ: []
3.3821464630824956 request <Estudiante7> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante7]
3.3821464630824956 hold <Estudiante7> delay: 0.23617154751125521
3.4154941070684606 release <Estudiante4> <Estacin6>
. . .waitQ: []
. . .activeQ: []

21

3.4154941070684606 <Estudiante4> terminated


3.5 request <Estudiante8> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante8]
3.5 hold <Estudiante8> delay: 0.3821464630824958
3.535654689307127 release <Estudiante6> <Estacin3>
. . .waitQ: []
. . .activeQ: []
3.535654689307127 request <Estudiante6> <Estacin4> priority: default
. . .waitQ: [Estudiante6]
. . .activeQ: [Estudiante5]
3.6161104027554094 reactivate <Estudiante6> time: 3.6161104027554094 prior: 1
3.6161104027554094 release <Estudiante5> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante6]
3.6161104027554094 request <Estudiante5> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante5]
3.6161104027554094 hold <Estudiante5> delay: 0.15312650336171893
3.6161104027554094 hold <Estudiante6> delay: 0.5160911426896564
3.6183180105937507 release <Estudiante7> <Estacin2>
. . .waitQ: []
. . .activeQ: []
3.6183180105937507 request <Estudiante7> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante7]
3.6183180105937507 hold <Estudiante7> delay: 0.4173366787133764
3.7692369061171282 release <Estudiante5> <Estacin5>
. . .waitQ: []
. . .activeQ: []
3.7692369061171282 request <Estudiante5> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante5]
3.7692369061171282 hold <Estudiante5> delay: 0.1623483436409886
3.8821464630824956 release <Estudiante8> <Estacin1>

22

. . .waitQ: []
. . .activeQ: []
3.8821464630824956 request <Estudiante8> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante8]
3.8821464630824956 hold <Estudiante8> delay: 0.23617154751125521
3.931585249758117 release <Estudiante5> <Estacin6>
. . .waitQ: []
. . .activeQ: []
3.931585249758117 <Estudiante5> terminated
4.0 request <Estudiante9> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante9]
4.0 hold <Estudiante9> delay: 0.3821464630824958
4.035654689307127 release <Estudiante7> <Estacin3>
. . .waitQ: []
. . .activeQ: []
4.035654689307127 request <Estudiante7> <Estacin4> priority: default
. . .waitQ: [Estudiante7]
. . .activeQ: [Estudiante6]
4.118318010593751 release <Estudiante8> <Estacin2>
. . .waitQ: []
. . .activeQ: []
4.118318010593751 request <Estudiante8> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante8]
4.118318010593751 hold <Estudiante8> delay: 0.4173366787133764
4.132201545445065 reactivate <Estudiante7> time: 4.132201545445065 prior: 1
4.132201545445065 release <Estudiante6> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante7]
4.132201545445065 request <Estudiante6> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante6]
4.132201545445065 hold <Estudiante6> delay: 0.15312650336171893

23

4.132201545445065 hold <Estudiante7> delay: 0.5160911426896564


4.285328048806784 release <Estudiante6> <Estacin5>
. . .waitQ: []
. . .activeQ: []
4.285328048806784 request <Estudiante6> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante6]
4.285328048806784 hold <Estudiante6> delay: 0.1623483436409886
4.382146463082496 release <Estudiante9> <Estacin1>
. . .waitQ: []
. . .activeQ: []
4.382146463082496 request <Estudiante9> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante9]
4.382146463082496 hold <Estudiante9> delay: 0.23617154751125521
4.4476763924477725 release <Estudiante6> <Estacin6>
. . .waitQ: []
. . .activeQ: []
4.4476763924477725 <Estudiante6> terminated
4.5 request <Estudiante10> <Estacin1> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante10]
4.5 hold <Estudiante10> delay: 0.3821464630824958
4.535654689307128 release <Estudiante8> <Estacin3>
. . .waitQ: []
. . .activeQ: []
4.535654689307128 request <Estudiante8> <Estacin4> priority: default
. . .waitQ: [Estudiante8]
. . .activeQ: [Estudiante7]
4.618318010593751 release <Estudiante9> <Estacin2>
. . .waitQ: []
. . .activeQ: []
4.618318010593751 request <Estudiante9> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante9]

24

4.618318010593751 hold <Estudiante9> delay: 0.4173366787133764


4.648292688134722 reactivate <Estudiante8> time: 4.648292688134722 prior: 1
4.648292688134722 release <Estudiante7> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante8]
4.648292688134722 request <Estudiante7> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante7]
4.648292688134722 hold <Estudiante7> delay: 0.15312650336171893
4.648292688134722 hold <Estudiante8> delay: 0.5160911426896564
4.801419191496441 release <Estudiante7> <Estacin5>
. . .waitQ: []
. . .activeQ: []
4.801419191496441 request <Estudiante7> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante7]
4.801419191496441 hold <Estudiante7> delay: 0.1623483436409886
4.882146463082496 release <Estudiante10> <Estacin1>
. . .waitQ: []
. . .activeQ: []
4.882146463082496 request <Estudiante10> <Estacin2> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante10]
4.882146463082496 hold <Estudiante10> delay: 0.23617154751125521
4.963767535137429 release <Estudiante7> <Estacin6>
. . .waitQ: []
. . .activeQ: []
4.963767535137429 <Estudiante7> terminated
5.035654689307128 release <Estudiante9> <Estacin3>
. . .waitQ: []
. . .activeQ: []
5.035654689307128 request <Estudiante9> <Estacin4> priority: default
. . .waitQ: [Estudiante9]
. . .activeQ: [Estudiante8]
5.118318010593751 release <Estudiante10> <Estacin2>

25

. . .waitQ: []
. . .activeQ: []
5.118318010593751 request <Estudiante10> <Estacin3> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante10]
5.118318010593751 hold <Estudiante10> delay: 0.4173366787133764
5.164383830824379 reactivate <Estudiante9> time: 5.164383830824379 prior: 1
5.164383830824379 release <Estudiante8> <Estacin4>
. . .waitQ: []
. . .activeQ: [Estudiante9]
5.164383830824379 request <Estudiante8> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante8]
5.164383830824379 hold <Estudiante8> delay: 0.15312650336171893
5.164383830824379 hold <Estudiante9> delay: 0.5160911426896564
5.317510334186098 release <Estudiante8> <Estacin5>
. . .waitQ: []
. . .activeQ: []
5.317510334186098 request <Estudiante8> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante8]
5.317510334186098 hold <Estudiante8> delay: 0.1623483436409886
5.479858677827086 release <Estudiante8> <Estacin6>
. . .waitQ: []
. . .activeQ: []
5.479858677827086 <Estudiante8> terminated
5.535654689307128 release <Estudiante10> <Estacin3>
. . .waitQ: []
. . .activeQ: []
5.535654689307128 request <Estudiante10> <Estacin4> priority: default
. . .waitQ: [Estudiante10]
. . .activeQ: [Estudiante9]
5.680474973514036 reactivate <Estudiante10> time: 5.680474973514036 prior: 1
5.680474973514036 release <Estudiante9> <Estacin4>
. . .waitQ: []

26

. . .activeQ: [Estudiante10]
5.680474973514036 request <Estudiante9> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante9]
5.680474973514036 hold <Estudiante9> delay: 0.15312650336171893
5.680474973514036 hold <Estudiante10> delay: 0.5160911426896564
5.833601476875755 release <Estudiante9> <Estacin5>
. . .waitQ: []
. . .activeQ: []
5.833601476875755 request <Estudiante9> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante9]
5.833601476875755 hold <Estudiante9> delay: 0.1623483436409886
5.995949820516743 release <Estudiante9> <Estacin6>
. . .waitQ: []
. . .activeQ: []
5.995949820516743 <Estudiante9> terminated
6.196566116203693 release <Estudiante10> <Estacin4>
. . .waitQ: []
. . .activeQ: []
6.196566116203693 request <Estudiante10> <Estacin5> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante10]
6.196566116203693 hold <Estudiante10> delay: 0.15312650336171893
6.3496926195654115 release <Estudiante10> <Estacin5>
. . .waitQ: []
. . .activeQ: []
6.3496926195654115 request <Estudiante10> <Estacin6> priority: default
. . .waitQ: []
. . .activeQ: [Estudiante10]
6.3496926195654115 hold <Estudiante10> delay: 0.1623483436409886
6.5120409632064 release <Estudiante10> <Estacin6>
. . .waitQ: []
. . .activeQ: []
6.5120409632064 <Estudiante10> terminated

27



REPORTE DE LA SIMULACIN

Reporte para la
Tiempo promedio
Tiempo promedio
Reporte para la
Tiempo promedio
Tiempo promedio
Reporte para la
Tiempo promedio
Tiempo promedio
Reporte para la
Tiempo promedio
Tiempo promedio
Reporte para la
Tiempo promedio
Tiempo promedio
Reporte para la
Tiempo promedio
Tiempo promedio

estacin 1
de servicio: 0.5868305577954078
de espera: 0.0
estacin 2
de servicio: 0.362669013978329
de espera: 0.0
estacin 3
de servicio: 0.6408692467866298
de espera: 0.0
estacin 4
de servicio: 0.7925182682443438
de espera: 0.11119423620425224
estacin 5
de servicio: 0.23514364271800034
de espera: 0.0
estacin 6
de servicio: 0.2493048562781942
de espera: 0.0

28