Vous êtes sur la page 1sur 80

Chapitre 4 : Files d’attente

Alexandre Blondin Massé

Laboratoire d’informatique formelle


Université du Québec à Chicoutimi

23 mai 2014
Cours 8INF802
Département d’informatique et mathématique

A. Blondin Massé (UQAC) 23 mai 2014 1 / 59


Table des matières

1. Introduction

2. Mesures

3. Processus de Poisson

4. Simulation

5. SimPy

A. Blondin Massé (UQAC) 23 mai 2014 2 / 59


Files d’attente

Les problèmes de files d’attente surviennent dans des contextes


très variés :
I Lignes aériennes;
I Transplantation d’organes;
I Cour de Justice;
I Traitement de processus informatiques;
I Prendre de l’essence dans une station-service;
I Transactions quotidiennes à la banque, etc.

A. Blondin Massé (UQAC) 23 mai 2014 3 / 59


Intérêt

I Plusieurs problèmes de files d’attente ont des solutions


analytiques;
I Autrement, on peut toujours recourir à des simulations;
I Dans les applications concrètes, les solutions permettent de
réduire substantiellement les coûts;
I Elles facilitent également la prise de décision.

A. Blondin Massé (UQAC) 23 mai 2014 4 / 59


Trois entités de base

I Les trois entités de base d’un système de file d’attente


sont :

1. Le client, qui est la personne ou la chose qui attend un


service;
2. Le serveur, qui est la personne ou la chose qui fournit
un service;
3. La file d’attente, qui est un groupe de clients attendant
un service. Elle peut être ordonnée ou non.
I L’identification de ces entités est parfois complexe.

A. Blondin Massé (UQAC) 23 mai 2014 5 / 59


Client

I La description du temps d’arrivée des clients s’appelle


processus d’arrivée;
I Est-ce que les arrivées sont indépendantes ? par groupe ? Y
a-t-il des moments de grand achalandage ?
I Souvent, on choisit une loi de probabilité qui décrit les
arrivées en question;
I Certaines actions peuvent être effectuées par les clients;
I Renoncer (en anglais, reneging) : le client quitte avant
d’être servi;
I Changer de file (en anglais, jockeying);
I Ces actions rendent souvent l’analyse plus complexe.

A. Blondin Massé (UQAC) 23 mai 2014 6 / 59


Serveur

I Il s’agit de l’entité qui accède aux requêtes des clients;


I Le temps de service peut aussi être décrit par une loi de
probabilité ou être entièrement déterministe;
I Est-ce que le service se fait à l’unité ? par groupe ?
I Est-ce que le temps de service dépend du type de client ?
du moment de la journée ?
I La configuration des serveurs peut également influencer :
I Combien y a-t-il de serveurs ?
I Sont-ils identiques et peuvent offrir le service en
parallèle ? Ou plutôt en série ?

A. Blondin Massé (UQAC) 23 mai 2014 7 / 59


Files d’attente

I Plusieurs façons de gérer la file;


I Premier arrivé, premier servi (FIFO);
I Avec priorité ?
I Il peut y avoir différents types de files;
I Combien y en a-t-il ?

A. Blondin Massé (UQAC) 23 mai 2014 8 / 59


Banque

I Client ? Celui qui effectue une transaction ou la transaction


elle-même;
I Serveur ? Le commis, l’ordinateur central ou le guichet
automatique;
I Typiquement, on a une file d’attente et plusieurs serveurs.
A. Blondin Massé (UQAC) 23 mai 2014 9 / 59
Supermarché

I Client ? Celui qui achète, les items achetés, le paiement;


I Serveur ? Le caissier, la caisse-enregistreuse, le scanner,
l’emballeur;
I Typiquement, on a une file d’attente par serveur.
A. Blondin Massé (UQAC) 23 mai 2014 10 / 59
SAAQ

I Client ? Plusieurs types possibles (renouvellement, nouveau


permis, etc.);
I Files d’attente ? Différents types aussi (prise de photo,
traitements courants, transferts de véhicule).

A. Blondin Massé (UQAC) 23 mai 2014 11 / 59


