3. Simulation 1 :
On suppose dans un premier temps que les patients sont examinés selon l’ordre de leur arrivée (file
d’attente) et qu’un seul médecin assure les consultations.
Normallement, tant que le nombre moyen d’arrivée de patients par heure
(taux d’arrivée) est
inférieur au nombre moyen de consultations pouvant être effectuées (taux de service =1/(durée
moyenne d’une consultation)), la demande peut être satisfaite ; mais à cause des irrégularités dans les
heures d’arrivée des patients et dans les durées de consultation, des files d’attente parfois longues peuvent
se former.
Le nombre de patients arrivant aux urgences peut être simulé suivant une loi de Poisson de paramètre
: p(np=k) =
k e-
k! . Les intervalles de temps T entre arrivées suivent alors une loi exponentielle de
paramètre
(T) =
e-
T . La durée des consultations est elle aussi supposée suivre une loi
exponentielle de paramètre
Pour la simulation, une heure correspondra à 10 secondes de temps d’éxecution.
Construire une classe Simulation1 permettant de simuler la file d’attente des patients et
d’estimer le temps moyen d’attente :
- Attributs :
Paramètres de la simulation : durée simulée (en heure), nombre moyen d’arrivée (
durée moyenne
d’une consultation (1/)
Résultats : Temps moyen d’attente, taille moyenne de la file
Objet membre : File d’attente de patients
- Méthodes :
Constructeur : SimuFileAttente(double duree,double taux,double dc)
Méthode qui retourne le temps écoulé (en heure) : double getTime()
Méthode qui génère aléatoirement l’heure d’arrivée du prochain patient : double nextArrivee(double t)
Méthode qui tire aléatoirement une durée de consultation : double dConsult()
Lancement de la simulation : void lancer()
Les méthodes getTime(), nextArrivee() et dConsult() vous sont données :
Simulation1.cpp
#include "SimuFileAttente.h"
#include <time.h>
#include <math.h>
…
double SimuFileAttente::getTime(){
return (clock()/(CLOCKS_PER_SEC*1.0))/10.0;
}
double SimuFileAttente::nextArrivee(double t){
double alea =(rand()%100)/100.0;
double next = t+((-1.0/tauxArrivee)*log(1.0-alea));
return next;
}
double SimuFileAttente::dConsult(){
double alea =(rand()%100)/100.0;
double d = -m*log(1.0-alea);
return d;
}
…