80
Computer science — Théorie vs expérimentation — Partie 3 : Ingénierie algorithmique Christine Solnon INSA de Lyon - 5IF 2019 / 2020 1/47

Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Computer science— Théorie vs expérimentation —

Partie 3 : Ingénierie algorithmique

Christine Solnon

INSA de Lyon - 5IF

2019 / 2020

1/47

Page 2: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique

In almost every computation, a great variety of arrangements for thesuccession of the processes is possible, and various considerations mustinfluence the selection amongst them for the purposes of a CalculatingEngine. One essential object is to choose that arrangement which shall tendto reduce to a minimum the time necessary for completing the calculation.

Ada Byron, 1843

3 niveaux possibles d’optimisation (tuning) :

Algorithme ; Paradigmes algorithmiques, Structures de données, . . .

Code ; Boucles, Procédures, Gestion de la mémoire, . . .

Paramètres ; Meilleures valeurs pour une instance / classe d’instances

Objectif :

Améliorer les performances (temps, consommation mémoire, ...)

Ne change pas toujours les complexités théoriques (asymptotiques),Mais peut permettre de gagner plusieurs facteurs en pratique !

2/47

Page 3: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Plan du cours

1 Validation théorique d’algorithmes

2 Evaluation expérimentale d’algorithmes

3 Ingénierie algorithmiqueOptimisation d’algorithmesOptimisation de codeOptimisation de paramètres

4 Ethique des algorithmes

3/47

Page 4: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Optimisation d’algorithmes : Quelques règles générales

Utiliser de la mémoire pour économiser du temps

Faire de la “Memoization”, de la programmation dynamique, ...Maintenir incrémentalement plutôt que re-calculer du début

Utiliser les bonnes structures de donnéesConnaître les propriétés des différentes structures de données; Tables de hachage, Arbres, Tas, Disjoint-sets, Sparse-sets, . . .Etudier la fréquence des opérations pour choisir la bonne structure

Sortir des boucles au plus tôtExemples : Dijkstra, Bellman-Ford, . . .

Elaguer les arbres de recherche :

Calcul de bornes sur la fonction objectif ; Branch & BoundPropagation de contraintes ; Branch & PropagateUtilisation d’heuristiques d’ordre

4/47

Page 5: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPPermut : Enumère toutes les permutations ; O(n!)

5/47

Page 6: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPStop : Coupe la branche courante si longueur courante ≥ best

5/47

Page 7: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPBranch & Bound 1 : Borne = dmin ∗ nbNonVus

5/47

Page 8: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPBranch & Bound 2 : Borne =

∑i∈nonVus minj∈nonVus,j 6=i dij

5/47

Page 9: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPBranch & Bound 3 : Borne = coût du 1-tree minimal

5/47

Page 10: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPBranch & Bound 4 : Borne = subgradian opt. de Held-Karp (1-tree itéré)

5/47

Page 11: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPBranch & Bound 4 + h : Ajout d’une heuristique d’ordre

5/47

Page 12: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPDPrec : Programmation dynamique récursive ; O(n2 · 2n)

5/47

Page 13: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPDPiter : Programmation dynamique itérative ; O(n2 · 2n)

5/47

Page 14: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPEt si on change de benchmark?

Modèle de génération de graphes utilisé au slide précédent :

Génération aléatoire de n coordonnées (x , y) ∈ [0,1000]2

; Distribution uniforme

Coût d’une arête = distance euclidienne

; Expérimentations sur 10 graphes (critère de performance = temps moyen)

Nouveau modèle de génération aléatoire des graphes :

Pour chaque arête : génération aléatoire du coût dans [10,20]; Distribution uniforme

; Expérimentations sur 10 graphes (critère de performance = temps moyen)

6/47

Page 15: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPEt si on change de benchmark?

Modèle de génération de graphes utilisé au slide précédent :

Génération aléatoire de n coordonnées (x , y) ∈ [0,1000]2

; Distribution uniforme

Coût d’une arête = distance euclidienne

; Expérimentations sur 10 graphes (critère de performance = temps moyen)

Nouveau modèle de génération aléatoire des graphes :

Pour chaque arête : génération aléatoire du coût dans [10,20]; Distribution uniforme

; Expérimentations sur 10 graphes (critère de performance = temps moyen)

