Recherche Opérationnelle Duhamel - Lacomme F2 - F3 TP numéro 1 Durée : 2 séances Partie 1 (graphe) Réaliser un programme C/C++ permettant : 1) De représenter un graphe orienté en mémoire 2) De lire le graphe suivant depuis un fichier texte 3) De calculer le plus court chemin de 1 à 9 en utilisant l'algorithme de Dijkstra. Consignes : le programme affichera les calculs intermédiaires. Partie 2 (plus court chemin) Télécharger le graphe à l'adresse : http://www.isima.fr/~duhamel/OAD/DLP_210.dat. C’est un graphe représentant un réseau routier pour lequel les distances ne sont pas euclidiennes, i.e. d(i,j) et d(j,i) ne sont pas nécessairement identiques Question 1. Réaliser un code C++ le plus performant possible en temps d'exécution qui calcule le plus court chemin du nœud 1 au nœud 210 en utilisant : 1) l'algorithme de Dijkstra 2) l'algorithme de Bellman, en utilisant l'ordre des sommets 1 2…209 210 et 1 209...2 210 Question 2. Étude comparative des performances des 2 algorithmes On considère les 13 sommets grisés dans le graphe (cf. figure à la fin du document) : 8 26 41 58 60 95 114 155 168 148 199 207. Utiliser les algorithmes de Bellman et de Dijkstra pour calculer le chemin le plus court entre chacun de ces 13 sommets. Reportez pour chaque couple la valeur du chemin et le temps de calcul total. Pour l'algorithme de Bellman vous utiliserez 2 ordres de passage sur les sommets : l'ordre lexicographique et l'ordre inverse. 8 26 41 46 58 60 95 114 148 155 168 199 207 8 26 41 46 58 60 95 114 148 155 168 199 207 Concluez sur la performance relative des deux méthodes sur ce graphe à valeurs positives. Y a-t-il une différence de performance sur l'algorithme de Bellman en changeant l'ordre de passage sur les sommets ? Partie 3 (ordonnancement de type PERT) Les opérations nécessaires à la mise en exploitation d'un nouveau gisement minier sont : tâche description Durée (j) (a) obtention d'un permis d'exploitation 120 (b) établissement d'une piste de 6 km 180 (c) installation de deux sondeuses 30 (d) création des bâtiments provisoires 30 (e) goudronnage de la piste 60 (f) conduction d'eau 90 (g) campagne de sondage 240 (h) équipement des puits 180 (i) transport et installation du matériel d'exploitation 30 (j) construction des bureaux 240 (k) aménagement du fond 360 (l) construction d'une laverie 240 Les opérations sont soumises aux contraintes suivantes : la tâche (b) succède à la tâche (a) ; les tâches (c), (d) et (e) débutent au moins 400 jours après le début des travaux et nécessitent la fin de la tâche (b) ; la tâche (f) ne peut débuter que 450 jours après le début des travaux et 50 jours après le début de la tâche (b) ; les tâches (j) et (h) ne peuvent débuter que lorsque les taches (d), (e), (f) et (g) sont achevées ; les taches (i), (k) et (l) ne peuvent débuter que lorsque les taches (h) et (j) sont achevées. Travail à faire : 1) Représenter le problème sous la forme d'un graphe orienté. 2) Travail d’implémentation a. définir un fichier d'entrée au format texte décrivant le problème, par exemple au format suivant // taches 1 120 obtention d'un permis d'exploitation 2 180 établissement d'une piste de 6 km 3 30 installation de deux sondeuses 4 30 création des bâtiments provisoires … 12 240 construction d'une laverie // precedences 10 225 361 425 … b. Concevoir une structure de données simples mais efficace pour stocker le graphe c. Réaliser le programme le plus performant possible en temps d'exécution pour calculer les dates de début au plus tôt, les dates de fin au plus tard puis les marges et le chemin critique d. Que se passe-t-il si la durée de la tâche (e) passe de 60 à 120 ? e. Quel retard maximal peut-on prendre sur la tâche (j) sans que cela ne change la date d'aucune opération dans le graphe ? Consignes : le programme réalisera impérativement une représentation graphique sous la forme d'un diagramme Gantt des opérations. Annexe : le graphe DLP_210.dat à télécharger