TD3 : Etude de lois sur les files FIFO

Auteurs : El Hadji Malick FALL & Adji Ndèye Ndaté SAMBE

Pour l'implémentation, nous avons repris les principes et formules évoqués dans le cours.

{An} suite des inter-arrivées

{Sn} suite des temps de services

T1(n) = date d'arrivée du nième client

T2(n) = date de départ du nième client

A t=0 le système est vide

T1(n)=T1(n-1) + An

T2(n)=max(T1(n),T2(n-1)) + Sn

set.seed(10)
library(ggplot2)
# lambda=taux d'arrivée
service <- function(law_lamb) {
    if (law_lamb == "exp") {
        return(rexp(1, 1))
    }
    if (law_lamb == "unif") {
        return(runif(1, 0, 1))
    }
    if (law_lamb == "det") {
        return(runif(1, 1, 1))
    }
    if (law_lamb == "erlang") {
        return(rgamma(1, shape = 1))
    }
}

interarrivee <- function(lambda) {
    return(rexp(1, lambda))
}

simulfa = function(N, lamb, law) {
    t1 <- c(1:N)
    t2 <- c(1:N)
    S <- c(1:N)
    A <- c(1:N)
    # A = rexp(N,lamb)
    R <- c(1:N)

    for (i in 1:N) {
        S[i] <- service(law)
        A[i] <- interarrivee(lamb)
    }

    t1[1] <- 0
    t2[1] <- t1[1] + S[1]

    for (i in 2:N) {
        t1[i] <- t1[i - 1] + A[i]
        t2[i] <- max(t1[i], t2[i - 1]) + S[i]
    }

    for (i in 1:N) {
        R[i] <- t2[i] - t1[i]  #temps de sortie - temps d'entrée
    }

    data.frame(lambda = lamb, R = mean(R), ci = 2 * sd(R)/sqrt(N), loi = law)  #ci pour calculer l'intervalle de confiance à 95%

}
set.seed(10)
tracelambda <- function(law) {
    df = data.frame()
    for (lambda in seq(0.1, 0.9, by = 0.1)) {
        df = rbind(df, simulfa(100, lambda, law))
    }
    df
}
set.seed(10)
tracer <- function() {
    tab <- c()
    tab[1] = "exp"
    tab[2] = "det"
    tab[3] = "unif"
    tab[4] = "erlang"

    datafinal = data.frame()

    for (i in 1:4) {
        datafinal = rbind(datafinal, tracelambda(tab[i]))
    }

    datafinal

}

daf = tracer()
set.seed(10)
ggplot(data = daf, aes(x = lambda, y = R, ymin = R - ci, ymax = R + ci, color = factor(loi))) + 
    geom_point() + geom_line() + geom_errorbar(width = 0.01)

plot of chunk unnamed-chunk-4

Pour les courbes que nous obtenons (sous réserve qu'elles soient justes), nous pouvons observer que la moyenne de traitement ainsi que les intervalles de confiance sont plus importants dans le cas d'une loi d'erlang du service. On note néanmoins une stabilité pour la loi uniforme. Le temps moyen d'attente n'explose pas contrairement au cas de la loi d'erlang. Concernant la loi exponentielle et la loi déterministe on dénote une croissance des courbes, parsemée de quelques variations,suivant lambda. Mais comme les intervalles de confiance sont assez importants, nous pouvons supposer que ces courbes sont réellement monotones, ce qui signifie le paramètre lambda a donc une forte influence sur le temps moyen dans le cas dans ces deux lois.