download: pte_ej2.py
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
""" Ejercicio 2:
En un proceso de fabricación las piezas llegan al taller,
son procesadas por una máquina y luego son inspeccionadas.
El 80% de las piezas inspeccionadas van al depósito de
mercaderías terminadas. Del resto el 40% va al deposito de
piezas fallidas y el resto se reprocesa. Se desea conocer cuanto
tiempo tomará aceptar 500 piezas terminadas, y que longitud máxima
de cola hubo en la máquina durante el proceso. Se conoce la
distribución de los tiempos de llegada, de procesamiento y de inspección.
Eventos principales:
* Llegada de una pieza
* Fin de procesamiento
* Fin de inspección
"""
from random import random, normalvariate as normal, uniform as uniforme, expovariate as exponencial
import pte
OCUPADO = 1
LIBRE = 0
cola_p = 0
cola_i = 0
max_cola_p = 0
piezas_aceptadas = 0
piezas_rechazadas = 0
maq_proc = LIBRE
inspector = LIBRE
def principal():
pte.PPE(llegada,0)
while(piezas_aceptadas < 500):
pte.SPE()
print "500 piezas fueron aceptadas en %.2f unidades de tiempo.\n" % pte.t
print "Máximo tamaño de la cola para procesamiento %i.\n" % max_cola_p
def llegada():
global maq_proc, cola_p, OCUPADO, max_cola_p
prox = normal(1,0.1)
pte.PPE(llegada, prox)
if maq_proc == OCUPADO:
cola_p += 1
max_cola_p = max(max_cola_p, cola_p)
else:
maq_proc = OCUPADO
t_proc = uniforme(0.005, 0.02)
pte.PPE(fin_procesamiento, t_proc)
def fin_procesamiento():
global cola_p, maq_proc, LIBRE, inspector, OCUPADO, cola_i
if cola_p == 0:
maq_proc = LIBRE
else:
cola_p -= 1
t_proc = uniforme(0.005, 0.02)
pte.PPE(fin_procesamiento, t_proc)
if inspector == OCUPADO:
cola_i +=1
else:
inspector = OCUPADO
t_ins = exponencial(0.5)
pte.PPE(fin_inspeccion, t_ins)
def fin_inspeccion():
global cola_i, inspector, LIBRE, piezas_aceptadas, piezas_rechazadas
if cola_i == 0:
inspector = LIBRE
else:
cola_i -=1
t_ins = exponencial(0.5)
pte.PPE(fin_inspeccion, t_ins)
if random() <= 0.8:
piezas_aceptadas += 1
elif random() <= 0.4:
piezas_rechazadas += 1
else:
pte.PPE(llegada,pte.t)
if __name__ == "__main__":
principal()