6/47

Page 16: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Permut : Enumère toutes les permutations ; O(n!)

7/47

Page 17: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Stop : Coupe la branche courante si longueur courante ≥ best

7/47

Page 18: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Branch & Bound 1 : Borne = dmin ∗ nbNonVus

7/47

Page 19: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Branch & Bound 2 : Borne =

∑i∈nonVus minj∈nonVus,j 6=i dij

7/47

Page 20: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Branch & Bound 3 : Borne = coût du 1-tree minimal

7/47

Page 21: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Branch & Bound 4 : Borne = subgradian opt. de Held-Karp (1-tree itéré)

7/47

Page 22: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2Branch & Bound 4 + h : Ajout d’une heuristique d’ordre

7/47

Page 23: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2DPrec : Programmation dynamique récursive ; O(n2 · 2n)

7/47

Page 24: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Résultats sur le benchmark 2DPiter : Programmation dynamique itérative ; O(n2 · 2n)

7/47

Page 25: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation d’algorithmes

Illustration sur le TSPComparaison de la distribution des coûts des arêtes pour les 2 benchmarks

8/47

Page 26: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Plan du cours

1 Validation théorique d’algorithmes

2 Evaluation expérimentale d’algorithmes

3 Ingénierie algorithmiqueOptimisation d’algorithmesOptimisation de codeOptimisation de paramètres

4 Ethique des algorithmes

9/47

Page 27: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Code Tuning

Différence d’échelle par rapport à l’optimisation d’algorithmes :

Boucles et procédures plutôt que paradigmes algorithmiquesGestion de la mémoire plutôt que structures de données

Quelques règles

Sortir certaines instructions des bouclesUtiliser des sentinelles ou des fantômes pour économiser des testsFusionner des bouclesDéplier des procédures. . .

; Gains souvent réduits. . . et perte de lisibilité/généralité potentielle !; Beaucoup de ces optim. sont faites par le compilateur (option -O3 de gcc)

We should forget about small efficiencies, say about 97% of the time :premature optimization is the root of all evil. D. Knuth

10/47

Page 28: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 1 : Tri par insertion

pour i variant de 1 à n − 1 faire/* Invariant : tab[0..i − 1] est trié */j ← i

tant que j > 0 et tab[j] > tab[j − 1] faireéchanger(tab[j], tab[j − 1])

j ← j − 1

Optimisations possibles ?

Opt1 : Sortir certaines instructions des boucles; Mémoriser tab[i] avant la boucle tant queOpt2 : Réduire le nombre de comparaisons; Ajouter une sentinelle dans tab[0]

n=40000 n=80000 n=160000Code original 0.65 2.66 10.59

Opt1 0.40 -38% 1.61 -40% 6.43 -39%Opt2 0.67 2.72 10.91Opt1+Opt2 0.30 -54% 1.22 -54% 4.88 -54%

11/47

Page 29: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 1 : Tri par insertion

pour i variant de 1 à n − 1 faire/* Invariant : tab[0..i − 1] est trié */j ← i

tant que j > 0 et tab[j] > tab[j − 1] faireéchanger(tab[j], tab[j − 1])

j ← j − 1

Optimisations possibles ?

Opt1 : Sortir certaines instructions des boucles; Mémoriser tab[i] avant la boucle tant que

Opt2 : Réduire le nombre de comparaisons; Ajouter une sentinelle dans tab[0]

n=40000 n=80000 n=160000Code original 0.65 2.66 10.59Opt1 0.40 -38% 1.61 -40% 6.43 -39%

Opt2 0.67 2.72 10.91Opt1+Opt2 0.30 -54% 1.22 -54% 4.88 -54%

11/47

Page 30: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 1 : Tri par insertion

pour i variant de 1 à n − 1 faire/* Invariant : tab[0..i − 1] est trié */j ← i

tant que j > 0 et tab[j] > tab[j − 1] faireéchanger(tab[j], tab[j − 1])

j ← j − 1

Optimisations possibles ?

Opt1 : Sortir certaines instructions des boucles; Mémoriser tab[i] avant la boucle tant queOpt2 : Réduire le nombre de comparaisons; Ajouter une sentinelle dans tab[0]

n=40000 n=80000 n=160000Code original 0.65 2.66 10.59Opt1 0.40 -38% 1.61 -40% 6.43 -39%Opt2 0.67 2.72 10.91

Opt1+Opt2 0.30 -54% 1.22 -54% 4.88 -54%

11/47

Page 31: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 1 : Tri par insertion

pour i variant de 1 à n − 1 faire/* Invariant : tab[0..i − 1] est trié */j ← i

tant que j > 0 et tab[j] > tab[j − 1] faireéchanger(tab[j], tab[j − 1])

j ← j − 1

Optimisations possibles ?

Opt1 : Sortir certaines instructions des boucles; Mémoriser tab[i] avant la boucle tant queOpt2 : Réduire le nombre de comparaisons; Ajouter une sentinelle dans tab[0]

n=40000 n=80000 n=160000Code original 0.65 2.66 10.59Opt1 0.40 -38% 1.61 -40% 6.43 -39%Opt2 0.67 2.72 10.91Opt1+Opt2 0.30 -54% 1.22 -54% 4.88 -54% 11/47

Page 32: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 2 : Enumérer toutes les permutations d’un tableau

permut(int* tab, int k , int n)début

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])permut(tab, k + 1, n)échanger(tab[k ], tab[i])

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])pour j de k + 1 à n − 1 faire

échanger(tab[k + 1], tab[i])permut2(tab, k + 2, n)échanger(tab[k + 1], tab[i])

échanger(tab[k ], tab[i])

Optimisations possibles ?

Opt1 : Déplier échanger (inlining procedure call)Opt2 : Diviser par 2 le nombre d’appels récursifs (Hypothèse : n impair)

n Code original Opt1 Opt2 Opt1+Opt211 0.89

0.35 0.63 0.34 0.82 0.28 0.56 0.28

13 143.64

52.92 97.60 52.87 126.21 44.28 85.20 44.27

Résultats avec l’option -O3 de gcc; Parfois, il vaut mieux laisser le compilateur faire les optimisations !

12/47

Page 33: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 2 : Enumérer toutes les permutations d’un tableau

permut(int* tab, int k , int n)début

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])permut(tab, k + 1, n)échanger(tab[k ], tab[i])

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])pour j de k + 1 à n − 1 faire

échanger(tab[k + 1], tab[i])permut2(tab, k + 2, n)échanger(tab[k + 1], tab[i])

échanger(tab[k ], tab[i])

Optimisations possibles ?Opt1 : Déplier échanger (inlining procedure call)

Opt2 : Diviser par 2 le nombre d’appels récursifs (Hypothèse : n impair)

n Code original Opt1 Opt2 Opt1+Opt211 0.89

0.35

0.63

0.34 0.82 0.28 0.56 0.28

13 143.64

52.92

97.60

52.87 126.21 44.28 85.20 44.27

Résultats avec l’option -O3 de gcc; Parfois, il vaut mieux laisser le compilateur faire les optimisations !

12/47

Page 34: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 2 : Enumérer toutes les permutations d’un tableau

permut(int* tab, int k , int n)début

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])permut(tab, k + 1, n)échanger(tab[k ], tab[i])

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])pour j de k + 1 à n − 1 faire

échanger(tab[k + 1], tab[i])permut2(tab, k + 2, n)échanger(tab[k + 1], tab[i])

échanger(tab[k ], tab[i])

Optimisations possibles ?Opt1 : Déplier échanger (inlining procedure call)Opt2 : Diviser par 2 le nombre d’appels récursifs (Hypothèse : n impair)

n Code original Opt1 Opt2 Opt1+Opt211 0.89

0.35

0.63

0.34

0.82

0.28 0.56 0.28

13 143.64

52.92

97.60

52.87

126.21

44.28 85.20 44.27

Résultats avec l’option -O3 de gcc; Parfois, il vaut mieux laisser le compilateur faire les optimisations !

12/47

Page 35: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 2 : Enumérer toutes les permutations d’un tableau

permut(int* tab, int k , int n)début

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])permut(tab, k + 1, n)échanger(tab[k ], tab[i])

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])pour j de k + 1 à n − 1 faire

échanger(tab[k + 1], tab[i])permut2(tab, k + 2, n)échanger(tab[k + 1], tab[i])

échanger(tab[k ], tab[i])

