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