In [ ]:
import numpy as np
import matplotlib.pyplot as plt
import math
from matplotlib.pylab import hist, show
from scipy.integrate import quad
funacu=[]
x=[]
px=[]
def factorial(x,n):
if (n>0):
x=factorial(x,n-1)
x=x*n
else:
x=1
return x
def congruencial(a,b,m,x0,n):
xn=0.0
un=0.0
list = []
for i in range(0,n):
xn=(a*x0 + b)%m
un=xn/float(m)
#print un
list.insert(i,un)
x0=xn
return list
def generaTablas(n):
metodo=congruencial(893434454.0,5634543.0,2147483647.0,245654.0,n)
tiempoAcumSer=0.0
numClientesLlegaron=[]
numClientesAtendidos=[]
numClientesCola=[]
numClientesenServ=[]
tiempoEspera=[]
tiempoLlegada=[]
tll=[]
tsal=[]
tiempoServicio=[]
totalClientes=0
temp=0.0
acumLleg=0.0
acumAtend=0.0
promedio=0.0
funacu.append(0)
lamda=input('Ingrese el valor para el parametro lamda')
miu=input('Ingrese el valor para el parametro miu')
sigma=input('Ingrese el valor para el parametro sigma')
poisson(lamda)
print 'No. Clientes llegando/hora: '
for i in range(len(metodo)):
print 'No. Clientes en ',(i+1),' horas: '
for j in range(len(funacu)-1):
if(metodo[i]>funacu[j] and metodo[i]<=funacu[j+1]):
print x[j],' Clientes'
numClientesLlegaron.append(x[j])
totalClientes=totalClientes+x[j]
print 'Tiempos de servicio'
arreNormal=normal(miu,sigma,totalClientes,n)
inicio=0
fin=0
for i in range(len(numClientesLlegaron)):
fin=inicio+numClientesLlegaron[i]
print 'Tiempo promedio de servicio en ',(i+1),' horas: '
for j in range(inicio,fin):
promedio=promedio+arreNormal[j]
inicio=fin
tiempoServicio.append(promedio/numClientesLlegaron[i])
print tiempoServicio[i],' minutos'
promedio=0.0
for i in range(len(arreNormal)):
tiempoAcumSer=tiempoAcumSer+arreNormal[i]
tiempoAcumSer=0.0
cantClientesAten=-1;
horas=1;
for i in range(len(arreNormal)):
print 'tiempo acumulado servicio por hora: ',tiempoAcumSer
if(tiempoAcumSer<60.0):
cantClientesAten=cantClientesAten+1
tiempoAcumSer=tiempoAcumSer+arreNormal[i]
else:
dif=tiempoAcumSer-60.0
tiempoAcumSer=dif
print 'Clientes atendidos en ',horas,' horas: ',cantClientesAten
numClientesAtendidos.append(cantClientesAten)
cantClientesAten=0
horas=horas+1
print 'Clientes atendidos en ',(horas),' horas'
print cantClientesAten
numClientesAtendidos.append(cantClientesAten)
for i in range(len(numClientesLlegaron)):
print 'Tiempo promedio de llegadas en ',(i+1),' horas: ',((1.0/numClientesLlegaron[i])*60.0),' minutos'
tiempoLlegada.append((1.0/numClientesLlegaron[i])*60.0)
acumLleg=acumLleg+numClientesLlegaron[i]
acumAtend=acumAtend+numClientesAtendidos[i]
if(acumLleg>acumAtend):
numClientesenServ.append(1.0)
else:
numClientesenServ.append(0.0)
print 'Clientes en cola en ',(i+1),' horas: ',(acumLleg-(acumAtend+numClientesenServ[i]))
print 'Clientes en servicio en ',(i+1),' horas: ',(numClientesenServ[i])
llegadaAcum=0.0
for i in range (len(numClientesLlegaron)):
llegadaAcum=llegadaAcum+tiempoLlegada[i]
tll.append(llegadaAcum)
def poisson(lamda):
acumulado=0.0
for i in range(70):
valor=(math.exp((-1)*(lamda))*(lamda**i))/(factorial(1,i)+0.0)
x.append(i)
px.append(valor)
acumulado+=valor
funacu.append(acumulado)
def funcErrorInv(x):
sig=-1.0;
w=math.log(1-(x**2));
term1=18.75537-(2.47197*w)+0.25*(w**2)
if(x>0.0):
sig=1
if(x<0.0):
sig=-1
if(x==0.0):
sig=0
total=sig*(((term1)**0.5) - 4.33074 - 0.5*w)**0.5
return total
def normal(miu,sigma,n,clientes):
normal=[]
for i in range(n):
total=miu+(sigma*(2**0.5))*funcErrorInv((2.0*(congruencial(2354343.0,35434343.0,214748.0,33434343.0,n)[i]))-1.0)
normal.append(total)
print 'Tiempo de servicio para cliente ',i,': ',total,' minutos'
return normal
generaTablas(10)
In [ ]:
In [ ]: