TD Queue

On crée une data frame pour simuler une file simple (on prend des lois exponentielles)

genereDFExpo <- function(N, lambdaMin, lambdaMax, lambdaPas, muMin, muMax, muPas) {
    df = data.frame()
    for (lambda in seq(lambdaMin, lambdaMax, lambdaPas)) {
        for (mu in seq(muMin, muMax, muPas)) {
            A <- rexp(N, lambda)
            S <- rexp(N, mu)
            T1 <- c()
            T2 <- c()
            R <- c()

            T1[1] = 0
            T2[1] = 0
            R[1] = 0

            for (i in 2:N) {
                T1[i] = T1[i - 1] + A[i]
                T2[i] = max(T1[i], T2[i - 1]) + S[i]
                R[i] = T2[i] - T1[i]

            }

            df = rbind(df, data.frame(A = A, S = S, T1 = T1, T2 = T2, R = R, 
                lambda = lambda, mu = mu, loi = "expo"))
        }
    }

    df
}

# function(N,lambdaMin,lambdaMax,lambdaPas,muMin,muMax,muPas)
N <- 1000
df <- genereDFExpo(N, 0.1, 1, 0.05, 1, 1, 0.1)
library(plyr)
df_adapted <- ddply(df, c("lambda", "mu"), summarise, Time = mean(R), CI = sd(R)/sqrt(length(R)), 
    nR = length(R))
df_adapted
##    lambda mu   Time      CI   nR
## 1    0.10  1  1.099 0.03564 1000
## 2    0.15  1  1.132 0.03436 1000
## 3    0.20  1  1.184 0.03872 1000
## 4    0.25  1  1.469 0.04569 1000
## 5    0.30  1  1.527 0.05062 1000
## 6    0.35  1  1.397 0.04544 1000
## 7    0.40  1  1.509 0.05051 1000
## 8    0.45  1  1.792 0.05291 1000
## 9    0.50  1  2.029 0.06953 1000
## 10   0.55  1  2.094 0.05912 1000
## 11   0.60  1  2.454 0.07544 1000
## 12   0.65  1  2.897 0.09179 1000
## 13   0.70  1  3.515 0.12538 1000
## 14   0.75  1  3.701 0.10520 1000
## 15   0.80  1  3.618 0.09763 1000
## 16   0.85  1  4.223 0.10468 1000
## 17   0.90  1 12.029 0.30409 1000
## 18   0.95  1  8.091 0.18700 1000
## 19   1.00  1 13.780 0.23935 1000
library(ggplot2)
ggplot(df_adapted, aes(x = lambda, y = Time, ymin = Time - CI, ymax = Time + 
    CI)) + geom_pointrange() + ylim(0, max(df_adapted$Time + df_adapted$CI))

plot of chunk unnamed-chunk-4

Tests à faire avec différentes lois pour les temps de service :

Généralisation

genereDF <- function(N, lambdaMin, lambdaMax, lambdaPas, loi) {
    df = data.frame()

    for (lambda in seq(lambdaMin, lambdaMax, lambdaPas)) {
        A <- rexp(N, lambda)

        if (loi == "exp") {
            S = rexp(N, 1)
        } else if (loi == "unif") {
            S = runif(N, 0, 1)
        } else if (loi == "det") {
            S = array(1, N)
        } else if (loi == "erlang") {
            S = rgamma(N, 1, 1)
        }

        T1 <- c()
        T2 <- c()
        R <- c()

        T1[1] = 0
        T2[1] = 0
        R[1] = 0

        for (i in 2:N) {
            T1[i] = T1[i - 1] + A[i]
            T2[i] = max(T1[i], T2[i - 1]) + S[i]
            R[i] = T2[i] - T1[i]

        }

        df = rbind(df, data.frame(A = A, S = S, T1 = T1, T2 = T2, R = R, lambda = lambda, 
            Loi = loi))

    }

    df
}

df <- genereDF(N, 0.1, 1, 0.02, "exp")
df <- rbind(df, genereDF(N, 0.1, 1, 0.02, "unif"))
df <- rbind(df, genereDF(N, 0.1, 1, 0.02, "det"))
df <- rbind(df, genereDF(N, 0.1, 1, 0.02, "erlang"))

df_adapted <- ddply(df, c("lambda", "Loi"), summarise, Time = mean(R), CI = sd(R)/sqrt(length(R)), 
    nR = length(R))

ggplot(df_adapted, aes(x = lambda, y = Time, ymin = Time - CI, ymax = Time + 
    CI, color = Loi)) + geom_pointrange() + ylim(0, max(df_adapted$Time + df_adapted$CI))

plot of chunk unnamed-chunk-6

Si on coupe quand lambda est trop grand (on ne peut pas mesurer efficacement l'intervalle de confiance, on risquerait donc de conclure trop vite…)

ggplot(df_adapted, aes(x = lambda, y = Time, ymin = Time - CI, ymax = Time + 
    CI, color = Loi)) + geom_pointrange() + ylim(0, 5) + xlim(0, 0.5)
## Warning: Removed 25 rows containing missing values (geom_segment).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_segment).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_segment).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_segment).
## Warning: Removed 25 rows containing missing values (geom_point).

plot of chunk unnamed-chunk-7

Conclusion :