Optimisations possibles ?Opt1 : Déplier échanger (inlining procedure call)Opt2 : Diviser par 2 le nombre d’appels récursifs (Hypothèse : n impair)

n Code original Opt1 Opt2 Opt1+Opt211 0.89

0.35

0.63

0.34

0.82

0.28

0.56

0.28

13 143.64

52.92

97.60

52.87

126.21

44.28

85.20

44.27

Résultats avec l’option -O3 de gcc; Parfois, il vaut mieux laisser le compilateur faire les optimisations !

12/47

Page 36: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Exemple 2 : Enumérer toutes les permutations d’un tableau

permut(int* tab, int k , int n)début

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])permut(tab, k + 1, n)échanger(tab[k ], tab[i])

si k = n − 1 alors afficher(tab, n);sinon

pour i de k à n − 1 faireéchanger(tab[k ], tab[i])pour j de k + 1 à n − 1 faire

échanger(tab[k + 1], tab[i])permut2(tab, k + 2, n)échanger(tab[k + 1], tab[i])

échanger(tab[k ], tab[i])

Optimisations possibles ?Opt1 : Déplier échanger (inlining procedure call)Opt2 : Diviser par 2 le nombre d’appels récursifs (Hypothèse : n impair)

n Code original Opt1 Opt2 Opt1+Opt211 0.89 0.35 0.63 0.34 0.82 0.28 0.56 0.2813 143.64 52.92 97.60 52.87 126.21 44.28 85.20 44.27

Résultats avec l’option -O3 de gcc; Parfois, il vaut mieux laisser le compilateur faire les optimisations !

12/47

Page 37: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Outils pour l’optimisation d’algorithmes et de code

Outils de profilage

gprof (Unix)

Cachegrind (Unix)

Instruments (MacOS X)

. . .

Temps passé par procédure (pourcentage et valeur absolue); Pas toujours compatible avec les optimisations du compilateur !

Outils pour l’évaluation expérimentale et l’analyse de données

Vérifiez expérimentalement que vos optimisations optimisent effectivementvotre programme!

13/47

Page 38: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Illustration : Optimisation de AntClique

Problème MaxClique (rappel)

Entrée : un graphe G = (V ,E)