Table des matières

1. Introduction

2. Mesures

3. Processus de Poisson

4. Simulation

5. SimPy

A. Blondin Massé (UQAC) 23 mai 2014 12 / 59


Mesures de performance
I Lorsqu’on modélise un système de file d’attente, plusieurs
statistiques sont intéressantes;
I Temps d’arrivé : le temps où le client arrive dans la file;
I Temps de départ : le temps où le client quitte la file, après
avoir été servi;
I Temps de départ de la file : le temps où le client quitte la
file et commence à être servi;
I Temps d’attente : le temps de départ de la file moins le
temps d’arrivée;
I Temps de service : le temps de départ moins le temps de
départ de la file;
I Temps dans le système : le temps d’attente plus le temps
de service.
A. Blondin Massé (UQAC) 23 mai 2014 13 / 59
Critères du client

I Temps d’attente : idéalement le plus court possible;


I Temps de service : parfois considéré moins coûteux que le
temps d’attente;
I Coût d’attente : certains clients ont un coût d’attente plus
élevé que d’autres;
I Services complétés à temps : Le nombre de services
complétés avant une limite;
I Retard : Si le service est terminé en retard, l’importance du
retard peut aussi être considérée.

A. Blondin Massé (UQAC) 23 mai 2014 14 / 59


Performance du serveur

I Temps de service : plus il est court, plus efficace le service


est;
I Proportion d’utilisation : pourcentage du temps où le
serveur est en service;
I Rythme de service : le rythme auquel les clients sont servis;
I Proportion d’abandon : le pourcentage de clients qui
quittent avant d’être servis;
I Longueur de la file : une longue file demande plus d’espace.

A. Blondin Massé (UQAC) 23 mai 2014 15 / 59


Diagrammes cumulatifs (1/2)
On introduit la notation suivante :
I A(t) est le nombre de clients arrivés entre 0 et t;
I Ds (t) est le nombre de clients qui ont quitté le système
entre 0 et t;
I Ds (t) est le nombre de clients qui ont quitté la file entre 0
et t;

Client Arrivée Service Départ du système


1 9:36 9:36 9:40
2 9:37 9:40 9:44
3 9:38 9:44 9:48
4 9:40 9:48 9:52
5 9:45 9:52 9:56

A. Blondin Massé (UQAC) 23 mai 2014 16 / 59


Diagrammes cumulatifs (2/2)

0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Diagrammes cumulatifs (2/2)

A(t)
5

0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Diagrammes cumulatifs (2/2)

A(t)
5 Dq (t)

0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Diagrammes cumulatifs (2/2)

A(t)
5 Dq (t)
Ds (t)
4

0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Diagrammes cumulatifs (2/2)

A(t)
5 Dq (t)
Ds (t)
4

0
9:30 9:40 9:50 10:00

I Les temps d’attente correspondent à des distances


horizontales;

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Diagrammes cumulatifs (2/2)

A(t)
5 Dq (t)
Ds (t)
4

0
9:30 9:40 9:50 10:00

I Les temps d’attente correspondent à des distances


horizontales;
I La longueur de la file correspond à des distances verticales.

A. Blondin Massé (UQAC) 23 mai 2014 17 / 59


Nombre de clients
On utilise la notation suivante :
I Lq (t) est le nombre de clients dans la file au temps t;

A. Blondin Massé (UQAC) 23 mai 2014 18 / 59


Nombre de clients
On utilise la notation suivante :
I Lq (t) est le nombre de clients dans la file au temps t;
I Ls (t) est le nombre de clients dans le système au temps t;

A. Blondin Massé (UQAC) 23 mai 2014 18 / 59


Nombre de clients
On utilise la notation suivante :
I Lq (t) est le nombre de clients dans la file au temps t;
I Ls (t) est le nombre de clients dans le système au temps t;

0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 18 / 59


Nombre de clients
On utilise la notation suivante :
I Lq (t) est le nombre de clients dans la file au temps t;
I Ls (t) est le nombre de clients dans le système au temps t;

1
Lq (t)
0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 18 / 59


