File d’attente, un exemple simple#

Cet exemple vient illustrer le paragraphe sur les files d’attente et l’espérance de vie des ampoules.

[1]:
%matplotlib inline
[2]:
import random


def generate_expo(mu):
    return random.expovariate(mu)


generate_expo(2)
[2]:
0.0749720223112896

Les paramètres de la simulation.

[3]:
S = 10000
iteration = 500
mu = 1.0 / 100

On crée un tableau de S ampoules qui contient la durée de vie restante de chaque ampoule.

[4]:
ampoule = [0 for a in range(S)]
moyenne_grille = 0
stats = []


for i in range(iteration):
    grille = 0
    mean = 0

    for n in range(S):
        mean += ampoule[n]
        if ampoule[n] == 0:
            # remplacement d'une ampoule grillée
            grille += 1
            # on détermine la durée de vie de cette ampoule
            # on arrondit à l'entier le plus proche
            ampoule[n] = int(generate_expo(mu))
        else:
            # on enlève une heure à la durée de vie de l'ampoule
            ampoule[n] -= 1

    mean /= S

    stats.append(dict(i=i, mean=mean, grille=grille))

    if i > 0:
        moyenne_grille += grille
    if i % 100 == 0:
        print("itération : ", i, " moyenne durée : ", mean, " grillées :", grille)

moyenne_grille = float(moyenne_grille) / float(iteration - 1)
print("nombre moyen d'ampoules grillées :", moyenne_grille)
itération :  0  moyenne durée :  0.0  grillées : 10000
itération :  100  moyenne durée :  99.7184  grillées : 95
itération :  200  moyenne durée :  98.7154  grillées : 93
itération :  300  moyenne durée :  99.2155  grillées : 101
itération :  400  moyenne durée :  98.9101  grillées : 108
nombre moyen d'ampoules grillées : 99.88577154308618
[5]:
import pandas

df = pandas.DataFrame(stats)
df = df[["i", "mean", "grille"]]
df["grille_sum"] = df["grille"].cumsum() - 10000
df.head()
[5]:
i mean grille grille_sum
0 0 0.0000 10000 0
1 1 98.5142 99 99
2 2 98.5526 91 190
3 3 98.3991 108 298
4 4 98.4425 94 392
[6]:
import matplotlib.pyplot as plt

fig, ax = plt.subplots(3, 1, figsize=(14, 8))
df[1:].plot(x="i", y="mean", label="durée de vie moyenne restante", ax=ax[0])
df[1:].plot(x="i", y="grille", label="ampoules grillées ce jour", ax=ax[1])
df[2:].plot(x="i", y="grille_sum", label="total des ampoules grillées", ax=ax[2])
ax[0].set_xlabel("durée")
[6]:
<matplotlib.text.Text at 0x1e2155ce4a8>
../../_images/notebooks_dsgarden_file_dattente_ex_8_1.png
[7]:

[8]: