Chapitre IV Dveloppement du modle Chapitre IV Dveloppement

  • Slides: 39
Download presentation
Chapitre IV Développement du modèle Chapitre IV - Développement du modèle

Chapitre IV Développement du modèle Chapitre IV - Développement du modèle

INTRODUCTION STRUCTURES DE DONNÉES & IMPLANTATION Dans un programme de simulation, beaucoup de calculs

INTRODUCTION STRUCTURES DE DONNÉES & IMPLANTATION Dans un programme de simulation, beaucoup de calculs sont dédiés à la gestion des événements: - identification du prochain événement à survenir - cédule des événements futurs. Peu de calculs sont dédiés pour mettre à jour les variables d’état et l’horloge. Exemple: Simulation du système à temps partagé. En plaçant dans une liste les caractéristiques de chaque port, pour déterminer le prochain port à être libéré, il faut parcourir cette liste complètement. Chapitre IV - Développement du modèle 2

INTRODUCTION A) Progression du temps dans un simulateur 1) La variable TEMPS est incrémentée

INTRODUCTION A) Progression du temps dans un simulateur 1) La variable TEMPS est incrémentée d’une valeur fixe (DELTA) à chaque itération - À chaque itération, on doit vérifier si un événement arrive à cet instant. - Cette approche a plusieurs inconvénients: Dans la plupart des cas, TEMPS sera remplacé par TEMPS + DELTA sans qu’il y ait aucun événement arrivant dans l’intervalle (Temps, Temps + Delta) La recherche d’un événement dans cet intervalle est une perte de temps. Il peut y avoir des pertes de précision si l’on astreint les temps d’occurrence d’événements être des facteurs de DELTA on résoud le 1 e problème au dépens de la précision augmente mais le # d’itérations augmente entraînant des calculs supplémentaires. Chapitre IV - Développement du modèle 3

INTRODUCTION 2) Une autre approche pour mettre à jour l’horloge est d’examiner l’ensemble des

INTRODUCTION 2) Une autre approche pour mettre à jour l’horloge est d’examiner l’ensemble des événements à venir et de considérer le temps d’occurrence du prochain événement. Avec cette approche, les 2 problèmes précédents sont résolus. programmation légèrement plus difficile B) Gestion des événements: listes chaînées ordonnées selon les temps d’occurrence des événements. Exemple: SIMULATEUR D’UN SYSTÈME À TEMPS PARTAGÉ (lorsque k devient élevé) En général, - # d’événements varie continuellement - # d’événements peut croître indéfiniment, - accès à un événement dont le temps d’occurrence est le plus proche à venir. Chapitre IV - Développement du modèle 4

INTRODUCTION C) Arrivée des clients: file d’attente Pour simuler un ensemble d’usagers en attente

INTRODUCTION C) Arrivée des clients: file d’attente Pour simuler un ensemble d’usagers en attente d’une ressource, on a besoin de conserver de l’information pour chaque client qui arrive: instant d’arrivée d’un client, sa priorité dans la file. Structures de données file avec priorités D) Gestion de la mémoire ALLOCATION DYNAMIQUE DE LA MÉMOIRE LIBÉRATION DE LA MÉMOIRE APRÈS USAGE Chapitre IV - Développement du modèle 5

SIMC++ Chapitre IV - Développement du modèle 6

SIMC++ Chapitre IV - Développement du modèle 6

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 7

SIMC++ Définition d’une nouvelle loi Uniforme Exponentielle Loi de probabilité Weibull Exacte Fixer les

SIMC++ Définition d’une nouvelle loi Uniforme Exponentielle Loi de probabilité Weibull Exacte Fixer les paramètres de cette loi Un ou deux paramètres Générer une valeur pseudo-aléatoire selon cette loi Chapitre IV - Développement du modèle 8

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 9

SIMC++ Création d’une nouvelle file où chaque sommet renfermera l’adresse d’un élément quelconque dont

SIMC++ Création d’une nouvelle file où chaque sommet renfermera l’adresse d’un élément quelconque dont le type est une classe dérivée de la classe vide « element » File d’ entités File Insérer ou enlever un sommet de la file Test si la file est vide ou pleine Chapitre IV - Développement du modèle 10

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 11

SIMC++ Création d’une nouvelle entité bateau Entité Définition du nombre d’unités constituant l’entité Processus