Nombre de clients
On utilise la notation suivante :
I Lq (t) est le nombre de clients dans la file au temps t;
I Ls (t) est le nombre de clients dans le système au temps t;

1
Lq (t)
Ls (t)
0
9:30 9:40 9:50 10:00

A. Blondin Massé (UQAC) 23 mai 2014 18 / 59


Temps d’attente (1/2)

Les fonctions A, Dq et Ds sont inversibles :


I A−1 (n) est le temps de la n-ième arrivée d’un client;
I Dq−1 (n) est le temps du n-ième départ de la file;
I Ds−1 (n) est le temps du n-ième départ du système;

n A−1 (n) D−1


q (n) D−1
s (n)
1 9:36 9:36 9:40
2 9:37 9:40 9:44
3 9:38 9:44 9:48
4 9:40 9:48 9:52
5 9:45 9:52 9:56

A. Blondin Massé (UQAC) 23 mai 2014 19 / 59


Temps d’attente (2/2)

I On en vient naturellement à définir les quantités suivantes :

I Wq (n) est le temps d’attente dans la file du n-ième


client;
I Ws (n) est le temps d’attente dans le système du
n-ième client.
I Clairement, si la file d’attente est du type FIFO, alors

Wq (n) = Dq−1 (n) − A−1 (n)


Ws (n) = Ds−1 (n) − A−1 (n).

A. Blondin Massé (UQAC) 23 mai 2014 20 / 59


Utilisation du serveur
I En tout temps, le nombre de serveurs occupés est donné
par Dq (t) − Ds (t), qui correspond au nombre de clients en
service;
I L’utilisation moyenne est le nombre moyen de serveurs
occupés par rapport au temps;
I La proportion d’utilisation est égale à l’utilisation moyenne
divisée par le nombre total de serveurs disponibles;
I Le temps d’inactivité est le temps pendant lequel

1. Dq (t) − Ds (t) est plus petit que le nombre de serveurs


