Bilan du stage «test de LocalSolver pour le placement des assemblages en piscine»
Bilan du stage «test de LocalSolver pour le placement des assemblages en piscine» PLAN Le problème des permutations de grappes Le problème du placement des assemblages en piscine Lien entre permutations et placement Présentation de LocalSolver Résultats du stage Modélisation du problème Résultats numériques Comparaison avec une heuristique «maison» Liens entre permutations et placement Choix final de la méthode Discussion libre
Permutation des grappes Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire Permutation élémentaire = déplacement d une grappe d un assemblage cédant à un assemblage recevant Un assemblage
Permutation des grappes Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire Permutation élémentaire = déplacement d une grappe d un assemblage cédant à un assemblage recevant Une grappe Commande Source Bouchon Instrumentation
Permutation des grappes Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire
Permutation des grappes Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire Selon leur type, les grappes sont situées à des endroits spécifiques du cœur Soit en un pour un Soit de manière indifférenciée (grappes banalisées)
Permutation des grappes Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire Les assemblages sont retirés puis replacés en cœur lors de chaque arrêt de tranche nucléaire Un tiers (ou un quart) des assemblages (les plus anciens) restent en piscine pour refroidissement, en attente de retraitement Deux tiers (ou trois quart) des assemblages retourneront en cœur pour une nouvelle campagne de production Un tiers (ou un quart) d assemblages neufs préalablement disposés en piscine vont entrer en cœur pour leur première campagne de production
Placement des assemblages en piscine Construire une séquence de permutations élémentaires des grappes lors de l arrêt d une tranche nucléaire Une solution est une suite ordonnée de lots de permutation A chaque lot est associé un outil Dans un lot, les permutations élémentaires sont totalement ordonnées pour le robot, Cet ordre total est une mise en œuvre de l ordre partiel déduit des contraintes de précédence Marge de manœuvre Le problème du placement des assemblages en piscine consiste à déterminer dans quelle alvéole disponible de la piscine sera positionné chacun des assemblages déchargés du cœur : Pour minimiser le temps total de trajet du robot de manutention Distance de Tchebychev : dist(x, y) = max ( x 1 y 1, x 2 y 2,.., x n y n ) En tenant compte des permutations élémentaires à effectuer En tenant compte du positionnement des assemblages neufs En tenant compte des alvéoles déjà occupées en piscine (assemblages, adaptateurs, étuis)
Lien entre permutations et placement Construire une solution au problème du placement Le «véritable» problème est en fait le problème complet «permutations + placement» De bonne permutations dépendent du placement en piscine (cf. ordre partiel) Un bon placement dépend des permutations et de leur ordre Problème complet trop complexe pour un traitement frontal : Permutations : TSP avec contraintes de précédence et sommets optionnels Placement : QAP problème d affectation quadratique Décomposition D abord construction de la gamme de permutations Ensuite placement des assemblages en piscine Comment placer des assemblages en piscine sans aucune idée des permutations à mettre en œuvre?
Présentation LocalSolver
Résultats du stage Modélisation QAP : placer M objets dans N boîtes (N M) de telle manière que : Chaque boîte contient au plus un objet Chaque objet est placé dans un boîte et une seule On cherche à minimiser la somme des coûts des placements relatifs des couples d objets (i, j) fonction de la distance Di,j Formellement
Résultats du stage Modélisation Volumétrie : Jusqu à 320 assemblages Matrice F = 320 x 320 ~100 000 Jusqu à 1000 alvéoles Matrice D = 1000 x 1000 ~1000 000 Soit ~100 milliards de termes dans la fonction objectif. En fait le robot effectue un trajet constitué de quelques centaines de déplacement élémentaires ~350 déplacements élémentaires Soit 350 millions de termes (300 fois moins!) message «Out of memory»
Résultats du stage Modélisation Travail sur la modélisation : Astuce : le trajet du robot peut être vu comme deux trajets : - un trajet sur les abscisses - un trajet sur les ordonnées Chaque déplacement du robot entre 2 alvéoles a 1000 999 possibilités (il peut se faire entre tout couple d alvéoles a priori) Si la piscine est de taille 30 35 alors : - Chaque déplacement du robot entre 2 abscisses a 30 29 possibilités, soit 870 - Chaque déplacement du robot entre 2 ordonnées a 35 34 possibilités, soit 1190 Par ailleurs le temps de déplacement entre 2 alvéoles se calcule simplement en fonction du temps de déplacement sur les abscisses et du temps de déplacement sur les ordonnées Taille : on passe de 350 déplacements 999 000 couples d alvéoles (=349 650 000) à : 350 déplacements en abscisse 870 (=304 500) + 350 déplacements en ordonnée 1190 (=416 500) = 721 000 expressions, i.e. une réduction par un facteur 485. 2 ème astuce : pour chaque assemblage A on définit ci-dessus les expressions Abs(A) et Ord(A), resp. l abscisse et l ordonnée de l alvéole où est placé A. On peut se contenter d affecter à A une valeur, le code de l alvéole où il sera placé, à condition de récupérer de manière simple l abscisse et l ordonnée de l alvéole à partir de son code
Résultats du stage Modélisation Travail sur la modélisation : 2 ème astuce suite : on définit 2 fonctions utilisateurs CalculeAbs(P) et CalculeOrd(P) pour chaque alvéole P, et on utilise l appel CalculeAbs(Alveole(P)) et CalculeOrd(Alveole(P)) à la place des expressions Abs(A) et Ord(A). Les deux fonctions CalculeAbs et CalculeOrd sont représentées une seule fois en interne et leur calcul est très simple, code d une alvéole = 100 Abs(P) + Ord(P) D où Abs(codeP) = codep div 100 et Ord(codeP) = codep modulo 100 Avec Alveole(a) = 101 xa1_1 + + 130 xa1_30 + 201 xa2_1 + + 230 xa2_30 + + 3501 xa35_1 + + 3530 xa35_30 On divise globalement encore par 2 le nombre d expressions, et on trouve un peu plus vite des solutions un peu meilleure par rapport à la modélisation précédente Pour trouver cette astuce il faut connaître (un peu) le fonctionnement du solveur (arbre syntaxique). Pas choquant car pareil pour Cplex, Xpress, etc. mais à savoir.
Résultats du stage Le langage Exemple d énoncé extrait de la première modélisation : + données Langage souple et puissant grâce à la définition des fonctions utilisateurs
Résultats du stage Le langage un énoncé complet :
Résultats du stage Le langage un énoncé complet :
Résultats du stage Le langage un énoncé complet :
Résultats du stage Résultats sur 3 jeux de données Temps d exécution en secondes Coût des solutions en secondes (temps de trajet du robot) Temps (en sec.) Cout (temps de trajet en sec.) Tranche1 30 639 60 633 90 628 120 628 300 628 3600 617 Tranche2 30 2488 60 2453 90 2425 120 2425 300 2373 3600 2342 Tranche3 30 2578 60 2498 90 2455 120 2436 300 2408 3600 2378
Résultats du stage Tranche 3 Solution en 1 sec.
Résultats du stage Tranche 3 Solution en 1 sec.
Résultats du stage Tranche 3 Solution en 30 sec.
Résultats du stage Tranche 3 Solution en 600 sec.
Résultats du stage Tranche 3 Solution en 3600 sec.
Test d une méthode alternative Qualité des solutions fournies par LocalSolver, est-on loin de l optimum? Test de méthodes heuristiques Placement glouton aléatoire. Idée : placer l assemblage recevant près du cédant Descente locale. Idée : permutation des positions de groupes de 3 et 2 assemblages Coût des solutions en secondes (temps de trajet du robot) Placement initial : coût 2744, en 63 sec.
Test d une méthode alternative Placement initial : 63 sec., coût = 2744
Test d une méthode alternative Qualité des solutions fournies par LocalSolver, est-on loin de l optimum? Descente : le «3-Opt» et le «2-Opt» permettent de gagner quelques pourcents, entre 200 et 300 secondes pour FLA3 en un temps de l ordre de 4 à 5 mn, puis plus d amélioration L amélioration porte sur le compromis temps de trajet à vide / temps de trajet à plein en augmentant le premier au bénéfice du second Avec l enchaînement placement initial + amélioration locale, on obtient des solutions du même ordre que LocalSolver (ou un peu moins bien) L analyse des solutions montrait qu il avait encore des trajets à vide «longs» Dus aux assemblages neufs Et pourtant déjà plus ou moins pris en compte au moment de la construction des permutations Cf. lien permutations / placement, peut-on améliorer l ordre des permutations? construction heuristique d un chemin hamiltonien passant par toutes les permutations d un lot, de coût minimum, et tenant compte des contraintes de précédence (assemblages dégrappés et regrappés dans le même lot) heuristique constructive (on choisit la permutation la plus proche sans circuit) + amélioration «4-Opt» + «3-Opt» Idée : on construit le chemin hamiltonien après le placement initial puis ensuite on fait la descente
Test d une méthode alternative Qualité des solutions fournies par LocalSolver, est-on loin de l optimum? Recherche de circuit hamiltonien : amélioration substantielle de l ordre de 40% à 50%, voire un peu plus Possible aussi sans doute d enchaîner 3 résolution de problèmes avec LocalSolver Placement initial (testé de fait) Circuit hamiltonien (?) Amélioration (testé de fait) Plus lourd qu enchaîner des heuristiques (générer 3 énoncés) Compte tenu de la qualité des solutions obtenues, sans doute très peu à gagner dans le meilleurs des cas, si LS fait mieux que les heuristiques
Test d une méthode alternative Placement final : 263 sec., coût = 1277
Test d une méthode alternative Placement final : 263 sec., coût = 1277 Lot 1
Test d une méthode alternative Placement final : 263 sec., coût = 1277 Lot 2
Test d une méthode alternative Placement final : 263 sec., coût = 1277 Lot 3