SIMC++ Création d’une nouvelle entité bateau Entité Définition du nombre d’unités constituant l’entité Processus d’arrivée Loi de probabilité Processus de mortalité Chapitre IV - Développement du modèle 12

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 13

SIMC++ Création d’une nouvelle activité à effectuer remplissage d’un panier d’épicerie Travail Aucun délai

SIMC++ Création d’une nouvelle activité à effectuer remplissage d’un panier d’épicerie Travail Aucun délai pour débuter cette activité (pas de file d’attente) Durée du travail Chapitre IV - Développement du modèle Loi de probabilité 14

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 15

SIMC++ Création d’une nouvelle ressource quai de chargement Définition de la capacité de la

SIMC++ Création d’une nouvelle ressource quai de chargement Définition de la capacité de la ressource (1 par défaut) Ressource Nombre d ’unités utilisant la ressource Durée de service Loi de probabilité Disponibilité de la ressource Accès ou libération de la ressource (# d’unités demandées ou libérées dépend de l’entité) Chapitre IV - Développement du modèle 16

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 17

SIMC++ Création d’une nouvelle file d ’attente file d’attente au quai de chargement Définition

SIMC++ Création d’une nouvelle file d ’attente file d’attente au quai de chargement Définition de la capacité de la file d ’attente ( par défaut) File d’attente Définition de la ressource associée Longueur de la file d ’attente Insérer ou enlever une entité de la file (# d’unités insérées ou enlevées dépend de l’entité) Disponibilité de la file PEPS Politique de gestion de la file Chapitre IV - Développement du modèle 18

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 19

SIMC++ Objet de simulation Classe vide Chapitre IV - Développement du modèle 20

SIMC++ Objet de simulation Classe vide Chapitre IV - Développement du modèle 20

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 21

SIMC++ Création d’un nouveau type d ’événement Arrivée d’un nouveau bateau Type d ’événement

SIMC++ Création d’un nouveau type d ’événement Arrivée d’un nouveau bateau Type d ’événement Défn de la caractéristique de cet événement Départ du système Arrivée dans le système Libération d’une ressource Accès à une ressource Sortie de la file Entrée dans une file Fin d’un travail Début d’un travail Définition de l’ «objet de simulation» associé entité ressource Chapitre IV - Développement du modèle file d’attente travail 22

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 23

SIMC++ Création de l’ensemble des types d’événements Définition du nombre de types d’événements Ajout

SIMC++ Création de l’ensemble des types d’événements Définition du nombre de types d’événements Ajout d ’un type d’événement Ensemble des types d’événements Définition d’un graphe d’événements i. e. les événements à céduler lors du traitement de chaque événement Accès aux types d’événements à céduler lors du traitement d ’un événement. Chapitre IV - Développement du modèle 24

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 25

SIMC++ Création d’un monceau où chaque sommet renferme une clé et un élément de

SIMC++ Création d’un monceau où chaque sommet renferme une clé et un élément de donnée Insérer un sommet selon la clé fournie Monceau Enlever le sommet dont la clé est minimale Tester si le monceau est plein ou vide Vider le monceau Chapitre IV - Développement du modèle 26

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation

Programme d’application Simulateur Ensemble des types d’événements Monceau Type d’événement SIMC++ Objet de simulation File d’attente Entité Travail Ressource Loi de probabilité File Chapitre IV - Développement du modèle 27

SIMC++ Simulateur Définition d’une simulation Durée du réchauffement Durée de la simulation Nombre maximum

SIMC++ Simulateur Définition d’une simulation Durée du réchauffement Durée de la simulation Nombre maximum d’événements cédulés Insérer l’ensemble des types d’événements du modèle de simulation Céduler un événement au temps T en spécifiant: le type de l’événement l’entité associée à cet événement l’instant d’arrivée de cette entité dans le système Simuler le comportement du système Afficher les résultats de la simulation Chapitre IV - Développement du modèle 28

SIMC++ Affichage automatique des résultats de la simulation pour chaque objet de simulation :

SIMC++ Affichage automatique des résultats de la simulation pour chaque objet de simulation : Simulateur Entité # d’entités ayant quitté le système temps moyen passé dans le système pour ceux qui ont quitté Travail # de travaux effectués durée moyenne du travail effectué Ressource # d’unités qui ont accédé à la ressource taux d’utilisation de la ressource # moyen d’usagers dans la file d’attente File d’attente temps total passé dans la file d’attente Chapitre IV - Développement du modèle 29

SIMULATION D’UN QUAI DE CHARGEMENT /***************************** Simulation d'un quai de chargement modélisé par une

SIMULATION D’UN QUAI DE CHARGEMENT /***************************** Simulation d'un quai de chargement modélisé par une file d'attente M/M/1. Le système est initialement vide et on simule pendant une période [Duree_du_rechauffement, Duree_de_la_simulation]. L'intervalle de réchauffement du simulateur est [0, Duree_du_rechauffement]. *****************************/ #include "SIMC++. h" #include <iostream. h> Chapitre IV - Développement du modèle 30

SIMULATION D’UN QUAI DE CHARGEMENT float Duree_rechauffement, Duree_simulation, temps_moyen_entre_2 arrivees, duree_moyenne_chargement; void Lire_Donnees() {/*

SIMULATION D’UN QUAI DE CHARGEMENT float Duree_rechauffement, Duree_simulation, temps_moyen_entre_2 arrivees, duree_moyenne_chargement; void Lire_Donnees() {/* Lecture de la durée de la simulation, du temps moyen entre deux arrivées de bateaux et de la durée moyenne d'un chargement. Impression des données d'entrée. */ cout << " Veuillez fournir les renseignements suivants : " << "nn"; cout << " Duree du rechauffement = "; cin >> Duree_rechauffement; cout << " Duree de la simulation = "; cin >> Duree_simulation; cout << " Temps moyen entre deux arrivees de bateaux = "; cin >> temps_moyen_entre_2 arrivees; cout << " Duree moyenne d'un chargement = "; cin >> duree_moyenne_chargement; cout << " -----------------n"; Chapitre IV - Développement du modèle 31 }

SIMULATION D’UN QUAI DE CHARGEMENT void main() { Lire_Donnees(); Loi_de_probabilite * p. Loi_d_arrivee_des_bateaux =

SIMULATION D’UN QUAI DE CHARGEMENT void main() { Lire_Donnees(); Loi_de_probabilite * p. Loi_d_arrivee_des_bateaux = new Loi_de_probabilite(Exponentielle); p. Loi_d_arrivee_des_bateaux -> Fixer_un_parametre_de_la_loi (temps_moyen_entre_2 arrivees, 1); Loi_de_probabilite * p. Loi_de_depart_du_systeme = new Loi_de_probabilite(Exacte); Loi_de_probabilite * p. Duree_du_service = new Loi_de_probabilite(Exponentielle); p. Duree_du_service -> Fixer_un_parametre_de_la_loi (duree_moyenne_chargement, 1); Chapitre IV - Développement du modèle 32

SIMULATION D’UN QUAI DE CHARGEMENT Entite * p. Ent = new Entite("bateau"); p. Ent

SIMULATION D’UN QUAI DE CHARGEMENT Entite * p. Ent = new Entite("bateau"); p. Ent -> Definir_processus_d_arrivee(p. Loi_d_arrivee_des_bateaux); p. Ent -> Definir_processus_de_mortalite(p. Loi_de_depart_du_systeme); Ressource * p. Res = new Ressource("Quai de chargement"); p. Res -> Definir_duree_de_service(p. Duree_du_service); File_d_attente * p. File = new File_d_attente("File de bateaux"); p. File -> Definir_ressource_associee(p. Res); Ensemble_des_types_d_evenements * p. Ens = new Ensemble_des_types_d_evenements(6); Objet_de_simulation * p. Obj; Chapitre IV - Développement du modèle 33

SIMULATION D’UN QUAI DE CHARGEMENT Type_d_evenement * p. Type = new Type_d_evenement("Arrivee d'un bateau");

SIMULATION D’UN QUAI DE CHARGEMENT Type_d_evenement * p. Type = new Type_d_evenement("Arrivee d'un bateau"); p. Type -> Definir_caracteristique(Arrivee_dans_le_systeme); p. Obj = (Objet_de_simulation *) p. Ent; p. Type -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(1, p. Type); Type_d_evenement * p. T = new Type_d_evenement("Depart d'un bateau"); p. T -> Definir_caracteristique(Depart_du_systeme); p. Obj = (Objet_de_simulation *) p. Ent; p. T -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(2, p. T); Chapitre IV - Développement du modèle 34

SIMULATION D’UN QUAI DE CHARGEMENT p. T = new Type_d_evenement("Entree dans la file de

SIMULATION D’UN QUAI DE CHARGEMENT p. T = new Type_d_evenement("Entree dans la file de bateaux"); p. T -> Definir_caracteristique(Entree_dans_une_file); p. Obj = (Objet_de_simulation *) p. File; p. T -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(3, p. T); p. T = new Type_d_evenement("Sortie de la file de bateaux"); p. T -> Definir_caracteristique(Sortie_de_la_file); p. Obj = (Objet_de_simulation *) p. File; p. T -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(4, p. T); Chapitre IV - Développement du modèle 35

SIMULATION D’UN QUAI DE CHARGEMENT p. T = new Type_d_evenement("Debut du chargement"); p. T

SIMULATION D’UN QUAI DE CHARGEMENT p. T = new Type_d_evenement("Debut du chargement"); p. T -> Definir_caracteristique(Acces_a_une_ressource); p. Obj = (Objet_de_simulation *) p. Res; p. T -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(5, p. T); p. T = new Type_d_evenement("Fin du chargement"); p. T -> Definir_caracteristique(Liberation_d_une_ressource); p. Obj = (Objet_de_simulation *) p. Res; p. T -> Definir_objet_de_la_simulation(p. Obj); p. Ens -> Definir_un_type_d_evenement(6, p. T); Chapitre IV - Développement du modèle 36

SIMULATION D’UN QUAI DE CHARGEMENT p. Ens -> Definir_graphe_d_evenement(1, 1); p. Ens -> Definir_graphe_d_evenement(1,

SIMULATION D’UN QUAI DE CHARGEMENT p. Ens -> Definir_graphe_d_evenement(1, 1); p. Ens -> Definir_graphe_d_evenement(1, 3); p. Ens -> Definir_graphe_d_evenement(1, 5); p. Ens -> Definir_graphe_d_evenement(4, 5); p. Ens -> Definir_graphe_d_evenement(5, 6); p. Ens -> Definir_graphe_d_evenement(6, 4); p. Ens -> Definir_graphe_d_evenement(6, 2); Chapitre IV - Développement du modèle 37

SIMULATION D’UN QUAI DE CHARGEMENT Simulateur Simulation_d_un_quai_de_chargement (Duree_rechauffement, Duree_simulation, 100); Simulation_d_un_quai_de_chargement. Inserer_ensemble_des_types_d_evenements(p. Ens); float

SIMULATION D’UN QUAI DE CHARGEMENT Simulateur Simulation_d_un_quai_de_chargement (Duree_rechauffement, Duree_simulation, 100); Simulation_d_un_quai_de_chargement. Inserer_ensemble_des_types_d_evenements(p. Ens); float Instant; Instant=p. Loi_d_arrivee_des_bateaux->Generer_une_valeur_pseudo_aleatoire(); Simulation_d_un_quai_de_chargement. Ceduler_un_evenement (p. Ent, Instant, p. Type, Instant); Simulation_d_un_quai_de_chargement. Simuler(); Simulation_d_un_quai_de_chargement. Rapport(); } Chapitre IV - Développement du modèle 38

SIMULATION D’UN QUAI DE CHARGEMENT Veuillez fournir les renseignements suivants : Duree du rechauffement

SIMULATION D’UN QUAI DE CHARGEMENT Veuillez fournir les renseignements suivants : Duree du rechauffement = 10000. 0 Duree de la simulation = 50000. 0 Temps moyen entre deux arrivees de bateaux = 10. 0 Duree moyenne d’un chargement = 9. 0 ----------------------RESULTATS DE LA SIMULATION NOMBRE TOTAL D’ENTITES AYANT QUITTE LE SYSTEME : 4295 TEMPS MOYEN PASSE DANS LE SYSTEME POUR CEUX QUI ONT QUITTE : 108. 473 NOMBRE MOYEN D’USAGERS DANS LA FILE < File de bateaux > : 10. 785 TEMPS TOTAL PASSE DANS LA FILE < File de bateaux > : 432500 NOMBRE MOYEN D’UNITES UTILISANT LA RESSOURCE < Quai de chargement > : 0. 902509 NOMBRE TOTAL D’UNITES QUI ONT ACCEDE A LA RESSOURCE < Quai de chargement > Chapitre IV - Développement du modèle 39 : 4295