et
2. A(t) − Dq (t) = Lq (t) est plus grand que 0.
I Pour mesurer le nombre de clients qui renoncent, il faut
utiliser un diagramme supplémentaire.
A. Blondin Massé (UQAC) 23 mai 2014 21 / 59
Statistiques sur le temps d’attente
I La distribution du temps d’attente est une mesure très
précieuse de la performance du système;
I Les temps d’attente moyen sont calculés comme suit :
PN
n=1 Wq (n)
Wq = ,
N
PN
n=1 Ws (n)
Ws = .
N
I Et pour évaluer la dispersion des données, on calcule
l’écart-type :
s
PN 2
n=1 [Wq (n) − Wq ]
σWq = ,
N
s
PN 2
n=1 [Ws (n) − Ws ]
σWs = .
N
A. Blondin Massé (UQAC) 23 mai 2014 22 / 59
Statistiques sur la longueur de la file
I Il en va de même pour la distribution de la longueur de la
file;
I La longueur moyenne est donnée par
Rb
Lq (t)dt
Lq = a ,
b−a
Rb
Ls (t)dt
Ls = a .
b−a
I Et l’écart-type est
s
Rb
− Lq ]2 dt
a [Lq (t)
σLq = ,
b−a
s
Rb
− Ls ]2 dt
a [Ls (t)
σLs = .
b−a
A. Blondin Massé (UQAC) 23 mai 2014 23 / 59
Formule de Little (1/2)

5
4
3
2
1
0

I Il est clair que


N
X Z b
Wq (n) = Lq (t)dt.
n=1 a

où [a, b] commence/termine avec 0 client.

A. Blondin Massé (UQAC) 23 mai 2014 24 / 59


Formule de Little (1/2)

5
4
3
2
1
0

I Il est clair que


N
X Z b
Wq (n) = Lq (t)dt.
n=1 a

où [a, b] commence/termine avec 0 client.


I De la même façon
N
X Z b
Ws (n) = Ls (t)dt.
n=1 a
A. Blondin Massé (UQAC) 23 mai 2014 24 / 59
Formule de Little (2/2)

I Par conséquent,
N Wq = (b − a)Lq .
I Soit λ = N/(b − a) le nombre moyen de clients qui arrivent
par unité de temps;
I Alors les formules suivantes sont vérifiées peu importe le
type de file d’attente impliquée :

Formules de Little

Lq = λWq
Ls = λWs .

A. Blondin Massé (UQAC) 23 mai 2014 25 / 59


Remarques additionnelles

I Lorsqu’il y a plusieurs serveurs, les diagrammes cumulatifs


sont également adéquats;
I En revanche, si la file n’est pas de type FIFO, la lecture du
diagramme doit être faite différemment;
I Par exemple, si on a un système LIFO, alors le temps
moyen est le même, mais l’écart-type augmente;

A. Blondin Massé (UQAC) 23 mai 2014 26 / 59


Techniques de mesure

I La mesure des différentes quantités pour évaluer la


performance d’un système peut être très simple ou
compliquée;
I Lorsque le système n’est pas complètement informatisé,
certaines informations peuvent être difficiles ou impossibles
à enregistrer :
I Un tourniquet dans un métro;
I Une carte magnétique;
I L’anonymat de certains systèmes;
I La taille importante;
I etc.

A. Blondin Massé (UQAC) 23 mai 2014 27 / 59


Table des matières

1. Introduction

2. Mesures

3. Processus de Poisson

4. Simulation

5. SimPy

A. Blondin Massé (UQAC) 23 mai 2014 28 / 59


Arrivée des clients

I Lorsqu’on simule l’arrivée des clients, il faut évidemment


un modèle approprié;
I Il s’avère que le processus de Poisson est souvent un
excellent candidat :
I Il s’agit d’un processus très simple;
I Il donne des résultats très réalistes.
I Permet de modéliser de nombreux phénomènes physiques
ou issus d’autres domaines.

A. Blondin Massé (UQAC) 23 mai 2014 29 / 59


Processus

I Un processus de comptage est une fonction N (t) telle que

1. N (t) ≥ 0, pour t ∈ R;
2. N (t) est entier pour t ∈ R;
3. Si s ≤ t, alors N (s) ≤ N (t) peu importe s, t ∈ R.
I On dit d’un processus de comptage qu’il a des incréments
indépendants si le nombre d’événements de toute paire
d’intervalles de temps disjoints sont statistiquement
indépendants;
I On dit d’un processus de comptage qu’il a des incréments
stationnaires si le nombre d’événements dans un intervalle
de temps ne dépend que de la longueur de l’intervalle.

A. Blondin Massé (UQAC) 23 mai 2014 30 / 59


Processus de Poisson (1/2)

I Plus formellement, un processus de Poisson de moyenne λ


est un processus de comptage N (t) si

1. Le processus a des incréments indépendants;


2. Le processus a des incréments stationnaires;
3. Pour tout nombre dt suffisamment petit,

P (N (t + dt) − N (t) = 0) = 1 − λdt


P (N (t + dt) − N (t) = 1) = λdt
P (N (t + dt) − N (t) > 1) = 0

I Le paramètre λ indique le nombre moyen de clients qui


arrivent par unité de temps;
I Par exemple, si λ = 10/heure, alors on s’attend à ce qu’il y
ait 5 clients qui arrivent dans un intervalle de 30 minutes.

A. Blondin Massé (UQAC) 23 mai 2014 31 / 59


Processus de Poisson (2/2)

I Évidemment, le nombre de clients arrivant dans un


intervalle de temps donné peut être complètement différent
de λ = 10/heure;
I De plus, si on prend un petit intervalle de temps, par
exemple 1 seconde, alors la probabilité qu’un client arrive
dans cet intervalle est d’environ 10/3600 = 0.00278;
I En d’autres mots,

1. La probabilité qu’un client arrive à un moment donné


ne dépend pas de l’arrivée des autres clients;
2. La probabilité qu’un client arrive à un moment donné
ne dépend pas du temps en question;
3. Les clients arrivent un seul à la fois.

A. Blondin Massé (UQAC) 23 mai 2014 32 / 59


Distribution de Poisson

I Rappelons qu’une variable aléatoire X suit une loi de


Poisson si sa fonction de masse est
(λt)x −λt
f (x) = e , x = 0, 1, 2, . . . ,
x!
où λ est une constante;
I Une façon alternative de définir un processus de Poisson est
de dire que

1. C’est un processus avec incréments indépendants;


2. Le nombre d’événements dans n’importe quel intervalle
de temps de longueur t suit un loi de Poisson de
moyenne λt.

A. Blondin Massé (UQAC) 23 mai 2014 33 / 59


Temps entre arrivées des clients

I Rappelons que la distribution exponentielle est une loi


continue dont les fonctions de densité et de répartition sont

f (x) = λe−λx , x≥0


−λx
F (x) = 1 − e , x ≥ 0.

I En particulier, si X suit une loi exponentielle et que N (t)


est un processus de Poisson, alors

P (X ≥ t) = 1 − F (t) = e−λt = P (N (t) = 0).

I On en conclut donc que les temps entre les arrivées suivent


des lois exponentielles indépendantes de moyenne 1/λ.

A. Blondin Massé (UQAC) 23 mai 2014 34 / 59


Estimation des paramètres

I En pratique, on ne connaît pas λ et il faut l’estimer;


I Il existe de nombreux tests statistiques et techniques
d’estimation de paramètres pour calculer cette valeur :
I Maximum de vraisemblance;
I Intervalle de confiance;
I Test d’adéquation;
I Test d’indépendance.
I En particulier, on peut vérifier si un modèle par processus
de Poisson semble adéquat dans une situation;
I On peut aussi identifier les sous-intervalles pertinents (par
exemple, l’avant-midi, λ = 10, l’après-midi, λ = 15).

A. Blondin Massé (UQAC) 23 mai 2014 35 / 59


Table des matières

1. Introduction

2. Mesures

3. Processus de Poisson

4. Simulation

5. SimPy

A. Blondin Massé (UQAC) 23 mai 2014 36 / 59


Simulation de variables aléatoires

Nous avons vu aux cours précédents comment simuler


I Une loi uniforme
I à l’aide d’un générateur pseudo-aléatoire;
I Une loi de Poisson et une loi exponentielle
I à l’aide de la transformation inverse;
I Une loi normale
I à l’aide du théorème de Box-Müller;

A. Blondin Massé (UQAC) 23 mai 2014 37 / 59


Simulation d’un processus de Poisson

I Première méthode :
I On calcule les temps entre les arrivées;
I Pour cela, il suffit de simuler des variables
exponentielles;
I Deuxième méthode :
I On simule d’abord une variable de Poisson sur un
intervalle [a, b];
I Puis on simule des variables uniformes autant de fois
que la valeur obtenu pour la variable de Poisson;
I Finalement, on trie en ordre croissant les temps
d’arrivée ainsi générés.

A. Blondin Massé (UQAC) 23 mai 2014 38 / 59


Simulation d’un processus de renouvellement

I Une généralisation naturelle d’un processus de Poisson est


appelée processus de renouvellement;
I Le temps entre les arrivées est toujours indépendant;
I De plus, le temps entre les arrivées est identiquement
distribué;
I Par contre, les temps d’arrivée ne sont pas indépendants;
I Autrement dit, les incréments ne sont pas indépendants;
I Cela permet d’avoir une distribution autre que la
distribution exponentielle pour les temps entre les arrivées.

A. Blondin Massé (UQAC) 23 mai 2014 39 / 59


Temps d’arrivée dépendants
I On s’intéresse à l’achalandage de voitures sur une
autoroute;
I À une borne donnée, on enregistre le passage des voitures;
I On suppose que les intervalles de temps entre les arrivées
sont indépendants;
I Par contre, on remarque qu’il est impossible que deux
voitures passent au marqueur dans un intervalle plus petit
que 1 seconde.
I La distribution des temps entre arrivée Ti est donc une
exponentielle décalée
(
0, si h < a;
P (Ti ≤ h) = −λ(th−a)
1−e , si h ≥ a.

A. Blondin Massé (UQAC) 23 mai 2014 40 / 59


Simulation d’une file d’attente
I Il faut tenir compte
I du temps de service et
I des arrivées des clients.
I Le modèle le plus simple est celui où
I Le temps de service ne dépend pas des temps d’arrivée
ni de la longueur de la file;
I Les clients arrivent selon un processus de Poisson.
I Dans ce cas, on parle d’une simulation à événements
discrets;
I Un autre type de simulation est la simulation en temps réel
ou simulation chronologique.

A. Blondin Massé (UQAC) 23 mai 2014 41 / 59


Notation

On introduit la notation suivante :


I A(t) est l’ensemble des clients qui sont arrivés avant t;
I A(t) est l’ensemble des clients qui ne sont pas arrivés avant
t;
I D(t) est l’ensemble des clients qui ont quitté le système
avant t;
I D(t) est l’ensemble des clients qui n’ont pas quitté le
système avant t;
I S(n) est le temps de service pour le client n.

A. Blondin Massé (UQAC) 23 mai 2014 42 / 59


Exemple

I Considérons les données suivantes :


n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
I Alors

A(9:15) = {1, 2, 3}
A(9:15) = {4, 5}.

A. Blondin Massé (UQAC) 23 mai 2014 43 / 59


Calcul des événements (1/3)

I Tout d’abord, on calcule le moment du prochain événement


à partir de t;
I Il y a deux possibilités, (1) une nouvelle arrivée ou (2) un
départ du système;
I Le moment du prochain événement est donc
( )
−1
T (t) = min min A (n), min Ds−1 (n) .
n∈A(t) n∈D(t)

I Ensuite, on met à jour le système selon l’événement;

A. Blondin Massé (UQAC) 23 mai 2014 44 / 59


Calcul des événements (2/3)

Si le prochain événement est une arrivée, alors

1. On incrémente A(t) de 1;
2. On met à jour les ensembles A(t) et A(t);
3. S’il y a un serveur disponible,

(a) On incrémente Dq (t) de 1;


(b) On enregistre le temps de départ du système de ce
client à t + S(n).

A. Blondin Massé (UQAC) 23 mai 2014 45 / 59


Calcul des événements (3/3)

Si le prochain événement est un départ du système, alors

1. On incrémente Ds (t) de 1;
2. On met à jour les ensembles D(t) et D(t);
3. S’il y a un client dans la file,

(a) On incrémente Dq (t) de 1;


(b) On choisit le client le plus prioritaire;
(c) On enregistre son temps de départ à t + S(n).
Puis on recalcule T (t).

A. Blondin Massé (UQAC) 23 mai 2014 46 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ
9:18 {1, 2, 3} {1, 2, 3} 3 3 3 Départ

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ
9:18 {1, 2, 3} {1, 2, 3} 3 3 3 Départ
9:20 {1, 2, 3, 4} {1, 2, 3} 4 4 3 Arrivée

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ
9:18 {1, 2, 3} {1, 2, 3} 3 3 3 Départ
9:20 {1, 2, 3, 4} {1, 2, 3} 4 4 3 Arrivée
9:25 {1, 2, 3, 4, 5} {1, 2, 3} 5 4 3 Arrivée

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ
9:18 {1, 2, 3} {1, 2, 3} 3 3 3 Départ
9:20 {1, 2, 3, 4} {1, 2, 3} 4 4 3 Arrivée
9:25 {1, 2, 3, 4, 5} {1, 2, 3} 5 4 3 Arrivée
9:26 {1, 2, 3, 4, 5} {1, 2, 3, 4} 5 5 4 Départ

A. Blondin Massé (UQAC) 23 mai 2014 47 / 59


Exemple

Reprenons l’exemple
n A−1 (n) S(n)
1 9:05 4 min
2 9:08 7 min
3 9:12 2 min
4 9:20 6 min
5 9:25 7 min
Alors on obtient les valeurs suivantes :
Temps A(t) D(t) A(t) Dq (t) Ds (t) Événement
9:00 ∅ ∅ 0 0 0 Initialisation
9:05 {1} ∅ 1 1 0 Arrivée
9:08 {1, 2} ∅ 2 1 0 Arrivée
9:09 {1, 2} ∅ 2 2 1 Départ
9:12 {1, 2, 3} {1} 3 2 1 Arrivée
9:16 {1, 2, 3} {1, 2} 3 3 2 Départ
9:18 {1, 2, 3} {1, 2, 3} 3 3 3 Départ
9:20 {1, 2, 3, 4} {1, 2, 3} 4 4 3 Arrivée
9:25 {1, 2, 3, 4, 5} {1, 2, 3} 5 4 3 Arrivée
9:26 {1, 2, 3, 4, 5} {1, 2, 3, 4} 5 5 4 Départ
9:33 {1, 2, 3, 4, 5} {1, 2, 3, 4, 5} 5 5 5 Départ
A. Blondin Massé (UQAC) 23 mai 2014 47 / 59
Temps de service

I Souvent, les temps d’arrivée sont modélisés par des


processus de Poisson;
I En revanche, les temps de service varient énormément :
I Temps constant;
I Loi exponentielle;
I Loi normale;
I Loi gamma, etc.
I Souvent, le temps de service peut être prédit si on connaît
le type de client;
I Par exemple, au supermarché, le temps dépend du nombre
d’articles.

A. Blondin Massé (UQAC) 23 mai 2014 48 / 59


Notation de Kendall
La notation de Kendall est utilisée pour décrire les paramètres
d’une file d’attente :

A/S/c/K/N/D


I A est la distribution de probabilité des temps entre les
arrivées;
I S est la distribution de probabilité du temps de service;
I c est le nombre de serveurs;
I K est la capacité de la file d’attente;
I N est la taille de la population de clients;
I D est la discipline de la file.
A. Blondin Massé (UQAC) 23 mai 2014 49 / 59
Valeurs classiques

I Pour les temps entre les arrivées et les temps de service :


I M : Markov, pour un processus de Poisson;
I M M P P : Markov modulated Poisson process, pour les
arrivées en groupes;
I D : déterministe;
I G : générale.
I Le nombre de serveurs : 1 ou c;
I La capacité de la file : finie ou infinie;
I La taille de la population : finie ou infinie;
I Discipline : FIFO, LIFO, avec priorité, aléatoirement.

A. Blondin Massé (UQAC) 23 mai 2014 50 / 59


Solutions analytiques

Des solutions analytiques (complètes ou partielles) sont connues


pour plusieurs types de files d’attente
I M/M/1;
I M/M/c;
I M/M/∞;
I M/M/c/K;
I M/G/1/∞
I etc.

A. Blondin Massé (UQAC) 23 mai 2014 51 / 59


Table des matières

1. Introduction

2. Mesures

3. Processus de Poisson

4. Simulation

5. SimPy

A. Blondin Massé (UQAC) 23 mai 2014 52 / 59


SimPy

I SimPy est un ensemble de fonctions et de services


permettant de simuler des événements discrets;
I Il est basé sur le langage Python;
I Les générateurs Python permettent de modéliser les
processus ou les agents du système;
I Les simulations peuvent être exécutées en temps réel ou
manuellement;
I Pas approprié pour les simulations continues.

A. Blondin Massé (UQAC) 23 mai 2014 53 / 59


Simulation de chronomètres
import simpy

# A Python generator simulating a clock


def clock(env, name, tick):
while True:
print(name, "{0:.2f}".format(env.now))
yield env.timeout(tick)

# Setting up the environment


env = simpy.Environment()
env.process(clock(env, ’fast’, 0.4)) # A fast clock
env.process(clock(env, ’slow’, 1)) # A slow clock

# Running the simulation


env.run(until=10)

A. Blondin Massé (UQAC) 23 mai 2014 54 / 59


Simulation de chronomètres
import simpy

# A Python generator simulating a clock


def clock(env, name, tick):
while True:
print(name, "{0:.2f}".format(env.now))
yield env.timeout(tick)

# Setting up the environment


env = simpy.Environment()
env.process(clock(env, ’fast’, 0.4)) # A fast clock
env.process(clock(env, ’slow’, 1)) # A slow clock

# Running the simulation


env.run(until=10)

Résultat :
(’fast’, ’0.00’)
(’slow’, ’0.00’)
(’fast’, ’0.40’)
(’fast’, ’0.80’)
(’slow’, ’1.00’)
(’fast’, ’1.20’)
(’fast’, ’1.60’)
(’slow’, ’2.00’)
(’fast’, ’2.00’)
(’fast’, ’2.40’)
(’fast’, ’2.80’)

A. Blondin Massé (UQAC) 23 mai 2014 54 / 59


Chaîne de Markov

I On peut facilement modéliser des chaînes de Markov à


l’aide de SimPy;
I Essayons ensemble de modéliser l’exemple de la météo :
1/2

Neige

1/2 1/4

1/4 1/4

1/2

Soleil Pluie
1/4
1/2

A. Blondin Massé (UQAC) 23 mai 2014 55 / 59


File d’attente (1/3)

from simpy import Environment, Resource


from simpy.rt import RealtimeEnvironment
# In real-time?
realtime = True

# Deterministic data simulation


clients = [(5, 4), (8, 7), (12, 2), (20, 6), (25, 7)]

# Customers
def customer(environment, name, server, arrival_time, service_time,
waiting_times):
# Simulating arrival time
yield environment.timeout(arrival_time)

# Requesting server
print(’%s arriving at %d’ % (name, environment.now))
with server.request() as req:
yield req

# Updating waiting time log


waiting_times[name] = environment.now - arrival_time
# Receiving service
print(’%s receiving service at %s’ % (name, environment.now))
yield environment.timeout(service_time)
print(’%s leaving the server at %s’ % (name, environment.now))

A. Blondin Massé (UQAC) 23 mai 2014 56 / 59


File d’attente (2/3)

# Setting up the environment


if realtime:
environment = RealtimeEnvironment(factor=0.5)
else:
environment = Environment()
server = Resource(environment, capacity=1)
waiting_times = {}
for (i, (arrival_time, service_time)) in enumerate(clients):
environment.process(customer(environment, ’Customer %d’ % (i + 1),
server, arrival_time, service_time,
waiting_times))

# Running the simulation


print(’Simulation’)
print(’----------’)
environment.run()
print
# Display waiting times
print(’Waiting times’)
print(’-------------’)
plural = lambda v: ’’ if v in (0,1) else ’s’
for (customer, waiting_time) in sorted(waiting_times.items()):
print(’%s has waited %s minute%s’ % (customer, waiting_time, plural(
waiting_time)))

A. Blondin Massé (UQAC) 23 mai 2014 57 / 59


File d’attente (3/3)
Résultat :
Simulation
----------
Customer 1 arriving at 5
Customer 1 receiving service at 5
Customer 2 arriving at 8
Customer 1 leaving the server at 9
Customer 2 receiving service at 9
Customer 3 arriving at 12 n A−1 (n) S(n)
Customer 2 leaving the server at 16
Customer 3 receiving service at 16 1 9:05 4 min
Customer 3 leaving the server at 18
Customer 4 arriving at 20 2 9:08 7 min
Customer 4 receiving service at 20
Customer 5 arriving at 25 3 9:12 2 min
Customer 4 leaving the server at 26
Customer 5 receiving service at 26 4 9:20 6 min
Customer 5 leaving the server at 33
5 9:25 7 min
Waiting times
-------------
Customer 1 has waited 0 minute
Customer 2 has waited 1 minute
Customer 3 has waited 4 minutes
Customer 4 has waited 0 minute
Customer 5 has waited 1 minute

A. Blondin Massé (UQAC) 23 mai 2014 58 / 59


Deux exemples

I Simulation d’une banque :


I On illustre le cas où certains clients renoncent (en
anglais « reneging »);
I Voir fichier bank.py.
I Simulation d’une station-service :
I Dans ce cas, il y a plusieurs serveurs;
I Lorsqu’il n’y a plus d’essence dans les pompes, on
remplit le réservoir commun;
I Voir fichier gas_station.py.

A. Blondin Massé (UQAC) 23 mai 2014 59 / 59