390 likes | 499 Views
Chapitre IV. Développement du modèle. 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.
E N D
Chapitre IV Développement du modèle
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
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. DELTA on résoud le 1e problème au dépens de la précision. DELTA la précision augmente mais le # d’itérations augmente entraînant des calculs supplémentaires. Chapitre IV - Développement du modèle
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
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
SIMC++ Chapitre IV - Développement du modèle
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
SIMC++ Définition d’une nouvelle loi Uniforme Exponentielle Weibull Exacte Loi de probabilité 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
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
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
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
SIMC++ Création d’une nouvelle entité bateau Définition du nombre d’unités constituant l’entité Entité Processus d’arrivée Loi de probabilité Processus de mortalité Chapitre IV - Développement du modèle
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
SIMC++ Création d’une nouvelle activité à effectuer remplissage d’un panier d’épicerie Aucun délai pour débuter cette activité (pas de file d’attente) Travail Durée du travail Loi de probabilité Chapitre IV - Développement du modèle
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
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
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
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) Définition de la ressource associée File d’attente 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
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
SIMC++ Classe vide Objet de simulation Chapitre IV - Développement du modèle
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
SIMC++ Création d’un nouveau type d ’événement Arrivée d’un nouveau bateau Défn de la caractéristique de cet événement Départ du système Arrivée dans le système Type d ’événement 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é travail entité ressource file d’attente Chapitre IV - Développement du modèle
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
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 Définition d’un graphe d’événements i.e. les événements à céduler lors du traitement de chaque événement Ensemble des types d’événements Accès aux types d’événements à céduler lors du traitement d ’un événement. Chapitre IV - Développement du modèle
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
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
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
SIMC++ 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 Simulateur 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
SIMC++ Affichage automatique des résultats de la simulation pour chaque objet de simulation : # d’entités ayant quitté le système temps moyen passé dans le système pour ceux qui ont quitté Entité # de travaux effectués durée moyenne du travail effectué Simulateur Travail # d’unités qui ont accédé à la ressource taux d’utilisation de la ressource Ressource # moyen d’usagers dans la file d’attente temps total passé dans la file d’attente File d’attente Chapitre IV - Développement du modèle
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
SIMULATION D’UN QUAI DE CHARGEMENT float Duree_rechauffement, Duree_simulation, temps_moyen_entre_2arrivees, 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 : " << "\n\n"; 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_2arrivees; cout << " Duree moyenne d'un chargement = "; cin >> duree_moyenne_chargement; cout << " ---------------------------------\n"; } Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT void main() { Lire_Donnees(); Loi_de_probabilite * pLoi_d_arrivee_des_bateaux = new Loi_de_probabilite(Exponentielle); pLoi_d_arrivee_des_bateaux -> Fixer_un_parametre_de_la_loi (temps_moyen_entre_2arrivees,1); Loi_de_probabilite * pLoi_de_depart_du_systeme = new Loi_de_probabilite(Exacte); Loi_de_probabilite * pDuree_du_service = new Loi_de_probabilite(Exponentielle); pDuree_du_service -> Fixer_un_parametre_de_la_loi (duree_moyenne_chargement,1); Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT Entite * pEnt = new Entite("bateau"); pEnt -> Definir_processus_d_arrivee(pLoi_d_arrivee_des_bateaux); pEnt -> Definir_processus_de_mortalite(pLoi_de_depart_du_systeme); Ressource * pRes = new Ressource("Quai de chargement"); pRes -> Definir_duree_de_service(pDuree_du_service); File_d_attente * pFile = new File_d_attente("File de bateaux"); pFile -> Definir_ressource_associee(pRes); Ensemble_des_types_d_evenements * pEns = new Ensemble_des_types_d_evenements(6); Objet_de_simulation * pObj; Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT Type_d_evenement * pType = new Type_d_evenement("Arrivee d'un bateau"); pType -> Definir_caracteristique(Arrivee_dans_le_systeme); pObj = (Objet_de_simulation *) pEnt; pType -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(1, pType); Type_d_evenement * pT = new Type_d_evenement("Depart d'un bateau"); pT -> Definir_caracteristique(Depart_du_systeme); pObj = (Objet_de_simulation *) pEnt; pT -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(2, pT); Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT pT = new Type_d_evenement("Entree dans la file de bateaux"); pT -> Definir_caracteristique(Entree_dans_une_file); pObj = (Objet_de_simulation *) pFile; pT -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(3, pT); pT = new Type_d_evenement("Sortie de la file de bateaux"); pT -> Definir_caracteristique(Sortie_de_la_file); pObj = (Objet_de_simulation *) pFile; pT -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(4, pT); Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT pT = new Type_d_evenement("Debut du chargement"); pT -> Definir_caracteristique(Acces_a_une_ressource); pObj = (Objet_de_simulation *) pRes; pT -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(5, pT); pT = new Type_d_evenement("Fin du chargement"); pT -> Definir_caracteristique(Liberation_d_une_ressource); pObj = (Objet_de_simulation *) pRes; pT -> Definir_objet_de_la_simulation(pObj); pEns -> Definir_un_type_d_evenement(6, pT); Chapitre IV - Développement du modèle
SIMULATION D’UN QUAI DE CHARGEMENT pEns -> Definir_graphe_d_evenement(1, 1); pEns -> Definir_graphe_d_evenement(1, 3); pEns -> Definir_graphe_d_evenement(1, 5); pEns -> Definir_graphe_d_evenement(4, 5); pEns -> Definir_graphe_d_evenement(5, 6); pEns -> Definir_graphe_d_evenement(6, 4); pEns -> Definir_graphe_d_evenement(6, 2); Chapitre IV - Développement du modèle
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(pEns); float Instant; Instant=pLoi_d_arrivee_des_bateaux->Generer_une_valeur_pseudo_aleatoire(); Simulation_d_un_quai_de_chargement.Ceduler_un_evenement (pEnt, Instant, pType, Instant); Simulation_d_un_quai_de_chargement.Simuler(); Simulation_d_un_quai_de_chargement.Rapport(); } Chapitre IV - Développement du modèle
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 > : 4295 Chapitre IV - Développement du modèle