Panaderia

2
from  SimPy.Simulation import * from  SimPy.SimPlot import * import  random #Componentes del Modelo class  Panaderia : #Entidad Panaderia     def  __init__ ( self ,Nhornos,toMonitor):         self .inventario=Level(name= "baguete en inventario" ,monitored=toMonitor)         for  i in  range (Nhornos):             hor=Horno()             activate(hor,hor.hornear(capacidad=TamLote,panaderia= self )) class  Horno (Process): #Entidad Horno     def  hornear ( self ,capacidad,panaderia): #PEM para el horneado         while  now()+ Tmax < Tcierre:             yield  hold, self ,r.uniform(Tmin,Tmax)             yield  put, self ,panaderia.inventario,capacidad class  Cliente (Process): #Cliente     def  Compra ( self ,Tipocli,panaderia): #PEM para la compra         Tentrada=now()         yield  get, self ,panaderia.inventario,r.choice(compra[Tipocli])         espera[Tipocli].append(now()Tentrada) class  Generocliente (Process): #Cliente     def  generar ( self ,Tipocli,panaderia):         while  True :             yield  hold, self ,r.expovariate( 1 . 0 /Tllegada[Tipocli])             if  now()<(Tiempoabrir+Tantes):                 c=Cliente(Tipocli)                 activate(c,c.Compra(Tipocli,panaderia=panaderia)) ##Modelo def  model ():     toMonitor= False     initialize()     if  dias==(Ndias 1 ): toMoni= True     else : toMoni= False     b=Panaderia(Nhornos=Nhornos,toMonitor=toMoni)     for  Tipo in  [ "detal" , "mayor" ]:         cg=Generocliente()         activate(cg,cg.generar(Tipocli=Tipo,panaderia=b),delay=Tantes)     simulate(until=Tantes + Tiempoabrir)     return  b #Datos de experimento Nhornos= 3 TamLote= 40 Tmin= 25 / 60 .; Tmax= 30 / 60 . Tllegada={ "detal" : 1 . 0 / 40 , "mayor" : 1 . 0 / 4 } 1

description

Simpy - Python

Transcript of Panaderia

  • fromSimPy.Simulationimport*fromSimPy.SimPlotimport*importrandom

    #ComponentesdelModeloclassPanaderia:#EntidadPanaderiadef__init__(self,Nhornos,toMonitor):self.inventario=Level(name="bagueteeninventario",monitored=toMonitor)foriinrange(Nhornos):hor=Horno()activate(hor,hor.hornear(capacidad=TamLote,panaderia=self))

    classHorno(Process):#EntidadHornodefhornear(self,capacidad,panaderia):#PEMparaelhorneadowhilenow()+Tmax

  • compra={"detal":[1,2,3],"mayor":[20,40,60]}Tiempoabrir=8;Tantes=1;Tcierre=Tantes+TiempoabrirNdias=50r=random.Random(12371)

    #Experimentoespera={}espera["detal"]=[];espera["mayor"]=[]fordiasinrange(Ndias):panaderia=model()#AnalisisysalidaforTipoin["detal","mayor"]:print"\nPromediodeesperaparaClientesal%s:%4.2fhoras\n"%(Tipo,(1.0*sum(espeprint"LaesperamaslargaparaClientesal%s:%4.lfhoras\n"%(Tipo,max(espera[TipnrLong=len([1forxinespera[Tipo]ifx>0.25])nrCust=len(espera[Tipo])print"Porcentajedeclientesal%squetienenqueesperarpormasde0.25horas:%

    #Graficandolosresultadosplt=SimPlot()plt.plotStep(panaderia.inventario.bufferMon,title="Numerodebaguettseninventarioenplt.mainloop()print"Numerodeclientesaldetalenlos100diasquecompraronbaguetes:",len(esperaprint"Numerodeclientesalmayorenlos100diasquecompraronbaguetes:",len(espera

    2