%========================================================================== %SIMULACIÖN DE MONTE CARLO: COLA EN UNA FOTOCOPIADORA %Se cuenta con una fotocopiadora a la que acuden alumnos donde: % 1. El tiempo medio por copia es 15 segundos % 2. La tasa media de llegada de los alumnos es 3 aprox. minutos % 3. Se sacan entre 6 y 10 copias %Tomar una muestra aleatoria de 10 alumnos y estimar: % a. Tiempo medio entre llegadas % b. Tiempo medio de servicio % c. Tiempo medio ocioso del equipo % d. Cantidad máxima de alumnos en la cola %NOTA: La unidad de tiempo es el MINUTO %========================================================================== clear; close all; clc; %INICIALIZACIÖN DE VARIABLES----------------------------------------------- %Cantidad de Alumnos N=1000; %Generación de los tiempos de llegada para simular 1 llegada cada 3 minutos %en PROMEDIO conforme una Distribución Exponencial surgida de una función %de distribución POISSON con lambda=1/3 llegadas/minuto. Se obtiene un vector %que indica los minutos que pasaron hasta hasta la llegada de cada alumno. lambda=3; TpoLlegada=exprnd(lambda,1,N); %TpoLlegada=[1.2 9.8 1.7 4.1 1.3 7.0 2.9 1.4 11.0 1.5]; %Función de distribución cantidad de copias entre 6 y 10 (UNIFORME). Se %obtiene un vector que indica el número de copias que sacará cada alumno. CantCopias=fix(unifrnd(6,10,1,N)); %CantCopias=[6 7 9 10 6 10 7 6 10 7]; %Tiempo de copias. Se obtiene un vector que indicará el tiempo que tardará %cada alumno en sacar sus copias Tpo_1C=15/60; TpoCopias=Tpo_1C*CantCopias; %Almacenamiento de datos %Hora de llegada. Se considera hora de inicio de simulación en t=0 HoraLLegada=zeros(1,N); %Hora de finalización (llegada + espera + tiempo de copias) FinServicio=zeros(1,N); %Hora de Inicio del servicio (llegada + espera) HoraIniServ=zeros(1,N); %Tiempo libre de máquina (inicio servicio-último servicio) TpoMaqLibre=zeros(1,N); %Tiempo de espera (Inicio de servicio - Llegada) TpoEspera=zeros(1,N); %Cantidad de alumnos en cola ante la llegada de uno nuevo EnCola=zeros(1,N); %PROCESO DE SIMULACIÓN----------------------------------------------------- %Carga del primer alumno: La máquia se encuentra vacía (nadie en cola). %La hora de llegada coincide con el tiempo de llegada pues arranca de 0. %El inicio de servicio coincide con el tpo de llegada (máquina vacía). %La espera es sólo el tiempo de copias. La máquina estuvo libre hasta el %tiempo de llegada del primer alumno. HoraLlegada(1)=TpoLlegada(1); HoraIniServ(1)=TpoLlegada(1); FinServicio(1)=TpoLlegada(1)+TpoCopias(1); TpoEspera(1)=TpoCopias(1); TpoMaqLibre(1)=TpoLlegada(1); EnCola(1)=0; %Visualización encabezados clc; fprintf(' Alumno Hora Llegada Inicio Servicio Fin Servicio Espera Máquina Inactiva Gente en Cola \n'); fprintf('%6.1f \t\t%6.1f \t\t%6.1f \t\t%6.1f \t%6.1f \t%6.1f \t\t%6.1f \n',... 1,HoraLlegada(1),HoraIniServ(1),FinServicio(1),TpoEspera(1),TpoMaqLibre(1),EnCola(1)); for k=2:N, %Nueva llegada a los n minutos. Se toma la última hora de llegada y se %le adicionan los minutos que pasaron hasta el nuevo arribo HoraLlegada(k)=HoraLlegada(k-1)+TpoLlegada(k); %Hora de inicio del servicio. Si la máquina está libre (hora de llegada %mayor a hora de fin del último servicio) se asigna la hora de llegada al %inicio del servicio. En caso contrario sólo se podrá comenzar luego del %fin de servicio anterior. if HoraLlegada(k)>FinServicio(k-1) HoraIniServ(k)=HoraLlegada(k); else HoraIniServ(k)=FinServicio(k-1); end %Hora de finalización del servicio: Inicio del servicio + Tiempo de copias FinServicio(k)=HoraIniServ(k)+TpoCopias(k); %Tpo de espera en el sistema: Fin de servicio - Hora de llegada TpoEspera(k)=FinServicio(k)-HoraLlegada(k); %Tpo de máquina libre: Hora de llegada - Fin del servicio anterior. Si %da menor que cero, no ha finalizado el alumno anterior por lo que se %asigna tiempo 0. TpoMaqLibre(k)=HoraLlegada(k)-FinServicio(k-1); if TpoMaqLibre(k)<0 TpoMaqLibre(k)=0; end %Cálculo de gente en cola al momento de la llegada EnCola(k)=0; %Para calcular la gente que está en la cola hasta el momento se recorre %la lista. Si en cada posición la hora de llegada es inferior a la hora %de fin del servicio anterior, significa que hay alumnos en espera. for n=1:k-1 if FinServicio(n)>HoraLlegada(k) EnCola(k)=EnCola(k)+1; end end %Visualización de datos fprintf('%6.1f \t\t%6.1f \t\t%6.1f \t\t%6.1f \t%6.1f \t%6.1f \t\t%6.1f \n',... k,HoraLlegada(k),HoraIniServ(k),FinServicio(k),TpoEspera(k),TpoMaqLibre(k),EnCola(k)); end %EVALUACION DE LA SIMULACIÓN----------------------------------------------- %En todos los ítem se evalúan media y desvio de: %Tpo de llegadas, Tpo de espera, Tpo de Máquina libre, Valor máximo de alumnos %en espera fprintf('------------------------------------------------------------------------------------------------ \n'); fprintf('Tpo Medio Llegadas Tpo medio Espera Tpo Medio Máq. Libre Cola Máxima \n'); fprintf(' %2.1f+/-%2.1f \t\t%2.1f+/-%2.1f \t\t\t%2.1f+/-%2.1f \t\t %2.1f \n',... mean(TpoLlegada),std(TpoLlegada), mean(TpoEspera),std(TpoEspera), mean(TpoMaqLibre),std(TpoMaqLibre),max(EnCola));