Ini Projet de Fin D' Etude: Probl' Eme de Coloration Des Graphes
Ini Projet de Fin D' Etude: Probl' Eme de Coloration Des Graphes
Thème
Présenté par :
Encadré par :
BOUGUEDOUR Sara
[Link] Yamina
MEZIANE Yasmine
Table des matières
Remérciment 2
Introduction générale 3
1 Notions de base 4
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Degrés et adjacence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Sous structures d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Quelques classes particulières de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Méthodes de résolution 18
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 Problèmes d’optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Méthodes de résolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Algorithme de recherche taboue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4.1 L’application de la Recherche Tabou sur le Graphe de petersen . . . . . . . . . . . . . . . . . 23
3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Implémentation 30
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 Pourquoi Python ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Implémentation en Python de l’algorithme de recherche taboue pour la coloration des graphes . . . . 31
4.3.1 La fonction principale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.4 Expérimentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Conclusion générale 38
Bibliographie 39
1
Remerciements
Tout d’abord, nous tenons à exprimer notre profonde gratitude envers Allah, le Tout-Puissant, pour Sa miséricorde
Nous tenons également à remercier chaleureusement notre binôme pour sa collaboration tout au long de ce travail et
pour les moments de partage et de convivialité qui ont égayé cette expérience. Nous exprimons notre reconnaissance
envers nos pères, nos mères, nos sœurs et nos frères pour leur soutien inconditionnel et leur encouragement constant.
Nous souhaitons également exprimer notre profonde gratitude envers notre encadrante, Madame BEKHTI Ya-
mina, pour son accompagnement bienveillant, ses conseils avisés et sa disponibilité tout au long de ce projet. Nous
Enfin, nous tenons à remercier les anciens membres du club Recherche Opérationnelle (RO) ainsi que MAAMRA
Fateh pour leur aide inestimable. Ce projet a été une expérience enrichissante et nous sommes fiers de ce que nous
avons accompli ensemble. Merci infiniment à tous pour votre soutien et votre confiance.
2
Introduction générale
La Recherche Opérationnelle est une discipline des mathématiques appliquées qui se concentre sur la résolution
de problèmes logistiques, de production, de gestion de la chaı̂ne d’approvisionnement, de finance, de marketing et de
gestion de projets. Elle vise à améliorer l’efficacité des entreprises, à réduire les coûts et à augmenter la rentabilité.
Les professionnels de la Recherche Opérationnelle utilisent des méthodes telles que l’optimisation, la modélisation,
la simulation, l’analyse de données et la programmation linéaire en collaboration avec d’autres experts pour résoudre
des problèmes spécifiques.
La Recherche Opérationnelle a émergé pendant la Seconde Guerre mondiale, où elle a été largement utilisée par
les militaires pour optimiser l’utilisation de leurs ressources limitées, telles que les soldats, les munitions et les four-
nitures. Cette approche a permis à l’armée de prendre des décisions plus éclairées et d’améliorer son efficacité sur
le terrain. Au fil du temps, la Recherche Opérationnelle est devenue une discipline à part entière enseignée dans les
écoles de commerce et les universités du monde entier. Elle a également évolué pour inclure de nouvelles méthodes
et technologies telles que l’analyse de données, la modélisation par simulation et l’optimisation multicritère. Au-
jourd’hui, elle reste un outil essentiel pour aider les entreprises et les organisations à prendre des décisions éclairées
afin d’accroı̂tre leur efficacité et leur rentabilité.
L’Optimisation Combinatoire est une branche récente des mathématiques appliquées qui propose différentes
approches pour résoudre les problèmes donnés. Dans ce mémoire, nous nous intéressons plus spécifiquement au
problème de coloration des graphes et à sa résolution par une méthode d’optimisation combinatoire.
Ce mémoire est composé de quatre chapitres. Le premier chapitre présente les notions de base de la théorie des
graphes, le deuxième chapitre aborde le problème de coloration des graphes, tandis que le troisième chapitre discute
de la méthode de résolution choisie pour résoudre ce problème. Enfin, le dernier chapitre traite de l’implémentation
de la méthode de résolution à l’aide d’un langage de programmation approprié. Le mémoire se conclut par une
conclusion générale.
3
Chapitre 1
Notions de base
1.1 Introduction
La théorie des graphes est un outil puissant de modélisation et de résolution de problèmes. Elle permet de
représenter et d’organiser de manière optimale diverses tâches. Le problème des sept ponts d’Euler, qui consistait
à trouver un chemin circulaire à travers la ville de Königsberg, a été l’un des premiers problèmes de théorie des
section nous permettra d’acquérir une compréhension solide qui sera essentielle pour la suite de ce mémoire.
1.2 Graphes
Qu’est-ce qu’un graphe ?
Un graphe G = (V, E) [2] est une structure géométrique composée d’un ensemble de sommets V reliés par un
ensemble d’arêtes E. Chaque arête relie deux sommets distincts, ayant une extrémité initiale x et une extrémité
finale y.
On peut définir les termes suivants :
L’ordre du graphe : le nombre de sommets, noté |V | = n.
4
Exemple :
b g
a c e f
d h
— Un graphe G est dit simple s’il ne possède ni arête parallèle ni boucle. Une boucle est une arête dont
a a
b c b c
d e d e
Figure 1.2 – G = (V, E) est un graphe simple. Figure 1.3 – G=(V, E) est un multigraphe.
— Un graphe non orienté G est défini par le couple G = (V, E) où V est un ensemble fini de sommets et E est
de l’arc e.
Exemple :
a a
b c b c
e d e d
Figure 1.4 – G = (V, E) est un graphe non orienté. Figure 1.5 – G = (V, E) est un graphe orienté.
5
1.3 Degrés et adjacence
— Le demi-degré intérieur d’un sommet v est le nombre d’arcs ayant v comme extrémité terminale. On le note
d−
G (v) =| e ∈ E | T (e) = v |.
— Le degré d’un sommet v est le nombre d’arcs ayant v comme extrémité initiale ou terminale. On le note
dG (v) = d− +
G (v) + dG (v).
Remarque :
P − P +
v∈V dG (v) = v∈V dG (v).
Incidence et adjacence :
Deux arcs (arêtes) sont dits adjacents s’ils ont une extrémité commune, c’est-à-dire que e= (x, y) et v = (s, t)
sont adjacents lorsque {x, y} ∩ {s, t} =
̸ ∅.
Un arc (arête) u est dit incident à un sommet x s’il y a une extrémité de u qui est x. Si e = (x, y) est un arc,
alors u est incident à x à l’extérieur, et u est incident à y à l’intérieur.
La matrice d’adjacence : Soit G un graphe, la matrice d’adjacence M = (ai,j ) est une matrice (n × n), où
chaque ligne (i) et chaque colonne (j) correspondent à un sommet du graphe. Mi,j représente le nombre d’arcs (ou
d’arêtes) ayant xi comme extrémité initiale et xj comme extrémité terminale.
Exemple :
6
0 1 1 1 0 0 0 0
1 0 1 0 0 0 1 0
1 1 0 1 0 0 0 0
1 0 1 0 0 0 0 1
M =
0
0 0 0 0 0 1 1
0 0 0 0 0 0 1 1
0 1 0 0 0 1 0 0
0 0 0 1 1 1 0 0
La matrice d’incidence sommet-arc : Soit G un graphe orienté sans boucle. La matrice d’incidence sommet-
arc A est une matrice (n × m) où chaque ligne correspond à un sommet de G et chaque colonne correspond à un
arc de G. Chaque élément de la matrice indique la relation entre un sommet et un arc comme suit :
+1 : signifie que le sommet est une extrémité initiale de l’arc.
−1 : signifie que le sommet est une extrémité terminale de l’arc.
0 : signifie qu’il n’existe pas une relation entre le sommet et l’arc.
Exemple :
Soit A la matrice d’incidence sommet-arc associée au graphe de la figure 1.5.
0 1 0 0 0
−1 0 −1 1 −1
A= 0 1 0 0 −1
0 −1 0 0 0
0 1 1 0 0
La matrice d’incidence sommet-arête Soit G un graphe non orienté sans boucle. La matrice d’incidence
sommet-arête E est une matrice (n×m) où chaque ligne correspond à un sommet de G et chaque colonne correspond
à une arête de G. Chaque élément de la matrice indique la relation entre un sommet et une arête comme suit :
1 : signifie que le sommet est une extrémité de l’arête.
0 : signifie qu’il n’existe pas une relation entre le sommet et l’arête.
Exemple :
Soit E la matrice d’incidence sommet-arête associée au graphe de la figure 1.4.
0 1 0 0 0
1 0 1 1 1
E= 0 1 0 0 1
0 1 0 0 0
0 1 1 0 0
— L’ensemble des successeurs d’un sommet v est défini comme : | Γ+ (v) |= {y ∈ V : ∃e ∈ E où T (e) = y et I(e) = v}.
— L’ensemble des voisins d’un sommet v est défini comme : | Γ(v) |=| Γ+ (v) | ∪ | Γ− (v) |.
7
1.4 Sous structures d’un graphe
b b g
a c a c e f
d d h
a f
d h
8
1.5 Quelques classes particulières de graphes
Un circuit est un cycle tel que tous les arcs sont orientés dans le même sens.
Exemples :
b b c
d a
b c
b
d
a
c
Figure 1.12 – C3′ est un circuit.
Figure 1.11 – P4′ est un chemin qui relie le sommet a
au sommet d.
Un graphe complet : Un graphe G = (X, U ) est complet si tous les sommets sont deux à deux adjacents,
c’est-à-dire que tout couple de sommets est relié par une arête. On le note Kn . Autrement dit, pour tout x, y
appartenant à V , il existe une arête e dans E qui relie x à y.
Une clique : On appelle une clique le sous-graphe complet d’un graphe G.
9
Exemple :
a
f d e
b
b c
d
a
c
Figure 1.14 – Les sommets {c, d, e} forment une
clique.
Figure 1.13 – K4 est un graphe complet.
Un Graphe biparti complet : Dans un graphe biparti G = (V1 ∪ V2 , E), si chaque sommet de V1 est relié
à un sommet de V2 , alors le graphe G est un graphe biparti complet.
Exemples :
b f b f
c e c e
a d a d
Figure 1.15 – G = (V1 ∪ V2 , E) est un graphe biparti. Figure 1.16 – K3,3 est un graphe biparti complet.
Un graphe connexe : Un graphe G = (V, E) est dit connexe si et seulement si pour tout couple de sommets
x et y dans V , il existe au moins une chaı̂ne reliant x à y.
Un arbre : Un graphe G est un arbre s’il est connexe et acyclique. Soit G = (V, E) un graphe avec n =| V |≥ 2
sommets et m =| E | arêtes. Les propriétés suivantes sont équivalentes et caractérisent un graphe :
— G est connexe et acyclique.
10
— G est connexe et si une arête de G est supprimée, le graphe devient non connexe.
— G est connexe et possède (n − 1) arêtes.
— G est acyclique et si une arête est ajoutée, un cycle est créé.
— G est acyclique et possède (n − 1) arêtes.
— Entre chaque paire de sommets, il existe une et une seule chaı̂ne les reliant.
Une forêt est un graphe dans lequel chaque composante connexe est un arbre. Cela signifie que la forêt
peut être composée de plusieurs arbres disjoints, où chaque arbre est une composante connexe.
Exemples :
a b c b e g i
e d c d f h
Figure 1.17 – G = (V, E) est un arbre. Figure 1.18 – G = (V, E) est une forêt.
Un graphe planaire : Un graphe G = (V, E) est planaire s’il peut être représenté dans le plan sans que les
arêtes se croisent.
Exemple :
a b
e d f
Un Graphe k-régulier : Un graphe G = (V, E) est dit k-régulier si tous les sommets du graphe ont un
degré égal à k, c’est-à-dire que chaque sommet est adjacent à exactement k autres sommets.
1.6 Conclusion
En conclusion, les concepts présentés dans ce chapitre fournissent une base fondamentale pour l’étude et l’ap-
plication des graphes. Ils permettent de résoudre une variété de problèmes et de développer des applications dans
divers domaines. La théorie des graphes offre des outils et des techniques pour modéliser et analyser des structures
complexes, telles que les réseaux de communication, les réseaux sociaux, les systèmes de transport, etc.
11
Chapitre 2
2.1 Introduction
Le problème de coloration des graphes est un sujet d’étude qui remonte au XIXème siècle, lorsque Francis
Guthrie, un cartographe anglais, a posé la question suivante : Est-il possible de colorier une carte des cantons
d’Angleterre avec seulement quatre couleurs, de telle manière que deux cantons ayant une frontière commune
n’aient jamais la même couleur ? Cette conjecture, connue sous le nom de conjecture des quatre couleurs, a captivé
l’attention des mathématiciens pendant de nombreuses années.
Ce n’est qu’en 1976 que cette conjecture a été démontrée par Appel et Haken à l’aide de l’ordinateur. Cependant,
il convient de noter que cette résolution ne s’applique qu’aux graphes planaires, ce qui limite son application aux
problèmes des cartographes plutôt qu’aux problèmes mathématiques généraux.
La coloration des graphes trouve également des applications pratiques dans divers domaines tels que la planifica-
tion, l’ordonnancement et la conception de réseaux de télécommunication. Par exemple, en attribuant des couleurs
différentes à des canaux de communication, il est possible de minimiser les interférences et d’optimiser l’utilisation
des ressources. De plus, la coloration des graphes est utilisée dans le domaine de l’informatique pour résoudre des
problèmes tels que le placement de composants sur une carte de circuit imprimé, l’optimisation des itinéraires de
transport et la planification des horaires de production. Ces applications démontrent l’importance et la pertinence
du problème de coloration des graphes dans de nombreux domaines.
12
Coloration des sommets [3]
C : V → {1...k}
x → c(x)
Tq : {x, y} ∈ E → c(x) ̸= c(y).
— Une coloration avec k couleurs est une partition des sommets en k ensembles stables.
ses sommets de manière propre, c’est-à-dire en assignant des couleurs différentes à des sommets adjacents. On le
note généralement par le symbole (G). Formellement, le nombre chromatique d’un graphe G est le plus petit entier
k tel que G admet une k-coloration.
Exemple :
Soit G = (V, E) le graphe de Peterson d’ordre 10. La figure 2.1 suivante illustre la coloration de ce graphe, où
il est démontré que le nombre chromatique est égal à 3.
b
c d
f e
g h
i j
par : χ(G) ≤ ∆ + 1.
Preuve :
Soit G un graphe avec ∆ étant le degré maximum de ses sommets. Supposons que nous disposons d’une palette
13
Ainsi, pour chaque sommet du graphe, nous pouvons toujours trouver une couleur non utilisée dans la palette
pour le colorer, sans qu’il y ait de conflit de couleur avec ses sommets adjacents. Par conséquent, nous pouvons
colorer tous les sommets de G avec au plus (∆ + 1) couleurs, ce qui prouve que χ(G) ≤ ∆ + 1.
Théorème 2 : (Théorème du Nombre Chromatique )[4]
Pour tout graphe non vide G, le nombre chromatique χ(G) satisfait l’inégalité suivante : χ(G) ≤ n + (1 − α(G)).
Où n est l’ordre du graphe G et α(G) est la taille du plus grand stable dans G.
Preuve :
Considérons S comme étant un stable de V de cardinalité α(G). Une coloration possible des sommets consiste
à attribuer la même couleur à tous les sommets de S, et à attribuer des couleurs différentes aux n − α(G) autres
sommets. Ainsi, nous avons utilisé au plus 1 + (n − α(G)) couleurs pour colorer le graphe G. Par conséquent,
χ(G) ≤ n + (1 − α(G)).
La preuve de ce théorème repose sur le fait que la coloration d’un sous-graphe H de G peut être étendue à une
coloration de G sans utiliser plus de couleurs. Autrement dit, si on dispose d’une coloration valide des sommets de
H avec k couleurs, cette coloration peut être étendue à une coloration valide des sommets de G sans utiliser plus de
k couleurs. Par conséquent, le nombre chromatique de H, χ(H), ne peut pas être supérieur au nombre chromatique
de G, χ(G).
Théorème 4 : (Théorème de Brooks ) [4]
Soit G un graphe connexe simple et non complet. Si G n’est ni un graphe complet ni un cycle impair, alors
χ(G) ≤ ∆(G), où χ(G) est le nombre chromatique de G et ∆(G) est le degré maximum des sommets de G.
Preuve :
La preuve du théorème de Brooks est basée sur une argumentation par récurrence. Elle montre que pour tout
graphe connexe simple et non complet G qui n’est ni un graphe complet ni un cycle impair, le nombre chromatique
de G est au plus égal au degré maximum ∆(G). Pour cela, on considère une clique maximale dans G et on montre
que chaque sommet en dehors de cette clique est adjacent à au plus ∆(G) sommets de la clique. Ainsi, on peut
colorer les sommets de la clique avec ∆(G) couleurs et colorer les sommets en dehors de la clique avec une couleur
différente pour chaque sommet, ce qui donne une coloration valide de G avec ∆(G) couleurs.
Le problème de coloration des sommets d’un graphe consiste à attribuer des couleurs aux sommets de manière à
ce que deux sommets adjacents ne puissent pas avoir la même couleur. Pour formaliser ce problème, on peut utiliser
14
la modélisation mathématique suivante :
Pq
Z(Min)
Pq
= k=1 Zk
k=1 Cik = 1 ∀i ∈ V
C + C ≤ 1 ∀(i, j) ∈ E, ∀k = 1, . . . , q
j,k i,k
Ci,k ∈ {0, 1} ∀i ∈ V, ∀k = 1, . . . , q
Z k ∈ {0, 1} ∀k = 1, . . . , q
Zk ≥ Ci,k ∀i ∈ V, ∀k = 1, . . . , q
où :
◦ Z(Min) est la fonction objectif qui cherche à minimiser le nombre total de couleurs utilisées.
◦ Ci,k est une variable binaire qui indique si le sommet i est coloré avec la couleur k.
◦ Zk est une variable binaire qui est égale à 1 si la couleur k est utilisée.
Pq
◦ k=1 Cik = 1 garantit que chaque sommet est coloré avec une seule couleur.
◦ Cj,k + Ci,k ≤ 1 garantit que deux sommets adjacents ne peuvent pas avoir la même couleur.
◦ Ci,k ∈ {0, 1} et Zk ∈ {0, 1} définissent les variables binaires.
◦ La contrainte Zk ≥ Ci,k est utilisée pour garantir que si le sommet i est attribué à la couleur k (Ci,k = 1),
alors la variable Zk correspondante doit également être activée (Zk = 1).
La coloration des sommets d’un graphe peut sembler un problème simple, mais sa complexité augmente ra-
pidement avec des graphes de grande taille. En réalité, l’algorithme de coloration des graphes est classé comme
NP-difficile, ce qui signifie que sa complexité est exponentielle dans le pire des cas. Cook et al. ont découvert la
complexité de ce problème en 1971.[5]
Cela implique qu’il n’existe pas d’algorithme efficace connu qui puisse résoudre le problème en un temps rai-
sonnable pour le cas général des graphes. Cependant, il existe des algorithmes d’approximation qui permettent de
trouver des solutions proches de la solution optimale en un temps polynomial, bien qu’ils ne garantissent pas de
trouver la solution exacte. De plus, dans certains cas particuliers où le nombre chromatique est borné, il est possible
15
Coloration d’un graphe complet :
Théorème 5 :
Soit G un graphe complet d’ordre n. Alors χ(G) = n.
Preuve :
Soit G un graphe complet d’ordre n. Pour prouver que χ(G) = n, nous devons montrer deux choses : (1)
χ(G) ≤ n et (2) χ(G) ≥ n.
(1) Montrons que χ(G) ≤ n. Pour cela, nous attribuons une couleur différente à chaque sommet de G. Comme
G est complet, chaque sommet est adjacent à tous les autres sommets. Par conséquent, il n’y a pas de contrainte
sur les couleurs utilisées, et nous pouvons donc utiliser n couleurs distinctes pour colorer les sommets de G. Ainsi,
χ(G) ≤ n.
(2) Montrons maintenant que χ(G) ≥ n. Supposons par l’absurde que χ(G) < n. Cela signifierait qu’il existe
une coloration des sommets de G avec moins de n couleurs. Cependant, comme G est complet, chaque paire de
sommets est adjacente, ce qui implique que tous les sommets doivent avoir des couleurs différentes pour respecter
la condition de non-adjacence des mêmes couleurs. Mais cela contredit notre supposition initiale selon laquelle il y
Théoréme 8 [6] :
Tout graphe biparti est 2-coloriable.
Preuve :
Soit G un graphe biparti avec des ensembles de sommets V1 et V2 tels que chaque arête relie un sommet de V1
à un sommet de V2 .
Pour colorier G avec 2 couleurs, nous pouvons attribuer la couleur 1 à tous les sommets de V1 et la couleur
2 à tous les sommets de V2 . Étant donné que chaque arête relie un sommet de chaque ensemble, deux sommets
adjacents auront des couleurs différentes.
16
Ainsi, tout graphe biparti peut être 2-colorié.
Exemples :
Nous illustrons quelques exemples de graphes accompagnés de leurs colorations optimales.
b a
a c
d b c
Figure 2.2 – Le cycle C4 est 2-chromatique. Figure 2.3 – Le cycle C3 est 3-chromatique.
a h b
a d
e
b c d
f
c g
e g f
Figure 2.4 – Le graphe biparti G = (V1 ∪ V2 , E) est
2-chromatique. Figure 2.5 – Le graphe planaire G = (V, E) est 4-
coloriable.
2.6 Conclusion
Après une étude détaillée de la coloration des graphes, de ses caractéristiques et de ses applications à certaines
classes de graphes bien connues, il est essentiel de s’intéresser à la coloration dans le cas général des graphes. Une
question clé demeure : comment pouvons-nous déterminer le nombre chromatique de n’importe quel graphe ? De
plus, comment pouvons-nous résoudre efficacement divers problèmes en utilisant la coloration des graphes ? Quels
algorithmes nous permettent d’obtenir une bonne solution à ce problème en un temps de calcul réduit ?
17
Chapitre 3
Méthodes de résolution
3.1 Introduction
Lorsqu’il s’agit de résoudre un problème en recherche opérationnelle, l’objectif est de trouver une solution
optimale parmi un ensemble fini mais vaste de solutions admissibles. Une méthode évidente consiste à tester toutes
les combinaisons possibles afin de trouver la meilleure solution. Ces algorithmes, appelés algorithmes exhaustifs,
examinent toutes les possibilités, mais ils sont souvent très coûteux en termes de complexité.
Afin de réduire le temps de recherche et d’obtenir des solutions optimales de manière plus efficiente, d’autres
algorithmes ont été développés. Ces algorithmes appartiennent à différentes familles et classes, et dans ce chapitre,
Avant d’énumérer les différentes méthodes utilisées en recherche opérationnelle pour trouver la meilleure solution,
Un problème d’optimisation :
Un problème d’optimisation est un problème mathématique visant à trouver la meilleure solution parmi un
ensemble de solutions possibles, en maximisant ou minimisant une fonction objectif tout en respectant un ensemble
de contraintes.
La recherche opérationnelle s’intéresse à la résolution de divers types de problèmes d’optimisation, tels que
les problèmes d’optimisation linéaire, les problèmes d’optimisation non linéaire et les problèmes d’optimisation
combinatoire. Pour résoudre ces problèmes, différentes méthodes ont été adaptées, telles que la méthode de Newton,
la méthode de descente de gradient, la recherche taboue, la méthode émulée, etc.
Les problèmes d’optimisation combinatoire (OC) sont des problèmes qui cherchent la meilleure solution parmi
un ensemble fini mais de grande cardinalité de solutions réalisables. Ils englobent plusieurs disciplines, notamment
18
la théorie des graphes, la combinatoire énumérative, les problèmes de dénombrement et la théorie polyédrale. Ces
problèmes ont de nombreuses applications dans divers domaines tels que la logistique, les télécommunications, la
planification de production industrielle et le transport aérien.
Il existe de nombreuses techniques d’optimisation pour résoudre ces problèmes, telles que les algorithmes
génétiques, les algorithmes de recuit simulé, les algorithmes de recherche taboue, les méthodes de programmation
linéaire et les heuristiques.
Méthodes Exactes :
Les méthodes exactes [10], également appelées méthodes complètes, cherchent la solution optimale en examinant
de manière exhaustive l’ensemble des solutions possibles. Elles sont utilisées pour trouver au moins une solution
optimale à un problème. Parmi les méthodes les plus connues et les plus précises, on trouve :
La méthode de séparation et d’évaluation : l’évaluation permet de réduire l’espace de recherche en éliminant
certains sous-ensembles qui ne contiennent pas la solution optimale, tandis que la séparation consiste à diviser le
problème en deux sous-ensembles et à les résoudre en conservant la meilleure solution, ce qui garantit la résolution
du problème initial.
La méthode de programmation dynamique : elle consiste à résoudre le problème en le décomposant en
sous-problèmes plus simples, puis à combiner les solutions de ces sous-problèmes pour obtenir la solution globale.
La programmation linéaire : elle permet de modéliser le problème sous la forme d’un programme linéaire et
d’utiliser des techniques d’optimisation linéaire pour trouver la solution optimale.
Méthodes approchées :
Dans certains cas, les méthodes exactes nécessitent un temps de résolution trop long, c’est pourquoi des méthodes
approchées [10] sont utilisées. Ces méthodes, également appelées méthodes approximatives, permettent d’obtenir
rapidement de bonnes solutions, mais sans garantie d’optimalité. Elles englobent deux classes :
Les heuristiques : ce sont des règles empiriques simples qui exploitent la structure du problème. Elles
conduisent généralement à des solutions sous-optimales, mais elles convergent rapidement vers de bonnes solutions.
Il existe deux types d’heuristiques principalement utilisés : les heuristiques de construction (méthodes gloutonnes)
qui construisent la solution de manière itérative, et les heuristiques de descente qui, à partir d’une solution donnée,
cherchent un optimum local.
Les métaheuristiques : ce sont des méthodes de résolution plus générales qui peuvent être appliquées à un large
éventail de problèmes. Contrairement aux heuristiques, les métaheuristiques ne sont pas spécifiques à un problème
particulier. Parmi les métaheuristiques les plus courantes, on peut citer la recherche locale itérative, la recherche
19
de voisinage variable, la recherche taboue, l’algorithme de recuit simulé, la recherche en essaim et l’algorithme
génétique.
Dans ce mémoire, nous nous intéresserons plus particulièrement à la recherche taboue.
La recherche taboue est une méthode heuristique de recherche locale utilisée pour résoudre des problèmes com-
plexes. Elle permet de trouver rapidement des solutions optimales en explorant un voisinage de solutions possibles.
La méthode de recherche taboue a été proposée pour la première fois par Fred Glover en 1986 comme une alterna-
tive aux méthodes déterministes existantes. Depuis sa création, cette méthode a connu de nombreuses améliorations
et variations afin d’améliorer ses performances. La recherche taboue est particulièrement utile pour résoudre des
problèmes d’optimisation difficiles pour lesquels les méthodes d’optimisation classiques ne donnent pas de résultats
satisfaisants. Elle a été utilisée avec succès dans de nombreux domaines tels que la logistique, la planification de la
production, la conception de circuits intégrés et l’analyse financière.
Le principe de la recherche taboue repose sur l’exploration d’un voisinage de solutions à partir d’une solution
initiale, tout en évitant certains mouvements qui mèneraient à des solutions non souhaitables ou interdites. L’objectif
est d’explorer différents points de recherche afin d’atteindre l’optimum global dans le cas de la minimisation ou le
poursuivre la recherche de manière intelligente. Toute solution figurant dans la liste taboue est appelée solution
taboue. Le rôle de la liste taboue évolue au cours de la résolution. Durant les itérations, de nouvelles solutions sont
ajoutées à la liste et des solutions existantes peuvent en être retirées (si le tabou est levé).
À chaque itération, la nouvelle solution choisie ne doit pas appartenir à la liste taboue. La durée de présence d’une
solution dans la liste dépend de la longueur maximale fixée pour cette liste. Après un certain nombre d’itérations,
une solution taboue peut être retirée de la liste, ce qui permet de l’utiliser à nouveau. Il est donc nécessaire de
définir un nombre maximal d’itérations.
20
Début
Solution initiale
mettre à jour
Sélectioner la meilleure solution admissible
la liste taboue
NON
Critères d’arrêt atteint ?
OUI
Stop
Fin
21
Algorithme glouton :
Dans le cadre de notre étude sur la coloration des sommets, nous souhaitons résoudre le problème de coloration
en utilisant une approche gloutonne suivie d’une recherche taboue. Tout d’abord, nous allons appliquer l’algorithme
glouton pour obtenir une solution initiale. L’algorithme glouton attribue des couleurs aux sommets du graphe de
manière itérative en choisissant à chaque étape la couleur qui minimise les conflits avec les couleurs déjà attribuées
aux voisins. Cette approche donne généralement une coloration de bonne qualité. Une fois que nous aurons obtenu
cette solution initiale, nous l’utiliserons comme point de départ pour notre recherche taboue. La recherche taboue
est une technique d’optimisation qui explore l’espace des solutions en utilisant des mouvements locaux et en évitant
les boucles infinies grâce à une liste taboue. Nous espérons que cette combinaison de l’algorithme glouton suivi de
la recherche taboue nous permettra d’obtenir une coloration encore meilleure et plus proche de l’optimum global
du graphe.
Nous présentons ci-dessous l’algorithme de recherche taboue qui décrit le processus de recherche de la meilleure
solution :
Soit f la fonction objectif qui calcule le coût, représentant le nombre de couleurs différentes utilisées dans la
solution.
22
Algorithm 3 Algorithme de recherche taboue pour le problème de coloration des graphes.
Entrée : Un graphe G = (V, E).
Sortie : La meilleure solution retrouvée s∗ .
Initialiser le nombre de couleurs K trouvé en appliquant l’algorithme 3.4.
LT ← ∅ : % Initialiser la liste taboue LT comme étant vide.
T : % Introduire la taille de la liste taboue.
Imax : % Initialiser le nombre d’itérations maximum Imax .
I ← 0 % Initialiser l’itération courante I à 0.
s :← solution % Initialiser la solution s avec une solution initiale obtenue par l’algorithme 3.4.
s∗ ← s % Initialiser la meilleure solution s∗ avec s.
Au cours de cette partie, nous allons d’abord appliquer l’algorithme glouton pour obtenir une solution initiale.
Ensuite, nous utiliserons cette solution comme point de départ pour appliquer l’algorithme de recherche tabou.
Commençons maintenant par les données d’entrée de l’algorithme, que nous appellerons les ”données”
IM AX = 6
K = 10
T =5
23
1
3
4 2
6 5
8 7
10 9
1
Itération 1
3 On choisit le sommet 1
4 2 Voisins ← {2,3,4}
6 5
Voisin n’est pas vide donc :
8 7 min = min{rouge, vert, jaune, bleu, violet, rose,
marron, gris, noir, orange}.
10 9 min ={rouge}.
solution = {(1 , rouge)}.
1
Itération 2
3 On choisit le sommet 2.
4 2 Voisins ← {1,5,9}.
6 5
Voisin n’est pas vide donc :
8 7 min = min{vert, jaune, bleu, violet, rose, marron,
gris, noir, orange}.
10 9 min = {vert}.
solution= {(1, rouge), (2, vert)}.
24
1
Itération 3
3 On choisit le sommet 3.
4 2 Voisins ← {1, 7, 8}.
6 5
Voisin n’est pas vide donc :
8 7 min = min{jaune, vert, bleu, violet, rose, marron,
gris, noir, orange}.
10 9 min ={jaune}.
solution = {(1, rouge), (2, vert), (3, jaune)}.
1 Itération 4
On choisit le sommet 4.
3 Voisins ← {1, 6, 10}.
4 2 Voisin n’est pas vide donc :
6 5
min = min {vert, jaune, bleu, violet, rose, marron,
8 7 gris, noir, orange}.
min = {vert}.
10 9 solution = {(1, rouge), (2, vert), (3, jaune), (4,
vert)}.
1 Itération 5
On choisit le sommet 4.
3 Voisins ← {2, 6, 8}.
4 2 Voisin n’est pas vide donc :
6 5
min = min {bleu, rouge, violet, rose, marron, gris,
8 7 noir, orange}.
min = {bleu}.
10 9 solution = {(1, rouge), (2, vert), (3, jaune), (4,
vert), (5, bleu)}.
1 Itération 6
On choisit le sommet 6.
3 Voisins ← {4, 5, 7}.
4 2 Voisin n’est pas vide donc :
6 5
min = min {rouge, jaune, violet, rose, marron, gris,
8 7 noir, orange}.
min = {rouge}.
10 9 solution = {(1, rouge), (2, vert), (3, jaune), (4,
vert), (5, bleu), (6, rouge)}.
1
Itération 7
3 On choisit le sommet 7.
4 2 Voisins ← {3, 6, 9}.
6 5
Voisin n’est pas vide donc :
8 7 min = min {bleu, violet, rose, marron, gris, noir,
orange}.
10 9 min = {bleu}.
solution = {(1, rouge), (2, vert), (3, jaune), (4, vert), (5, bleu), (6,
25
1
Itération 8
3 On choisit le sommet 8.
4 2 Voisins ← {3, 5, 10}.
6 5
Voisin n’est pas vide donc :
8 7 min = min{rose, rouge, vert, violet, marron, gris, noir, orange}.
min = {rose}.
10 9 solution = {(1, rouge), (2, vert), (3, jaune), (4,
vert), (5, bleu),(6, rouge),(7, bleu), (8, rose)}.
Itération 9
1
On choisit le sommet 9.
Voisins ← {2, 7, 10}.
3 Voisin n’est pas vide donc :
4 2 min = min{rouge, jaune, violet, rose, marron, gris,
6 5
noir, orange}.
8 7 min = {rouge}.
solution = {(1, rouge), (2, vert), (3, jaune), (4,
10 9 vert), (5, bleu), (6, rouge), (7, bleu), (8, rose), (9,
rouge)}.
Itération 10
26
Après avoir obtenu une solution initiale à l’aide de l’algorithme glouton pour le graphe de Peterson avec une
coloration utilisant 5 couleurs distinctes, nous pouvons maintenant procéder à l’application de l’algorithme de
recherche taboue dans le but d’améliorer cette solution.
Initialisation
1
10 9
1
Itération 1
Soit le sommet 1 : Les couleurs possibles pour 1
3 sont : {jaune, vert, bleu, rose}.
4 2 et leurs conflits sont respectivement {1, 2, 0, 0}.
6 5
S1 = {(1, bleu), (2, vert), (3, jaune), (4, vert), (5,
8 7 bleu), (6, jaune), (7, bleu), (8, rose), (9, rouge), (10,
bleu)}.
10 9 K = 5 ,I = 1.
LT = {(1, bleu)}.
1
Itération 2
Soit le sommet 2 : Les couleurs possibles pour 2
3 sont :{jaune, rouge, bleu, rose} et leurs conflits sont
4 2 respectivement {0, 1, 2, 0}.
6 5
S2 ={(1, bleu), (2, rose), (3, jaune), (4, vert), (5,
8 7 bleu), (6, jaune), (7, bleu), (8, rose), (9, rouge), (10,
bleu)}.
10 9 K = 5, I = 2.
LT = {(1, bleu), (2, rose)}.
27
1
Itération 3
Soit le sommet 3 : Les couleurs possibles pour 3
3 sont : {vert, rouge, bleu, rose} et leurs conflits sont
4 2 respectivement {0, 0, 2, 1}.
6 5
S3 = {(1, bleu), (2, rose), (3, rouge), (4, vert), (5,
8 7 bleu), (6, jaune), (7, bleu) ,(8, rose), (9, rouge), (10,
bleu)}.
10 9 K = 5, I = 3.
LT = {(1, bleu), (2, rose), (3, rouge)}
1
Itération 4
Soit le sommet 4 : Les couleurs possibles pour 4
3 sont : {rouge, bleu, rose, jaune} et leurs conflits sont
4 2 respectivement {0, 2, 0, 1}.
6 5
S4 = {(1, bleu), (2, rose), (3, rouge), (4, rose), (5,
8 7 bleu), (6, jaune), (7, bleu), (8, rose), (9, rouge), (10,
bleu)}.
10 9 K = 4, I = 4.
LT = {(1, bleu), (2, rose), (3, rouge), (4, rose)}.
1
Itération 5
Soit le sommet 5 : Les couleurs possibles pour 5
3 sont : {rouge, rose, jaune}, et leurs conflits sont
4 2 respectivement {0, 2, 1}.
6 5
S5 = {(1, bleu), (2, rose), (3, rouge),(4, rose), (5,
8 7 rouge), (6, jaune), (7, bleu), (8, rose), (9, rouge),(10,
bleu)}.
10 9 K = 4, I = 5.
LT = {(1, bleu), (2, rose), (3, rouge), (4, rose), (5, rouge)}.
28
Itération 6
Soit le sommet 6 : Les couleurs possibles pour
6 sont : {rouge,rose, bleu}. et leurs conflits sont
respectivement {1, 1, 1}.
donc aucune couleur n’est disponible pour le som-
1 met 6.
FIN.
K = 4, I = 6.
3 LT = {(2, rose), (3, rouge), (4, rose), (5, rouge), (6, rose)}.
4 2 I = IM AX , fin.
6 5
En appliquant l’algorithme de recherche taboue,
8 7 nous avons réussi à améliorer la solution initiale de
la coloration des sommets du graphe de Peterson,
10 9 trouvée par l’algorithme glouton, passant ainsi de 5
couleurs à 4 couleurs.
3.5 Conclusion
Les résultats obtenus démontrent que la méthode de recherche taboue peut être appliquée avec succès pour
résoudre de nombreux problèmes d’optimisation, y compris celui de la coloration des graphes. Cette méthode heu-
ristique s’avère très fiable pour obtenir une solution approximative à une grande variété de problèmes d’optimisation
combinatoire dans divers domaines, tout en demandant moins de temps de recherche.
29
Chapitre 4
Implémentation
4.1 Introduction
Un langage de programmation est un langage informatique qui permet de formuler des algorithmes et de produire
des instructions qui seront exécutées par un ordinateur. Il existe plusieurs langages de programmation, tels que
Python, Java et Matlab, chacun offrant ses propres caractéristiques et domaines d’application.
Dans ce chapitre, notre attention sera portée sur l’implémentation de l’algorithme de recherche taboue pour
résoudre le problème de coloration des graphes en utilisant le langage de programmation Python.
Le langage Python est un langage de programmation de haut niveau et interprété, qui a été créé au début des
années 1990 par Guido Van Rossum. Contrairement à des langages comme le C, Python n’a pas besoin d’être compilé
avant d’être exécuté. Il est directement interprété par l’ordinateur, ce qui facilite son utilisation et sa portabilité.
Python est un langage open source, ce qui signifie que son code source est accessible à tous et peut être modifié
et distribué librement. Cette caractéristique a contribué à la popularité croissante de Python, qui est aujourd’hui
largement utilisé dans différents domaines, tels que :
— La Programmation d’applications.
— La création de services web.
— La génération de code.
— La métaprogrammation.
30
Configuration de la machine utilisée :
L’algorithme a été exécuté sur une machine avec les spécifications suivantes :
— Appareil : LAPTOP-CV1QUAL1.
networkx : une bibliothèque Python permettant de manipuler des graphes et des réseaux.
[Link] : une bibliothèque Python permettant de créer des graphiques et des visualisations.
random : une bibliothèque Python permettant de générer des nombres aléatoires.
collections : une bibliothèque Python qui fournit des alternatives hautement optimisées aux types de données
intégrés tels que les listes, les tuples et les dictionnaires.
Les variables et fonctions utilisées dans l’algorithme de recherche taboue pour la résolution du problème de
coloration des graphes sont les suivantes :
graphe : La structure de données que nous avons utilisée pour représenter le graphe en entrée est la matrice
d’adjacence M .
Nombre de couleurs disponibles : Ce paramètre spécifie le nombre de couleurs différentes qui peuvent
être utilisées pour colorier les sommets.
Nombre maximal d’itérations : Ce paramètre spécifie le nombre maximum d’itérations que l’algorithme
doit effectuer avant de s’arrêter.
Taille de la liste taboue : Ce paramètre spécifie la taille de la liste taboue utilisée par l’algorithme.
Nombre de répétitions : Ce paramètre spécifie le nombre de fois que l’algorithme doit répéter chaque
itération.
lListe de couleurs : Une liste des k couleurs disponibles pour la coloration des sommets.
File représentant la liste taboue : Une file de taille fixe contenant les mouvements récemment effectués
31
Ensemble de mouvements candidats : Un ensemble de mouvements possibles qui peuvent être effectués
à chaque itération.
Nombre de conflits : Le nombre de conflits actuels dans la solution.
Nouvelle solution : La solution générée lors d’une itération de l’algorithme.
Niveau d’aspiration : Un dictionnaire contenant le niveau d’aspiration pour chaque nombre de conflits.
Nombre de conflits dans la nouvelle solution : Le nombre de conflits dans la nouvelle solution générée
lors d’une itération.
Fonction de vérification de la liste taboue : Une fonction qui vérifie si un mouvement est autorisé selon
la liste taboue.
Fonction Initial solution : Une fonction qui prend en entrée un graphe et le nombre de couleurs dispo-
nibles, et qui renvoie une solution initiale aléatoire pour la coloration du graphe. Cette solution consiste à
attribuer une couleur aléatoire à chaque sommet du graphe. Si un sommet a des voisins qui ont déjà une
couleur attribuée, il reçoit une couleur différente de celle de ses voisins.
Fonction nombre chromatique : Une fonction qui prend en entrée un graphe et la meilleure solution de
coloration, et qui renvoie le nombre chromatique du graphe.
La fonction tabou coloration utilise une approche de recherche taboue pour trouver une solution de coloration
d’un graphe qui minimise lse nombre de conflits. Elle accepte en paramètres un graphe, le nombre de couleurs
disponibles, le nombre maximum d’itérations, la taille de la liste taboue et le nombre maximum de répétitions.
La fonction itère jusqu’à ce que le nombre maximum d’itérations soit atteint, ou qu’aucun conflit ne soit détecté,
ou que le nombre maximum de répétitions soit atteint. À chaque itération, la fonction génère une liste de mouvements
candidats, puis choisit un mouvement à partir de cette liste en utilisant une stratégie basée sur la liste taboue et le
niveau d’aspiration. La liste taboue est mise à jour à chaque itération pour conserver les mouvements récemment
effectués.
À la fin de l’algorithme, la fonction renvoie la meilleure solution trouvée ainsi que son nombre chromatique,
c’est-à-dire le nombre de couleurs différentes utilisées dans la solution.
Le programme en Python
32
8 if len ( tabu_list ) > tabu_size :
9 tabu_list . popleft ()
10 return True
11
Pour obtenir une coloration initiale des sommets du graphe en entrée, nous avons utilisé une heuristique gloutonne
que nous présentons dans la fonction Python suivante :
12 def initial_solution ( graphe , nb_de_coleurs ) :
13 solution = dict ()
14 colors = list ( range ( nb_de_coleurs ) )
15 for i in range ( len ( graphe ) ) :
16 voisins = [ solution [ j ] for j in range ( len ( graphe ) ) if graphe [ i ][ j ] > 0 and j in
solution ]
17 if voisins :
18 solution [ i ] = min ( set ( colors ) - set ( voisins ) )
19 else :
20 solution [ i ] = colors [ randrange (0 , len ( colors ) ) ]
21 return solution
22
Nous présentons ci-dessous le programme principal en Python de l’algorithme de recherche taboue pour résoudre
le problème de coloration des graphes :
23 def tabou_coloration ( graphe , nb_de_coleurs , max_iterations , taille_tabou , max_reps ) :
24 solution = initial_solution ( graphe , nb_de_coleurs )
25 best_solution = solution . copy ()
26 best_conflicts = sum ( graphe [ i ][ j ] > 0 and solution [ i ] == solution [ j ] for i in range (
len ( graphe ) ) for j in range ( i ) )
27 tabu_liste = deque ()
28 aspiration_level = dict ()
29 it ration = 0
30 while i t r a t i o n < max_iterations and best_conflicts > 0 and max_reps > 0:
31 max_reps -= 1
32 move_candidates = []
33 conflicts = {}
34 for i in range ( len ( graphe ) ) :
35 old_color = solution [ i ]
36 for new_color in range ( nb_de_coleurs ) :
37 if new_color != old_color :
38 new_solution = solution . copy ()
39 new_solution [ i ] = new_color
40 move_candidates . append (( i , new_color ) )
41 conflicts [( i , new_color ) ] = sum ( graphe [ i ][ j ] > 0 and new_solution [ i ]
== new_solution [ j ] for j in range ( len ( graphe ) ) )
42 sorted_moves = sorted ( conflicts . items () , key = lambda x : x [1])
43 move_candidates = [ move for move , conf in sorted_moves if conf == sorted_moves
[0][1]]
44 move = choice ( move_candidates )
45 tabu = tabu_list ( tabu_liste , move , taille_tabou )
46 if tabu :
47 solution [ move [0]] = move [1]
48 conflicts = sorted_moves [0][1]
49 if conflicts < best_conflicts :
50 best_solution = solution . copy ()
51 best_conflicts = conflicts
52 aspiration_level = { k : v - 1 for k , v in aspiration_level . items () if v > 1}
53 if move [1] != old_color and ( move [0] not in aspiration_level or aspiration_level
[ move [0]] <= 0) :
54 aspiration_level [ move [0]] = taille_tabou
33
55 i t r a t i o n += 1
56 return best_solution
57
La fonction Python suivante affiche la meilleure solution retrouvée par la méthode de recherche taboue :
58 def no mb re _chromatique ( best_solution ) :
59 return len ( set ( best_solution . values () ) )
60
Nous appliquons ce programme sur le graphe de Peterson et nous retournons le résultat de l’exécution.
3
4 2
5 1
6 12
7 11
8 10
9
34
La matrice d’adjacence du graphe de Petrson :
1
3 graphe = [[0 , 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0] ,
4 [1 , 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0] ,
5 [0 , 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0] ,
6 [0 , 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0] ,
7 [1 , 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0] ,
8 [0 , 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1] ,
9 [1 , 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1] ,
10 [0 , 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1] ,
11 [0 , 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0] ,
12 [1 , 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1] ,
13 [0 , 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0] ,
14 [0 , 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0]]
15
62 G = nx . Graph ()
63 for i in range ( len ( graphe ) ) :
64 G . add_node ( i )
65 for j in range (i , len ( graphe ) ) :
66 if graphe [ i ][ j ] > 0:
67 G . add_edge (i , j )
68
69
72
73 pos = nx . spring_layout ( G )
74
75
35
Ici, nous affichons le résultat de l’exécution :
4.4 Expérimentations
Au cours de cette section du chapitre, nous appliquerons l’algorithme de recherche taboue sur plusieurs graphes
générés aléatoirement. Chaque graphe sera soumis à 10 exécutions de l’algorithme, et les résultats obtenus seront
présentés dans un tableau. Le tableau indiquera le nombre maximal, minimal et moyen de couleurs obtenues sur
les 10 exécutions. Cette approche nous permettra de tester le déroulement de la méthode de recherche taboue dans
différentes conditions et d’analyser ses performances en détail.
4.5 Conclusion
Après avoir appliqué l’algorithme de recherche taboue à des instances aléatoires, il a été constaté que la solution
obtenue n’est pas toujours optimale et peut être assez éloignée de l’optimalité dans certains cas. Cela suggère que
cette méthode ne peut pas garantir l’optimalité et le nombre chromatique minimum, mais elle fournit néanmoins
des solutions de qualité acceptable dans un temps réduit.
Il est également remarqué que la qualité de la solution obtenue dépend de plusieurs paramètres. Dans notre cas,
nous avons utilisé l’heuristique gloutonne pour déterminer le nombre initial de couleurs et avons choisi une taille de
36
liste taboue proportionnelle au nombre de sommets du graphe en entrée. Cependant, en ajustant ces paramètres, il
serait possible d’obtenir d’autres solutions, parfois même la solution optimale.
En conclusion, la recherche taboue reste une méthode heuristique efficace et utile pour résoudre les problèmes
d’optimisation combinatoire difficiles.
37
Conclusion générale
Au cours de ce mémoire, notre objectif était d’utiliser la recherche taboue pour résoudre le problème de coloration,
qui est un problème de la théorie des graphes consistant à attribuer des couleurs aux sommets d’un graphe de sorte
que deux sommets adjacents n’aient pas la même couleur.
Nous avons commencé par introduire les notions générales de la théorie des graphes. Ensuite, nous avons abordé
la problématique de la coloration des graphes et proposé sa résolution à travers l’algorithme de recherche taboue,
connu pour son efficacité dans la fourniture de colorations quasi optimales dans la plupart des cas.
Nous avons ensuite procédé à l’implémentation de l’algorithme, ce qui nous a permis d’évaluer son fonctionnement
et son degré d’optimalité.
La coloration des graphes est l’un de ces problèmes mathématiques qui, bien qu’ils soient faciles à énoncer et à
visualiser, comportent de nombreux aspects exceptionnellement difficiles à résoudre. Toutefois, grâce à des méthodes
de résolution et à divers algorithmes, nous avons pu fournir une approche théorique du problème et l’appliquer à
38
Bibliographie
[1] David Défossez. Coloration d’hypergraphes et clique-coloration. l’École Doctorale ≪ Mathématiques, Sciences
et Technologies de l’Information, Informatique, 12 octobre 2006.
[4] Didier Muler. Introduction a la théorie des graphes. COMMISSION ROMANDE DE MATHÉMATIQUE,
2012.
[6] Olivier Togni. L3 : cours Graphes Chapitre III : coloration de graphe. 7 janvier 2019.
39