Activité Tri
Transcription
Activité Tri
Le tri C’est quoi ? À quoi ça sert ? David Rivreau http://ima.uco.fr IMA, j’imagine l’avenir Le tri, c’est quoi ? • Trier consiste à ranger des éléments comparables dans un certain ordre (croissant ou décroissant) • Illustration (tableau d’entiers) : IMA, j’imagine l’avenir 2 Le tri, à quoi ça sert ? • Le tri informatique à de nombreuses applications : • • • • • Tri des courriels (ancienneté, expéditeur…) Tri des résultats d’un moteur de recherche Tri d’un tableau Excel Tri des facettes pour l’affichage dans les jeux 3D Analyse de données massives… • Certaines études estiment que le temps CPU consacré à trier des données est de l’ordre de 25%... IMA, j’imagine l’avenir 3 Déroulement de la séance • Examen d’un problème concret • Mise en place d’un algorithme de tri • Expérimentation IMA, j’imagine l’avenir 4 Partie 1 Application du tri pour le bin-packing IMA, j’imagine l’avenir Cas d’application (1) • Vous gérez une société qui fait de la prestation dans le cadre du Cloud Computing et plus précisément vous offrez des espaces de stockage de données délocalisées (Data as a service). • Vos clients sont essentiellement des organisations gouvernementales qui vous confient des archives nécessitant une haute sécurité et une haute disponibilité d’accès. • Vous êtes chargé de la proposition commerciale et devez trouver une configuration qui répond au besoin à moindre coût. IMA, j’imagine l’avenir 6 Cas d’application (2) • Les principales données du problème sont : • L’ensemble de données à stocker regroupées par paquets de tailles prédéfinies • Un ensemble d’espace de stockage de capacités données avec un coût d’utilisation fixe pour chaque espace • Vous devez définir quelle taille et quel nombre d’espaces de stockage à utiliser sachant que : • Un ensemble de données ne peut être partagé sur deux stockages • Tous les espaces de stockage utilisés doivent être identiques IMA, j’imagine l’avenir 7 Exemple (1) • On a un ensemble de 24 ensembles de données : Taille des ensembles (en To) 32 To 41 To 56 To 12 To 10 To 47 To 35 To 17 To 15 To 29 To 112 To 62 To 24 To 33 To 81 To 57 To 22 To 90 To 23 To 27 To 86 To 41 To 38 To 29 To • Deux options possibles • Allouer des espaces de 800 To pour 180 k€/an • Allouer des espaces de 210 To pour 60 k€/an IMA, j’imagine l’avenir 8 Exemple (2) • Remarque • La somme des tailles des ensembles fait 1019 To : si on adopte la première solution, il faudra au moins 2 espaces de 800 To pour 360 k€/an • Conséquence • Il est plus économique de choisir l’option 2 s’il est possible de répartir les ensembles sur moins de 5 espaces de stockage de 210 To pour 300 k€/an IMA, j’imagine l’avenir 9 Identification du problème • Notre problème de stockage est un problème de bin-packing • Bin-Packing 1D • Donnée • n objets de poids 𝑎𝑖 • un ensemble de boîtes de capacité B • Objectif • Répartir les objets en un nombre minimal de boîtes sans excéder la capacité des boîtes IMA, j’imagine l’avenir 10 Applications pratiques (source wikipedia) • Pour la version classique en une dimension : • rangement de fichiers sur un support informatique • découpe de câbles • remplissage de camions avec comme seule contrainte le poids • Pour la version en deux dimensions : • découpe de matière première • placement de boîtes sur une palette • Pour la version en trois dimensions : • rangement d'objets dans des boîtes, un entrepôt, etc... IMA, j’imagine l’avenir 11 Nombre de solutions • Peut-on examiner Toutes les solutions possibles et choisir la meilleure ? • Algorithme naïf : • on génère Toutes les partitions d’objets • on rejette les partitions qui ne vérifient pas la capacité • on choisit une partition à nombre minimal d’ensemble • Nombre de partitions (nombre de Bell 𝐵𝑛 ) • Suite : 1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, …. 𝑛 𝐵𝑛+1 = 𝑘=0 IMA, j’imagine l’avenir 𝑛 𝐵𝑘 𝑘 12 Nombre de Bell • Par exemple : 𝐵2841 =9.30740105 × 106538 • Impossible d’énumérer toutes les solutions possibles en temps raisonnable… IMA, j’imagine l’avenir 13 Méthode heuristique • First-fit decreasing (FFD) • On trie la liste d'articles par ordre décroissant de taille • On range chaque article dans l'ordre de la liste • L'article courant est placé dans la première boîte qui peut le contenir IMA, j’imagine l’avenir 14 Retour sur l’exemple Espace disponible Ensemble Ensemble 790 ::sur 47To Ensemble Ensemble Ensemble 68:459:86 :56 57 62 ToTo To Ensemble 10 :5To 41To Ensemble :81 41To 47 56 57 86 81 41 Ensemble To Ensemble 12: :3112 To On peut tout stocker espaces 210 41 To62 :90 c’est la solution la plus économique 112 112 98 To 210 To 8 To 86 210 124 43 2 ToTo 81 62 210 148 91 To 35 0 To To 57 47 19 To 2 To 122 210 84 163 51 To 41 56To 181 101 29 To To 152 125 210 78 To 19 90 29 41 29 IMA, j’imagine l’avenir 27 56 38 24 41 35 33 23 22 32 15 12 17 10 15 Performance L’algorithme First Fit Decreasing n'utilise jamais plus de 11/9 OPT + 1 boîtes (où OPT est le nombre de boîtes dans une solution optimale) IMA, j’imagine l’avenir 16 Mise en place de l’algorithme de résolution (1) • Données en entrée : • Tableau de n tailles d’ensemble : dataSize • Capacité commune des espaces de stockage : storageCapacity • Données en sortie • Tableau d’affectation des ensembles aux espaces de stockage : storageAssignment • Tableau des capacités résiduelles des espaces de stockage : storageRemainder • Nombre d’espaces utilisés : nbStorage IMA, j’imagine l’avenir 17 Mise en place de l’algorithme de résolution (2) • Illustration : • dataSize = [25, 22, 10, 8, 7, 4], storageCapacity = 40 • Solution : Stockage n°0 Stockage n°1 25 22 10 8 4 7 • Données en sortie : • storageAssignment = [[ 0, ?, 0, ?, 1, 1, ?, 0, 0, ?, ?, 1, 0, 0, ?, ?, 1, 1, ?] ?] 0] 0] • storageRemainder = [40, [15, [5, [1, [1,3, 18, 10, 3, 18, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40] 40] 40] 40, 40, 40, 40, 40] • nbStorage = 0 2 1 IMA, j’imagine l’avenir 18 Format des données en entrées • Nos jeux de données seront fournis sous forme de texte (directement dans le programme ou dans des fichiers) au format suivant : storageCapacity nbData dataSize • Pour l’exemple précédent, on aura : 40 6 25 22 10 8 7 4 IMA, j’imagine l’avenir 19 Programmation sous Eclipse • Nous allons programmer notre algorithme en Java • Téléchargez le fichier BinPacking.zip situé sous Documents/Activité Tri de l’espace http://lms.uco.fr/chamilo/courses/BISON • Lancez Eclipse, et importez le projet via le menu Import -> Existing Projects into Workspace -> Select archive file IMA, j’imagine l’avenir 20 Contenu du programme • On trouve 4 sous-algorithmes dans la classe : • checkSolution : qui permet de vérifier une solution • displaySolution : qui permet d’afficher une solution • nextStorage : qui construit une solution naïve affectant chaque ensemble de données dans un espace de stockage différent • firstFit : que vous devez écrire de façon à traduire l’heuristique first fit que nous avons décrite • La méthode main permet de tester les deux jeux de données qui ont servi d’exemple dans les transparents IMA, j’imagine l’avenir 21 A vous de jouer ! • Vous devez écrire en Java votre algorithme dans firstFit • Pour vérifier que votre algorithme est correct, lancez le programme en effectuant Run (via le menu ou Ctrl+F11) • Vous devez avoir dans la fenêtre console : IMA, j’imagine l’avenir 22 Partie 2 Définir un algorithme de tri IMA, j’imagine l’avenir 23 Algorithme de tri • Jusqu’à présent, nous avons fourni à notre algorithme un tableau préalablement trié « manuellement » • Bien évidemment, ce tri manuel n’est possible que pour des petits tableaux • Dans cette deuxième partie, nous nous proposons de définir un algorithme de tri IMA, j’imagine l’avenir 24 Mise en place d’une stratégie de tri • Par groupe de deux, récupérez les carrés de papier et disposez les dans le désordre : 13 2 65 62 5 31 42 7 5 19 • Définissez ensemble une stratégie pour trier les carrés en ordre croissant : 2 5 5 7 13 19 31 42 62 65 • Restituez la stratégie retenue en français de façon non ambiguë. IMA, j’imagine l’avenir 25 Traduction en algorithme • On se place désormais dans le cas d’un tableau contenant des entiers tirés au hasard et dont il faut réordonner les valeurs en ordre croissant. • Donner l’algorithme qui correspond à votre stratégie. IMA, j’imagine l’avenir 26 Identification de l’algorithme • En toute probabilité, vous avez dû définir une stratégie relativement classique (proche d’un algorithme connu). • En utilisant l’applet xSortLab du site http://www.kosbie.net/cmu/fall-08/15-100/handouts/xSortLab.html , essayez d’identifier le nom d’usage de votre algorithme. • Vous pouvez aussi tenter votre chance avec cette vidéo ou celle-ci. IMA, j’imagine l’avenir 27 Programmation de l’algorithme • Téléchargez la classe Sorting.java située sous Documents/Activité Tri de l’espace http://lms.uco.fr/chamilo/courses/BISON • Glissez-déposez la classe dans le package demo : • Complétez le code de sort avec la traduction de votre algorithme IMA, j’imagine l’avenir 28 Exécution du tri et performance • Exécutez votre code • Si tout va bien, vous avez un message du type : Le tableau est correctement trié Temps d'exécution : 1117ms. • Les algorithmes de tri ont des performances très variables. Pour s’en convaincre, vous pouvez visiter le site illustratif http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/sortcontest/sortcontest.htm IMA, j’imagine l’avenir 29 Partie 3 Intégration du tri pour le bin-packing IMA, j’imagine l’avenir 30 Intégration du tri • Remplacez la donnée 2 par une version non triée dans BinPacking : // donnée exemple numéro 2 non trié String data2 = "210 " + "24 " + "32 41 56 12 10 47 35 17 15 29 112 62 24 33 81 57 22 90 23 27 86 41 38 29"; • Ajoutez le tri en ordre décroissant juste avant l’appel à firstFit : // on trie en ordre croissant dataSize Sorting.sort(dataSize); // on inverse l'ordre for (int i = 0; i < nbData / 2; i++) { int tmp = dataSize[i]; dataSize[i] = dataSize[nbData - 1 - i]; dataSize[nbData - 1 - i] = tmp; } • L’exécution du programme doit produire le même résultat IMA, j’imagine l’avenir 31 Fichier • Le dossier dat du projet Eclipse contient des données de grande taille • Vous pouvez tester ces fichiers en procédant comme indiqué à côté : IMA, j’imagine l’avenir 32 Pour aller plus loin IMA, j’imagine l’avenir 33 Illustration de bin packing 3D • Le site ci-dessous permet d’examiner un problème de packing 3D de façon très visuelle : http://www.3dbinpacking.com/ IMA, j’imagine l’avenir 34 La Recherche Opérationnelle • Le bin-packing est un problème classique d’optimisation (recherche opérationnelle). • Les 4e années de l’IMA ont réalisé une vidéo pour présenter cette discipline en cours de communication http://vimeo.com/moogaloop.swf?clip_id=56378574 IMA, j’imagine l’avenir 35