Recherche Opérationnelle Duhamel - Lacomme F2

publicité
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
Téléchargement