Sortie : la plus grande clique de G(clique = sous-ensemble C ⊆ V tel que ∀i , j ∈ C, i 6= j ⇒ (i , j) ∈ E

AntClique(1) :

Algorithme incomplet : calcule une borne inférieure

Basé sur la méta-heuristique Ant Colony Optimization (ACO)

(1) C. Solnon & S. Fenet : A study of ACO capabilities for solving the Maximum Clique Problem,Journal of Heuristics, 12(3) :155-180, Springer, 2006

14/47

Page 39: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Basic Idea

initialize pheromone trails

repeat

1 each ant builds a clique2 update pheromone trails

until optimal clique found or stagnation

xxx

15/47

Page 40: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Basic Idea

initialize pheromone trails

repeat

1 each ant builds a clique2 update pheromone trails

until optimal clique found or stagnation

Initialization of pheromone trails :

Pheromone is laid on edges; τ(i , j) = desirability of selecting both i and j in a same clique

For each edge (i , j), initialize τ(i , j) to τmax; τmax = parameter

x

15/47

Page 41: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Basic Idea

initialize pheromone trails

repeat

1 each ant builds a clique2 update pheromone trails

until optimal clique found or stagnation

Greedy randomized construction of a clique CRandomly choose i ∈ V and initialize C to {i}While cand = {j ∈ V \ C : ∀i ∈ C, (i , j) ∈ E} 6= ∅ :

Select randomly a vertex vj ∈ cand wrt probability

p(vj) =[∑

i∈C τ(i,j)]α∑

k∈cand [∑

i∈C τ(i,k)]α

where α = pheromone weight (parameter)Add vj to C

Return C

x

15/47

Page 42: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Basic Idea

initialize pheromone trails

repeat

1 each ant builds a clique2 update pheromone trails

until optimal clique found or stagnation

Pheromone updating step

Evaporation : multiply pheromone trails by (1− ρ); ρ = evaporation rate (0 ≤ ρ ≤ 1)

Reward : add pheromone on all edges of the best clique

Bound all pheromone trails to prevent early stagnation :

If τ(i , j) < τmin then τ(i , j)← τminIf τ(i , j) > τmax then τ(i , j)← τmax

x

15/47

Page 43: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Profiling de main

96.3% du temps pour construire les cliques; Zoom sur buildClique

Profiling de buildClique

75.4% du temps pour sélectionner les candidats; Opt1 : Maintenir la liste des candidats de façon incrémentale

16/47

Page 44: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Code de buildClique2 :

Profiling de buildClique2

77.2% du temps pour calculer les probabilités; Opt2 : Maintenir le facteur phéromonal de façon incrémentale

17/47

Page 45: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Code de buildClique3 :

Profiling de buildClique3

57.7% du temps pour pow (de la bibliothèque math.h); Opt3 : remplacer pow par myPow !

18/47

Page 46: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Profiling de buildClique4

20.2% du temps pour computeProba4; Opt4 : fusionner la boucle calculant les probas avec le filtrageProfiling de buildClique5

Une dernière optimisation?; Opt5 : remplacer la recherche séquentielle de chooseNextVertexpar une recherche dichotomiqueProfiling de buildClique6

Les gains sont de plus en plus réduits. . . Est-ce bien utile?

19/47

Page 47: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init

Opt1 Opt2 Opt3 Opt4 Opt5 initOpt5

C125.9 3.61

1.79 1.29 0.32 0.24 0.24 15

C250.9 8.34

3.65 2.78 0.71 0.51 0.51 16

C500.9 23.53

8.49 5.84 1.59 1.21 1.11 21

C1000.9 111.30

28.94 13.52 4.06 3.32 2.98 37

C2000.9 347.15

88.18 27.32 10.64 9.14 8.81 39C2000.5 33.64

11.37 6.23 4.32 4.15 4.03 8

C4000.5 85.53

30.50 18.73 14.75 14.17 14.02 6

20/47

Page 48: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1

Opt2 Opt3 Opt4 Opt5 initOpt5

C125.9 3.61 1.79

1.29 0.32 0.24 0.24 15

C250.9 8.34 3.65

2.78 0.71 0.51 0.51 16

C500.9 23.53 8.49

5.84 1.59 1.21 1.11 21

C1000.9 111.30 28.94

13.52 4.06 3.32 2.98 37

C2000.9 347.15 88.18

27.32 10.64 9.14 8.81 39C2000.5 33.64 11.37

6.23 4.32 4.15 4.03 8

C4000.5 85.53 30.50

18.73 14.75 14.17 14.02 6

20/47

Page 49: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1 Opt2

Opt3 Opt4 Opt5 initOpt5

C125.9 3.61 1.79 1.29

0.32 0.24 0.24 15

C250.9 8.34 3.65 2.78

0.71 0.51 0.51 16

C500.9 23.53 8.49 5.84

1.59 1.21 1.11 21

C1000.9 111.30 28.94 13.52

4.06 3.32 2.98 37

C2000.9 347.15 88.18 27.32

10.64 9.14 8.81 39C2000.5 33.64 11.37 6.23

4.32 4.15 4.03 8

C4000.5 85.53 30.50 18.73

14.75 14.17 14.02 6

20/47

Page 50: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1 Opt2 Opt3

Opt4 Opt5 initOpt5

C125.9 3.61 1.79 1.29 0.32

0.24 0.24 15

C250.9 8.34 3.65 2.78 0.71

0.51 0.51 16

C500.9 23.53 8.49 5.84 1.59

1.21 1.11 21

C1000.9 111.30 28.94 13.52 4.06

3.32 2.98 37

C2000.9 347.15 88.18 27.32 10.64

9.14 8.81 39C2000.5 33.64 11.37 6.23 4.32

4.15 4.03 8

C4000.5 85.53 30.50 18.73 14.75

14.17 14.02 6

20/47

Page 51: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1 Opt2 Opt3 Opt4

Opt5 initOpt5

C125.9 3.61 1.79 1.29 0.32 0.24

0.24 15

C250.9 8.34 3.65 2.78 0.71 0.51

0.51 16

C500.9 23.53 8.49 5.84 1.59 1.21

1.11 21

C1000.9 111.30 28.94 13.52 4.06 3.32

2.98 37

C2000.9 347.15 88.18 27.32 10.64 9.14

8.81 39C2000.5 33.64 11.37 6.23 4.32 4.15

4.03 8

C4000.5 85.53 30.50 18.73 14.75 14.17

14.02 6

20/47

Page 52: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1 Opt2 Opt3 Opt4 Opt5 initOpt5

C125.9 3.61 1.79 1.29 0.32 0.24 0.24 15C250.9 8.34 3.65 2.78 0.71 0.51 0.51 16C500.9 23.53 8.49 5.84 1.59 1.21 1.11 21C1000.9 111.30 28.94 13.52 4.06 3.32 2.98 37C2000.9 347.15 88.18 27.32 10.64 9.14 8.81 39

C2000.5 33.64 11.37 6.23 4.32 4.15 4.03 8C4000.5 85.53 30.50 18.73 14.75 14.17 14.02 6

20/47

Page 53: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Comparaison expérimentale (avec l’option -O3 !)

Code initial

Opt1 : Maintien incrémental des candidats

Opt2 : Maintien incrémental du facteur phéromonal

Opt3 Remplacement de pow de math.h par une fonction ad-hoc

Opt4 : Fusion des boucles

Opt5 : Recherche dichotomique du sommet sélectionné

Code init Opt1 Opt2 Opt3 Opt4 Opt5 initOpt5

C125.9 3.61 1.79 1.29 0.32 0.24 0.24 15C250.9 8.34 3.65 2.78 0.71 0.51 0.51 16C500.9 23.53 8.49 5.84 1.59 1.21 1.11 21C1000.9 111.30 28.94 13.52 4.06 3.32 2.98 37C2000.9 347.15 88.18 27.32 10.64 9.14 8.81 39C2000.5 33.64 11.37 6.23 4.32 4.15 4.03 8C4000.5 85.53 30.50 18.73 14.75 14.17 14.02 6

20/47

Page 54: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de code

Passage à l’échelle des 6 variantes

1

10

100

0 1 2 3 4 5 6

C125.9C250.9C500.9

C1000.9C2000.9

21/47

Page 55: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Plan du cours

1 Validation théorique d’algorithmes

2 Evaluation expérimentale d’algorithmes

3 Ingénierie algorithmiqueOptimisation d’algorithmesOptimisation de codeOptimisation de paramètres

4 Ethique des algorithmes

22/47

Page 56: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Optimisation de paramètres et apprentissage automatique

Un programme a souvent des paramètres :

Valeurs numériques fixant des seuils, poids, fréquences, . . .; Changent les performances de l’algorithmeChoix de conception ou de programmation (Hyper-paramètres); Changent l’algorithme

Programming by Optimization [Hoos 2012] :

Developers specify a potentially large design space of programs thataccomplish a given task, from which versions of the program optimized forvarious use contexts are generated automatically.

Utilisation de techniques d’apprentissage automatique :

Classification supervisée, pour reconnaître l’algorithme le plusperformant pour résoudre une instanceRégression, pour prédire la performance d’un algo sur une instanceClustering, pour identifier des groupes d’instances similaires

23/47

Page 57: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Configuration vs Sélection automatique d’algorithmes

Données en entrée des problèmes d’optimisation de paramètres :

Un algo A paramétré par un ensemble de (hyper-)paramètres PPour chaque paramètre pi ∈ P, l’ens. des valeurs possibles de pi

Un ensemble Sa d’instances d’apprentissage (training)Un indicateur de performance I

Problème de configuration :

Chercher les valeurs de P optimisant A pour l’indic. I sur les instances de Sa; Meilleur paramétrage pour les instances de Sa

Problème de sélection :Construire un modèle pour choisir les valeurs de P / nouvelle instance; Meilleur paramétrage pour chaque nouvelle instance; Alternative : Meilleur planning (séquentiel ou parallèle)

24/47

Page 58: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

image extraite de [Kotthoff et al - IJCAI 2013]25/47

Page 59: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

image extraite de [Kotthoff et al - IJCAI 2013]26/47

Page 60: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

image extraite de [Kotthoff et al - IJCAI 2013]27/47

Page 61: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

image extraite de [Kotthoff et al - IJCAI 2013]28/47

Page 62: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Instances utilisées pour la configuration

Hypothèse forte :

Les instances à résoudre ont des caractéristiques similaires; Un bon paramétrage pour un ss-ens. doit être bon pour l’ensemble

Si ce n’est pas le cas :

Diviser l’ensemble d’instances en sous-ensembles homogènes; ClusteringAppliquer la configuration automatique sur chaque sous-ensemble; cf Sélection d’algorithmes

Nombre d’instances utilisées pour configurer l’algo :

Trouver le bon compromis :

Pas assez d’instances ; Over-fitting

Trop d’instances ; Processus de configuration trop long

29/47

Page 63: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Espace de recherche

Espace de recherche :

Ensemble des configurations possibles des paramètres; Généralement impossible à explorer exhaustivement

Choix des configurations :

Préférer un échantillonnement aléatoire plutôt que régulier

image extraite de [Kotthoff et al - IJCAI 2013]

30/47

Page 64: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Configuration automatique d’algo : Principales approches

image extraite de [Kotthoff et al - IJCAI 2013]31/47

Page 65: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Problème de sélection

image extraite de [Kotthoff et al - IJCAI 2013]

32/47

Page 66: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

image extraite de [Kotthoff et al - IJCAI 2013]

33/47

Page 67: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Construction du sélecteur S (1/2)

Données en entrée :P = espace des instances du problèmeA = ensemble d’algorithmes capables de résoudre les instances de Pp : A×P → Rn = fonction d’évaluation de performance; p(A, x) mesure la performance de l’algorithme A sur l’instance x

Objectif :

Construire S : P → A qui optimise p(S(x), x) pour toute instance x ∈ P; Utilisation de techniques d’apprentissage automatique pour construire S

Projection des instances de P dans un espace vectoriel :

F = espace des caractéristiques (en général, Rm)f : P → F = fonction de projection des instances dans F; Chaque instance x ∈ P est décrite par f (x) ∈ FConstruction de S par composition : S = SF ◦ f; Construire SF : F → A qui optimise p(SF (f (x)), x)

34/47

Page 68: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Construction du sélecteur S (2/2)

Choix de l’espace F des caractéristiques :

L’apprentissage est fait sur les vecteurs de caractéristiques; Choisir des caractéristiques pertinentes

Features syntaxiques / statiques : collectées par analyse de l’instance

Nb de variables, de valeurs, de contraintes (min/max/moy/stdv/...)Analyse du graphe des contraintes. . .

Features dynamiques : collectées lors de sondages (probing)

Nombre de noeuds explorésProfondeur de l’arbreNombre de valeurs filtrées à chaque noeud. . .

Constitution d’un jeu d’apprentissage :

Choisir des instances variées et représentatives

35/47

Page 69: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Exemples d’approches existantes

Régression [SATzilla 2009] :Apprentissage d’un modèle pour chaque paire d’algorithmes; Prédiction de la différence de performances entre les 2 algosUtilisation pour résoudre une nouvelle instance i; Estimer la différence de perf. pour toutes les paires d’algos; Choisir l’algorithme a optimisant

∑a′∈A diff-perf(a,a′)

Classification supervisée [Gent et al 2010] :Modèle appris = Classifieur (où classe = meilleur algorithme)Utilisation pour résoudre une nouvelle instance i; Calculer la classe de i et choisir l’algorithme correspondant

Clustering [Kadioglu et al. 2010] :Modèle appris = partitionnement des instances en clusters homogènesUtilisation pour résoudre une nouvelle instance i; Chercher à quel cluster i appartient; Choisir l’algorithme le mieux adapté en fonction du cluster

36/47

Page 70: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Sélection vs planification d’algorithmes

Sélection d’algorithmes :

Etant donnée une instance, choix d’un seul algorithme

Planification d’algorithmes :

Etant donnée une instance, choix de plusieurs algorithmes

Allocation de temps CPU à ces algorithmes :

En séquenceEn parallèle

37/47

Page 71: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Illustration : Sélection d’algos pour l’iso. de sous-graphesPerformances de 8 algorithmes sur différents benchmarks(1)

VF2 LAD GLASGOWINC. DEFAULT PATH 1 2 3 4

Random instances

1 nb résolues 21 20 100 100 100 100 100 100tps (secondes) 117 0 0 0 0 0 1 23

2 nb résolues 540 0 540 540 540 540 540 540tps (secondes) 0 - 1 0 0 0 0 0

3 nb résolues 343 0 360 360 359 360 360 360tps (secondes) 15 - 1 1 1 0 0 1

4 nb résolues 12 0 230 252 254 270 270 270tps (secondes) 18680 - 5989 3936 69 30 38 196

5 nb résolues 3 0 79 75 167 167 166 163tps (secondes) 49906 - 14625 14984 5360 5840 5612 4831

LV instances

6 nb résolues 2880 1727 3690 3729 3668 3704 3704 3701tps (secondes) 1397 0 309 252 304 247 254 1853

Real instances

7 nb résolues 224 3 224 224 224 224 224 224tps (secondes) 20 0 5 2 0 2 4 7

8 nb résolues 168 169 200 199 196 196 196 196tps (secondes) 8 0 513 300 384 20 25 43

(1) L. Kotthoff, C. McCreesh, & C. Solnon (2016) : Portfolios of subgraph isomorphism algorithms.In Learning and Intelligent Optimization (LION)

38/47

Page 72: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Meilleur algorithme virtuel / Virtual Best Solver (VBS)

; Pour chaque instance, exécution du meilleur algorithme pour cet instance

0

1000

2000

3000

4000

5000

1 10 100 1000 10000 100000 1e+06 1e+07 1e+08

Virtual Best Solver (VBS)

39/47

Page 73: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

What have we learned?

Many instances are very easy :; 3388 solved in less than 10 ms by the VBS

Some instances are really hard :; 117 still not solved after 108 ms (∼ 27 hours)

Algorithms have complementary performance, even within a same class

Difference between VBS and Single Best is higher for short time limits

At 10 ms : VBS solves 1101 more instances than SB (pathLAD)At 108 ms : VBS solves 47 more instances than SB (Glasgow 2)

Some algorithms use a lot of memory; We cannot run all algorithms in parallel on a same computer

40/47

Page 74: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Overview of the process

Offline : Train a model with a training set of instances

Describe each training instance by a feature vector

Train a model that predicts the best algorithm for each training instance

Online : Use the model to select an algorithm

Extract features from the test instance

Ask the model to select an algorithm given the features

Run the algorithm

Problem : For easy instances, extracting features is much longer than solving !

41/47

Page 75: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Overview of the online process

Step 1 : Run Incomplete LAD (no time limit)

Solve 1919 infeasible instances (average time = 7ms)

If inconsistency not detected : Go on with Step 2

Step 2 : Run VF2 for 50 ms

Solve 1470 feasible instances (among the 3806 remaining instances)

If instance not solved : Go on with Step 3

Step 3 : Algorithm selection (for the 2336 remaining instances)

Extract features from the instance

Ask the model to select an algorithm given the features

Run the model

42/47

Page 76: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Feature extraction

Static features extracted from the graphs

Number of vertices and edges

Density

Number of loops

Mean and max. degrees

Mean and max. distance between all pairs of vertices

Proportion of vertex pairs which are at least 2, 3 and 4 apart

Binary features : Regular? Connected?

Dynamic features collected when running IncompleteLAD

Number of value removals

Percentage (average, min and max) of removed values per variable

IncompleteLAD solving time43/47

Page 77: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Selection model : LLAMA [Khotthoff 2013]

R package for designing algorithm selectors

Includes different models; Best results : Pairwise regressionapproach with random forest regression

For each pair of algorithm, train a modelto predict performance differenceChoose algorithm with highestcumulative performance difference

44/47

Page 78: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Experimental evaluation (1/2)

Experimental setup :

10-fold cross-validation

Performance measures :

MCP : MisClassification Penalty; Additional time required to solve an instance wrt VBS# solved = number of instances that are solvedTime : time required to solve the instance, or 108 if not solved; Lower bound of the actual time

Results :

Model Mean MCP # solved Mean timeVBS 0 5,608 2,375,913LLAMA 287,704 5,592 2,664,293GLASGOW 2 798,660 5,562 3,174,573

45/47

Page 79: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ingénierie algorithmique Optimisation de paramètres

Experimental evaluation (2/2)

46/47

Page 80: Computer science - Théorie vs expérimentation Partie 3 ... · premature optimization is the root of all evil. D. Knuth 10/47. Ingénierie algorithmique Optimisation de code Exemple

Ethique des algorithmes

47/47