Está en la página 1de 6

FUNCION MM2

MM2<-function(landa,mu1,mu2,T){
#Definimos las variables, simulando la primera entrada.
#tiempo es el instante de la simulacin en el que nos encontramos
tiempo<-0
vtiempo<-c(tiempo)
#suceso es 1 si se produce una entrada y 1 si se produce una salida
suceso<-1
vsuceso<-c(suceso)
#s1 (s2) es 1 si es servidor 1 (servidor 2) est ocupado, si esta vac!o
s1<-1
vs1<-c(s1)
s2<-0
vs2<-c(s2)
#en"ola es el n# de clientes que estn en espera de ser atendidos
enCola<-0
venCola<-c(enCola)
#en$istema es el n# de clientes que estn el sistema en cada momento
enSistema<-1
venSistema<-c(enSistema)
#entrada es el instante en el que un cliente entra a un servidor
entrada<-0
ventrada<-c(entrada)
#salida es el instante en el que un cliente sale de un servidor
salida<-rexp(1,mu1)
vsalida<-c(salida)
#libre1 (libre2) es el instante en el que el servidor 1 (servidor 2) queda libre
libre1<-salida
vlibre1<-c(libre1)
libre2<
vlibre2<-c(libre2)
#si%&ntrada es el momento en el que se produce la si%uiente entrada al sistema
si!ntrada<-entrada"rexp(1,landa)
vsi!ntrada<-c(si!ntrada)
#si%$alida es el momento en el que se producir la si%uiente salida del sistema
siSalida<-salida
vsiSalida<-c(siSalida)
#servidor es 1 cuando se produce una salida del servidor 1, 2 cuando se produce una
salida del servidor 2
#'( cuando no se produce nin%una salida
servidor<-#$
vservidor<-c(servidor)
#$imulamos )asta que lle%uemos al instante * parmetro de la funcin
%&ile(tiempo<T){
#$e produce una entrada
if(si!ntrada<siSalida){
tiempo<-si!ntrada
vtiempo<-c(vtiempo,tiempo)
suceso<-1
vsuceso<-c(vsuceso,suceso)
servidor<-#$
vservidor<-c(vservidor,#$)
enSistema<-enSistema"1
venSistema<-c(venSistema,enSistema)
#$e pueden dar varios casos+
#que )aya al%,n servidor vac!o,
#el cliente entra directamente al servidor
if(s1''0 )) s2''0){
enCola<
venCola<-
entrada<-
ventrada<-
#el primer servidor es el que est vac!o, entra al servidor
1
if(s1''0){
s1<
vs1<-
vs2<-
#*iempo de $ervicio
salida<-entrada"rexp(1,mu1)
vsalida<-c(vsalida,salida)
#estar ocupado )asta que se produ-ca la salida
libre1<-salida
vlibre1<-c(vlibre1,libre1)
vlibre2<-c(vlibre2,libre2)
#la si%uiente salida se produce cuando uno de los
dos servidores
#quede vac!o
siSalida<-min(siSalida,libre1)
vsiSalida<-c(vsiSalida,siSalida)
* #fin al%,n servidor vac!o, servidor 1
#el servidor 2 es el que est vac!o, entonces pasa a estar
ocupado
else{
s2<-
vs2<-
vs1<-
#*iempo de $ervicio
salida<-entrada"rexp(1,mu2)
vsalida<-c(vsalida,salida)
#estar ocupado )asta que se produ-ca la salida
libre2<-
vlibre1<-
vlibre2<-
# la si%uiente salida, ser la del servidor que tarde
menos
siSalida<-min(siSalida,libre2)
vsiSalida<-c(vsiSalida,siSalida)
* #fin al%,n servidor vac!o, servidor 2
* #fin al%,n servidor vac!o
#caso2+ cuando se produce la lle%ada, no )ay nin%,n servidor
disponible
else{
#el cliente espera, y el sistema se queda tal como estaba
enCola<-
venCola<-
vs1<-
vs2<-
vlibre1<-
vlibre2<-
entrada<-
ventrada<-
salida<-#$
vsalida<-c(vsalida,salida)
siSalida<-siSalida
vsiSalida<-c(vsiSalida,siSalida)
* #fin cuando se produce la lle%ado no )ay servidor disponible
#$e %enera la si%uiente entrada al sistema
si!ntrada<-tiempo"rexp(1,landa)
vsi!ntrada<-c(vsi!ntrada,si!ntrada)
* #fin entrada
#$e produce una salida
else{
tiempo<-siSalida
vtiempo<-c(vtiempo,tiempo)
suceso<- -1
vsuceso<-c(vsuceso,suceso)
enSistema<-enSistema-1
venSistema<-c(venSistema,enSistema)
#.qu/ servidor se queda disponible0
servidor<-1+(tiempo''libre1)"2+(tiempo''libre2)
vservidor<-c(vservidor,servidor)
#$e pueden dar 2 casos,
#que no )aya nin%,n cliente esperando a ser atendido
if(enCola<1){
#1a cola se queda vac!a
enCola<-0
venCola<-c(venCola,enCola)
entrada<-#$
salida<-#$
ventrada<-c(ventrada,entrada)
vsalida<-c(vsalida,salida)
#el servidor 1 es el que )a quedado libre
if(servidor''1){
s1<-
vs1<-
vs2<-
libre1<-
vlibre2<-c(vlibre2,libre2)
vlibre1<-c(vlibre1,libre1)
#la si%uiente salida ser la del servidor 2 s! esta
ocupado
#y nin%una si no lo est (asi%no t21,
#para que se permitan ms entradas)
siSalida<-ifelse(s2''0,10000,libre2)
vsiSalida<-c(vsiSalida,siSalida)
* #fin servidor 1 libre
#si no, es el servidor 2 el que queda vac!o
else{
s2<-0
vs1<-c(vs1,s1)
vs2<-c(vs2,s2)
libre2<-
vlibre2<-c(vlibre2,libre2)
vlibre1<-c(vlibre1,libre1)
#la si%uiente salida ser la del servidor 1 s! esta
ocupado
#y nin%una si no lo est (asi%no t21,
#para que se permitan ms entradas)
siSalida<- ifelse(s1''0,10000,libre1)
vsiSalida<-c(vsiSalida,siSalida)
* #fin servidor 2 libre
* #fin la cola queda vac!a
#caso 2, )ab!a clientes esperando a ser atendidos
else{
#se produce la entrada del primer cliente de la cola
entrada<-tiempo
ventrada<-c(ventrada,entrada)
vs1<-c(vs1,s1)
vs2<-c(vs2,s2)
#*iempo de $ervicio, servidor 1
if(servidor''1){
salida<-
vsalida<-
libre1<-salida
vlibre1<-c(vlibre1,libre1)
vlibre2<-c(vlibre2,libre2)
siSalida<-min(libre1,libre2)
vsiSalida<-c(vsiSalida,siSalida)
3#fin *iempo $ervicio servidor 1
#*iempo de $ervicio, servidor 2
else{
salida<-
vsalida<-c(vsalida,salida)
libre2<-salida
vlibre1<-c(vlibre1,libre1)
vlibre2<-c(vlibre2,libre2)
siSalida<-min(libre1,libre2)
vsiSalida<-c(vsiSalida,siSalida)
*#fin tiempo de servicio, servidor 2
#la lon%itud de la cola disminuye en 1
enCola<-
venCola<-
* #fin )abia clientes esperando en la cola
* #fin salida
* #fin del bucle 4)ile
#almacenamos los resultados en la matri- $im
sim<-cbind(vtiempo,vsuceso,vs1,vs2,vservidor,venCola,venSistema)
#*5&678$
#"alculamos el tiempo que pasa cada cliente en el sistema y en la cola
#&9traemos las entradas de cada cliente, vector entrada$istema
entradaSistema<-vtiempo,vsuceso''1-
#&9traemos las entradas en un servidor, entrada$ervidor
entradaServidor<-ventrada,!is.na(ventrada)-
#&9traemos las salidas del sistema, salida$ervidor
salidaServidor<-vsalida,!is.na(vsalida)-
#:i;amos la dimensin de los vectores a la m!nima lon%itud
lent&(entradaSistema)<-
min(lent&(entradaSistema),lent&(entradaServidor),lent&(salidaServidor))
lent&(entradaServidor)<-
min(lent&(entradaSistema),lent&(entradaServidor),lent&(salidaServidor))
lent&(salidaServidor)<-
min(lent&(entradaSistema),lent&(entradaServidor),lent&(salidaServidor))
#&l tiempo que pasa cada cliente en el sistema es salida$ervidor<
entrada$istema
tiempoSistema<-salidaServidor-entradaSistema
#&l tiempo que pasa cada cliente esperando es entrada$ervidor<entrada$istema
tiempoCola<-entradaServidor-entradaSistema
#"reamos una matri- 6atri-*iempos
Matri/Tiempos<-
cbind(entradaSistema,entradaServidor,salidaServidor,tiempoSistema,tiempoCola)
#$5*=("58' D&1 $5$*&6( "=('D8 :5'(15>( 1( $56=1("58'
#*iempo
TSimulacion<-tiempo
#'# de clientes que )an pasado por el sistema
#Clientes<-lent&(entradaSistema)
#"lientes en el $istema
#ClientesSistema<-enSistema
#"lientes en cola
#ClientesCola<-enCola
#$ervidores, 1 si estn ocupados, si estn libres
Servidor1<-s1
Servidor2<-s2
#6atri-$ituacion
Matri/Situacion<-
cbind(TSimulacion,#Clientes,#ClientesSistema,#ClientesCola,Servidor1,Servidor2)
#7?8@(@515D(D &' &A=515@?58
*iempoestadoB<
0<-c(0)
1<-c(0)
for(i in 12 (max(venSistema)"1)){
0,i-<-sum
1,i-<-i-1
*
prob<-cbind(1,0)
#&:5"5&'"5( D&1 $5$*&6(
#'# medio de "lientes en el $istema
#<-
#'# medio de "lientes en "ola
#3<-
#*iempo 6edio en el $istema
Ts<-mean(tiempoSistema)
#*iempo 6edio en la "ola
T3<-mean(tiempoCola)
#6atri-&ficiencia
Matri/!ficiencia<-cbind(#,#3,Ts,T3)
#Devuelve los resultados
return(sim,Matri/Tiempos,Matri/Situacion,prob,Matri/!ficiencia)
* #:5' :='"58'
!n esta pr4ctica simulamos el sistema M5M52
Se6n los valores de 71 8 72 obtenemos el sistema &omo9neo 8 el &etero9neo. !n los
dos casos mantenemos la intensidad de tr4fico 8 el tiempo de simulaci:n.
;o mismo 3ue en la pr4ctica 1 &acemos la simulaci:n para T suficientemente rande 8
comparamos los resultados de la simulaci:n con los resultados te:ricos para ver el
rado de aproximaci:n, tanto de forma anal<tica como r4fica.
Calculamos el n6mero de periodos de ocupaci:n 8 el m4ximo en cada periodo para el
sistema. Comparamos con el resultado obtenido en el sistema M5M51 con la misma
intensidad de tr4fico.
Tambi9n podemos verificar si los clientes servidos por el primer servidor &an
permanecido m4s o menos tiempo en el sistema 8 en la cola. 0ara ello debemos separar
los clientes se6n el servidor 3ue los &a8a servido.
Calculamos el tiempo de ocupaci:n de cada servidor.

También podría gustarte