====== TP3 ======
Le but de ce TP est de résoudre des problèmes d'[[https://fr.wikipedia.org/wiki/PERT|ordonnancement]].
Pour cela, on résoudra & implémentera l'exercice 2 du TD3.
Le fait de tester toutes vos créations n'est plus explicitement demandé car cela doit **toujours** être fait.
La donnée de départ n'est pas un graphe, mais le "tableau des contraintes" tel qu'il est donné en TD. Concrètement :
OBTENTION = "Obtention Permis"
ADDUCTION = "Adduction Eau EdF"
MURS = "Fondations + Murs"
CHARPENTE = "Charpente"
TOITURE = "Toiture"
PLAFOND = "Plafond"
CLOISONS = "Cloisons"
PLOMBERIE = "Plomberie"
ELECTRICITE = "Electricite"
PLATRE = "Platre"
DUREE = "duree"
PREDECESSEUR = "predecesseurs"
CONTRAINTES = {
OBTENTION: {DUREE: 6, PREDECESSEUR: []},
ADDUCTION: {DUREE: 3, PREDECESSEUR: []},
MURS: {DUREE: 5, PREDECESSEUR: [OBTENTION, ADDUCTION]},
CHARPENTE: {DUREE: 2, PREDECESSEUR: [MURS]},
TOITURE: {DUREE: 2, PREDECESSEUR: [CHARPENTE]},
PLAFOND: {DUREE: 2, PREDECESSEUR: [TOITURE]},
CLOISONS: {DUREE: 3, PREDECESSEUR: [PLAFOND]},
PLOMBERIE: {DUREE: 3, PREDECESSEUR: [PLAFOND, CLOISONS]},
ELECTRICITE: {DUREE: 2, PREDECESSEUR: [PLAFOND, CLOISONS]},
PLATRE: {DUREE: 3, PREDECESSEUR: [PLAFOND, CLOISONS, PLOMBERIE, ELECTRICITE]}
}
On recopiera donc le code ci-dessus dans un fichier.
Les variables globales (CHARPENTE = "Charpente", ...) permettent d'utiliser la complétion automatique de pycharm (celle-ci ne marche pas sur les chaines de caractères).
Dans un autre fichier, on écrira un programme qui, à partir de ces données, construira un graphe qui sera implémenté sous la forme d'un [[https://informatique.centrale-marseille.fr/tutos/post/python-bases.html#les-dictionnaires|dictionnaire]].\\
Les clés du dictionnaire seront (tous) les sommets, &, à chaque clé K sera associé un (sous-)dictionnaire. Les clés en seront (tous) les sommets. À chaque clé K' sera associé un nombre :
* 0 si K = K'
* la longueur de l'arc K —> K' si celui-ci existe
* -1 sinon.
On fera attention à ne pas oublier les sommets "alpha" (qui est relié aux sommets sans prédécesseurs) & "omega" (à qui sont reliés les sommets sans successeurs).
À partir de ce graphe, on calculera les dates au plus tôt & dates au plus tard de chaque tâche, & on déterminera les tâches critiques.