Cours N 3 Principes de Simulation Universit Ibn
Cours N° 3 Principes de Simulation Université Ibn Khaldoun Tiaret Département INF B. Khaled
Modélisation à évènement discret • Un système est modélisé en termes de son état à chaque point dans le temps. • Ceci est approprié pour les systèmes où les changements surviennent seulement à des points discrets dans le temps…
Simulation à Events Discrets : Concepts (1) Système Une collection d'entités qui interagissent ensemble dans le temps pour accomplir une ou plusieurs objectifs, par exemple: banque, réseau, système de production. Modèle Une représentation abstraite d'un système, contenant généralement de structure, logique, ou des relations mathématiques qui décrivent le système. Etat du Système Une collection de variables qui contiennent toutes les informations nécessaires pour décrire la système à tout moment. Entité Un objet dans le système qui nécessite une représentation explicite dans le modèle, par exemple: personnes, machines, nœuds, paquets, serveur, client. Attributs Les propriétés d'une entité donnée, par exemple, longueur d'un paquet, capacité d’une machine. Liste, ensemble Une collection d'entités associées ordonné d'une certaine façon logique dans une file d'attente. • contient des entités ou des notifications d'événements • les entités dans une liste sont toujours organisés selon une règle, par exemple, FIFO, LIFO, ou classé par un attribut, par exemple : priorité, date d'échéance Evénement Un événement instantané qui change l'état d'un système. Notification d’événement Un enregistrement d'un événement qui va se produire immédiatement ou à une date ultérieure, ainsi que toutes les données associées nécessaires pour exécuter l'événement
Simulation à Events Discrets : Concepts (2) Liste d’événement Une liste de notifications d'événements pour les événements futurs, ordonnancée par le temps de l'événement; connu comme la future liste d'événements (FEL) ou futur ensemble d'événements (FES). Activités Une durée de temps de longueur donnée, connue d’avance. Représente un temps de service, temps inter arrivée, ou tout autre temps de traitement dont la durée a été caractérisé par le concepteur. La durée d'une activité peut être spécifié comme suit : • déterministe Toujours 5 unités de temps • statistique Le tirage au sort de {2, 5, 7} • Une fonction dépendante des variables et entités du système La durée d'une activité ne soit pas affecté par d'autres événements. Pour gérer les activités, une notification d'événement est créé à chaque fois qu’une activité se termine, par exemple, soit le temps courant = 100 et un service de durée de 5 unités de temps commence. • planifier un événement «fin de service» à t = temps courant + 5 = 105 Délai Un temps de durée indéterminée , dont on ignore à quel moment se termine. • Le temps d’attente des clients dans la file d’en attente dépend du nombre et du temps de service des autres clients. • Le temps d’attente est un résultat de la simulation. Horloge Une variable représentant le temps de simulation.
Simulation à Events Discrets : Concepts (3) • Activité vs. Délai • Activité • L'activité est connu comme une attente inconditionnel • La fin d'une activité est un événement. • Délai • Le Délai est connu comme une attente conditionnelle • Les délais sont gérés en plaçant les entités dans une liste représentant par exemple une file d'attente
Simulation avec Java • Première implémentation simple d’une simulation spécifique (cas d’épicerie) • Contraintes d’implémentation • Une seule caisse avec une file d’attente • 1000 clients • Temps inter-arrivées sont distribués selon la loi exponentielle de paramètre λ = 4. 5 • Temps de service sont distribués selon la loi exponentielle de paramètre λ = 3. 2 • Connue : M/M/1 dans les systèmes de file d’attente
Exemple 1 : Une épicerie (cours précèdent)
Simulation avec Java • Etat du Système • • queuelength • number. In. Service • Entités • customers (client) • • future. Event. List • mean. Inter. Arrival. Time • mean. Service. Time • Paramètres d’entrés • mean. Inter. Arrival. Time • mean. Service. Time • total. Customers • rho=Busy. Time/horloge avgr=Average response time pc 4= number of customers who spent more then 4 minutes Fonctions • • horloge last. Event. Time totaly. Busy max. Queue. Length sum. Response. Time Statistiques • • Liste des Events futurs • Durées d'activité Variables de simulation exponential (mean) Méthodes • • initialization process. Arrival process. Departure report. Generation
Simulation avec Java : class Event { public double time; private int type; public Event(int _type, double _time) { type = _type; time = _time; } public int get. Type() { return type; } public double get. Time() { return time; } }
Simulation avec Java : class Sim { // Class Sim variables public static double clock, mean. Inter. Arrival. Time, mean. Service. Time, last. Event. Time, total. Busy, max. Queue. Length, sum. Response. Time; public static long number. Of. Customers, queue. Length, number. In. Service, total. Customers, number. Of. Departures, long. Service; public final static int arrival = 1; public final static int departure = 2; public static Event. List future. Event. List; public static Queue customers; public static Random stream; // Event type for an arrival // Event type for a departure // given by the system. // A random number generator
Simulation avec Java : Main public static void main(String argv[]) { mean. Inter. Arrival. Time = 4. 5; mean. Service. Time = 3. 2; total. Customers = 1000; long seed = Long. parse. Long(argv[0]); stream = new Random(seed); // Initialize RNG stream future. Event. List = new Event. List(); // Initialize the FEL customers = new Queue(); // Set which holds the customers initialization(); // Loop until first “total. Customers" have departed while( number. Of. Departures < total. Customers ) { Event event = (Event)future. Event. List. get. Min(); // Get imminent event future. Event. List. dequeue(); // Be rid of it clock = event. get. Time(); // Advance simulation time if( event. get. Type() == arrival ) { process. Arrival(event); } else { process. Departure(event); } } report. Generation(); }
Simulation avec Java : initialisation // Seed the event list with Total. Customers arrivals public static void initialization() { clock = 0. 0; queue. Length = 0; number. In. Service = 0; last. Event. Time = 0. 0; total. Busy = 0 ; max. Queue. Length = 0; sum. Response. Time = 0; number. Of. Departures = 0; long. Service = 0; // Create first arrival event double event. Time = exponential(stream, Mean. Inter. Arrival. Time); Event event = new Event(arrival, event. Time); future. Event. List. enqueue(event); }
Simulation avec Java : Event Arrivé public static void process. Arrival(Event event) { customers. enqueue(event); queue. Length++; // If the server is idle, fetch the event, do statistics and put into service if( number. In. Service == 0 ) { schedule. Departure(); } else { total. Busy += (clock - last. Event. Time); // server is busy } // Adjust max queue length statistics if(max. Queue. Length < queue. Length) { max. Queue. Length = queue. Length; } // Schedule the next arrival Double event. Time = clock + exponential(stream, mean. Inter. Arrival. Time); Event next. Arrival = new Event(arrival, event. Time); future. Event. List. enqueue( next. Arrival ); last. Event. Time = clock; }
Simulation avec Java : Event Départ public static void schedule. Departure() { double service. Time = exponential(stream, mean. Service. Time); Event depart = new Event(departure, clock + service. Time); future. Event. List. enqueue(depart); number. In. Service = 1; queue. Length--; }
Simulation avec Java : Event Départ public static void process. Departure(Event e) { // Get the customer description Event finished = (Event) customers. dequeue(); // If there are customers in the queue then schedule the departure of the next one if( queue. Length > 0 ) { schedule. Departure(); } else { number. In. Service = 0; } // Measure the response time and update cumulative statistics double response = clock - finished. get. Time(); sum. Response. Time += response; if( response > 4. 0 ) long. Service++; // record long service total. Busy += (clock - last. Event. Time); number. Of. Departures++; last. Event. Time = clock; }
Simulation avec Java : génération des résultats public static void report. Generation() { double rho = total. Busy/clock; double avgr = sum. Response. Time/total. Customers; double pc 4 = ((double)long. Service)/total. Customers; System. out. println( "SINGLE SERVER QUEUE SIMULATION - GROCERY STORE CHECKOUT COUNTER "); System. out. println( "t. MEAN INTERARRIVAL TIME " + mean. Inter. Arrival. Time ); System. out. println( "t. MEAN SERVICE TIME " + mean. Service. Time ); System. out. println( "t. NUMBER OF CUSTOMERS SERVED " + total. Customers ); System. out. println( "t. SERVER UTILIZATION " + rho ); System. out. println( "t. MAXIMUM LINE LENGTH " + max. Queue. Length ); System. out. println( "t. AVERAGE RESPONSE TIME " + avgr + " Time Units"); System. out. println( "t. PROPORTION WHO SPEND FOUR "); System. out. println( "t MINUTES OR MORE IN SYSTEM " + pc 4 ); System. out. println( "t. SIMULATION RUNLENGTH " + clock + " Time Units"); System. out. println( "t. NUMBER OF DEPARTURES " + total. Customers ); }
Merci pour votre attention
- Slides: 18