Skip to content

🎓📈 Metaheuristics to solve graph partition problem

Notifications You must be signed in to change notification settings

tlentali/metaheuristics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Résolution du problÚme de patitionnement de graphe via l'utilisation de métaheuristiques

Ce projet a pour but de partitionner des graphes connexes non-orientĂ©s en K classes afin d’obtenir un minimum d’arĂȘtes interclasses.
Nous allons pour cela utiliser un algorithme d’énumĂ©ration, un algorithme glouton de descente de gradient, et les mĂ©ta-heuristiques recuit simulĂ© et recherche tabou. Tous les rĂ©sultats et les temps d’exĂ©cution sont directement stockĂ©s dans un fichier.
Pour ce rapport, nous avons dĂ©cidĂ© d’analyser les performances de nos algorithmes pour un partitionnement en K = 3 classes, mais bien entendu, nos programmes peuvent exĂ©cuter tout type de partitionnement allant de 1 jusqu’au nombre de sommets du graphe Ă©tudiĂ©.
Pour une meilleure analyse, nous avons gĂ©nĂ©rĂ© jusqu'Ă  5 fois nos algorithmes afin d’obtenir un temps d’exĂ©cution minimum, maximum, et ainsi calculer la moyenne des temps d’exĂ©cution.
Il en est de mĂȘme pour le calcul du nombre des arĂȘtes interclasse.

Le projet est composé de 4 fichiers .cpp, un par algorithme.
Afin d'executer nos progammes, depuis un terminal, se rendre dans le repertoir du .cpp Ă  l'aide de la commande cd, ce repertoire doit egalement contenir les .txt des graphes, ils seront tous lu automatiquement.

Execution

Dans un terminal :

g++ -o nomDuFichier nomDuFichier.cpp 
./nomDuFichier

Un fichier sera alors crée à coté du .cpp contenant les solutions touvées par l'algorithme.

Enumeration

Nous avons dĂ©cidĂ© de gĂ©nĂ©rer toutes les solutions possibles de l’espace de recherche.
On appelle cette méthode énumération explicite.
Elle a pour but de parcourir toutes les solutions, vérifier leur validité et enfin stocker la meilleure solution parmi celles qui sont valides.
Nous pouvons constater au travers des rĂ©sultats, la complexitĂ© K nbsommets qui fait exploser le temps d’exĂ©cution de l’algorithme, ce qui nous empĂȘche d’obtenir des rĂ©sultats pour un graphe ayant plus de 17 sommets.

Descente de gradient

Cet algorithme glouton a pour but d’amĂ©liorer la solution de maniĂšre successive jusqu’à ce qu’un minimum local ait Ă©tĂ© trouvĂ©. Pour avoir plus de chances de tomber sur la solution optimale, nous gĂ©nĂ©rons plusieurs fois une solution alĂ©atoire de dĂ©part afin de commencer notre descente en diffĂ©rents endroits.
En premier lieu on gĂ©nĂšre une solution alĂ©atoire qu’on appelle solution de base.
Depuis cette solution de base, on explore tout son voisinage afin de trouver le meilleure solution voisine.
Pour le voisinage nous avons choisi d’utiliser la mĂ©thode swap qui consiste Ă  Ă©changer deux sommets de classes diffĂ©rentes.
Nous avons utilisĂ© swap pour tout les algorithmes car il prĂ©sente l’avantage de ne pas modifier la structure de la solution et nous garantit de trouver une solution valide.
Si la solution trouvĂ©e amĂ©liore le rĂ©sultat, on recommence le processus jusqu’à ce que la solution soit la meilleure de son voisinage.

Recuit Simulé

Cet algorithme est une mĂ©ta-heuristique qui s’inspire de la physique et plus particuliĂšrement de la mĂ©tallurgie afin d’amĂ©liorer la qualitĂ©e d’un mĂ©tal.
En partant d’une haute tempĂ©rature Ă  laquelle la matiĂšre est devenue liquide, la phase de refroidissement conduit la matiĂšre Ă  retrouver sa forme solide par une diminution progressive de la tempĂ©rature jusqu’à atteindre un Ă©tat d’énergie minimale qui correspond Ă  une structure stable du mĂ©tal.
De la mĂȘme maniĂšre, la fonction qui Ă©value notre solution correspond Ă  l’énergie et on crĂ©e un paramĂštre virtuel afin de gĂ©rer la tempĂ©rature. En premier lieu on gĂ©nĂšre une solution alĂ©atoire qu’on appelle solution de base.
À partir de cette solution nous allons sur 10 paliers de tempĂ©ratures diffĂ©rents, suivant un schĂ©ma de refroidissement gĂ©omĂ©trique (t n+1 = t n ∗ 0.9), gĂ©nĂ©rer 1000 voisins alĂ©atoires puis pour chaque voisin si la solution est amĂ©liorante alors on la prend, sinon on applique le critĂšre de Metropolis afin de savoir si on garde la solution ou pas.
Le critĂšre de Metropolis est une fonction stochastique qui dĂ©finit la probabilitĂ© d’accepter une solution non amĂ©liorante.

Recherche tabou

Nous avons utilisé la recherche tabou par mouvement avec mémoire à court terme.
La liste tabou utilisée est de taille 8 et de type first in first out.
A chaque itĂ©ration on parcourt l’ensemble des solutions voisines et choisit la meilleure qui n’est pas interdite, mĂȘme si elle est plus mauvaise que la solution courante.
Son avantage par rapport Ă  la descente de gradient est que la liste tabou permet d’interdire certaines solutions afin de ne pas rester bloquĂ© dans un minimum local et de changer de voisinage.

Conclusion

Le problĂšme de partitionnement de graphe demande beaucoup de ressources afin d’obtenir un rĂ©sultat optimal.
NĂ©anmoins il est possible d’approcher au plus prĂšs de l’optimal avec des temps raisonnables grĂące aux algorithmes gloutons et Ă  des mĂ©ta-heuristiques.
Ce projet nous convainc de l’efficacitĂ© de ces mĂ©thodes, notamment celle du recuit simulĂ© qui nous a permis d’avoir un rĂ©sultat pour un graphe de 1000 sommets (ce qui aurais pris avec l’énumĂ©ration un temps qui dĂ©passe les limites de ce projet).

Releases

No releases published

Packages

No packages published

Languages