Vous êtes sur la page 1sur 65

École Supérieure de Technologie Industrielle

Département de Génie Industriel

Spécialité : Maintenance et fiabilité des systèmes


industriels

Recherche
Opérationnelle
Notes de Cours

Dr. Karabadji Nour El Islem

Année universitaire 2020-2021


GITHUB . COM /L AURETH T E X/C LUSTERING

Ce manuscrit a été rédigé par Dr. Karabadji Nour EL islem maı̂tre de conférences classe B à L’École
Superieure de Technologie Industrial Annaba pour servir comme support de cours aux étudiants de
3e année, Spécialité Energetique et Developpement Durable.

Deuxième édition aout 2018


Table des matières

1 Introduction à la Recherche Opérationnelle . . . . . . . . . . . . . . . . . . . . . 5

2 Programmation linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1 Formalisation 7
2.2 Résolution de problèmes par voie graphique 9
2.2.1 Problème à deux variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Problème à trois variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Résolution de problèmes par méthode du simplexe 13
2.4 Exercices 17

3 Théories des graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23


3.1 Notions de base 24
3.1.1 Graphes non-orientés et orientés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2 Voisinages et degrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Représentation d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.4 Chemins et cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.5 Connexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 Quelques graphes remarquables 33
3.3 Arbre et arborescence 34
3.4 Cycles eulériens et hamiltoniens 40
3.5 Coloration 41
3.5.1 Algorithme de coloration de Welch et Powell . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4

3.6 Plus courts chemins 43


3.6.1 Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.6.2 Algorithme de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.7 Flots et réseaux de transport 46
3.8 Problèmes d’affectations 50
3.9 Exercices : 56
1. Introduction à la Recherche Opérationnelle

Ces dernières années, une grande attention a été prêtée aux problèmes d’optimisation com-
binatoire, en raison de ces nombreuses applications dans le monde réel. En effet, ces problèmes
interviennent souvent comme des sous-problèmes à résoudre dans plusieurs domaines, où nous avons
toujours un besoin d’optimiser, planifier ou prendre des décisions rapidement et sur tous les plans.

Au niveau des entreprises et des industries, le contexte décisionnel se résume en matière de maxi-
misation de gains et de minimisation de pertes. Pour résoudre ce type de problèmes d’optimisation,
un certain nombre de méthodes ont été proposées. Ces méthodes avaient principalement permis de
décharger l’être humain de la pénible tâche de chercher des solutions optimales parmi l’ensemble
de toutes les configurations possibles. Pour résoudre cette tâche, une solution satisfaisante (ou un
ensemble de solutions) est atteinte généralement en explorant toutes les configurations alternatives
possibles sur un espace de recherche. Ce processus de recherche permet de récupérer soit une, ou
plusieurs solutions, et peut même ne pas renvoyer de solutions, et ce en corrélation avec les critères
de satisfactions exigés.

À titre d’exemple, soit un ensemble de tâches avec des temps d’exécutions connus, nous devons
affecter les tâches à des groupes d’employés. Chaque tâche peut être confiée à un seul employé
ou à un groupe d’employés c.-à-d. un ou plusieurs employés peuvent être affectés à une même
tâche. Chaque employé peut travailler sur plusieurs tâches, mais en revanche, il ne peut pas exécuter
plusieurs tâches simultanément. L’objectif de cette affectation est d’exécuter l’ensemble des tâches
aussi rapidement que possible. Afin de résoudre efficacement ce problème d’ordonnancement, l’idée
est de minimiser le nombre d’employés affectés à plusieurs tâches différentes. Cela est dû au fait
que le temps d’exécution de l’ensemble des tâches est alors égal au temps de travail de l’employé le
plus occupé, étant donné qu’un employé ne peut réaliser qu’une tâche à la fois. Par conséquent, la
meilleure affectation est celle qui permet la restriction d’un nombre important (maximal) d’affecta-
tions d’un même employé à plusieurs tâches. Cependant, atteindre la meilleure affectation revient
à la chercher parmi l’ensemble de toutes les affectations possibles. Ce nombre de combinaisons
nécessite un temps de calcul énorme, et malgré la puissance croissante des machines, l’exploration de
6 Chapitre 1. Introduction à la Recherche Opérationnelle

toutes les combinaisons est toujours un cas délicat et même intraitable en pratique. Prenons comme
exemple un groupe de n employés, le nombre de combinaisons d’employés possibles est 2n . Pour
des données de petite taille, il est possible d’explorer toutes les combinaisons dans le pire des cas,
mais cela est pratiquement impossible pour des données de grande taille.

Avant de présenter le contenu de ce cours faisant un petit tour d’horizon historique, le commence-
ment a été à partir de la Seconde Guerre mondiale, une méthode d’optimisation (une première) a été
développée lors de l’élaboration des radars sous la direction de Watson-Watt. Celui-ci s’intéressait à
l’utilité des radars dans un contexte de défense antiaérienne et d’intervention de la chasse aérienne
à la fin des années 1930. En 1940 aux États unis, des groupes d’Operation Research furent créés
dans les Etats Majors. Le but était d’organiser les convois, de mettre en place un blocus sur les ports
japonais et de répartir les équipages des avions.

Après la guerre, la recherche opérationnelle a vu son champ d’application s’élargir au milieu


économique, à l’enseignement (Massachusetts Institue of Technologie), à certaines organisations
(Society of America), etc.

Dans les années 70-80, on applique même les principes de la recherche opérationnelle à la
compréhension des phénomènes de trou noir.

Le cours présent propose quelques grands axes de méthodes de recherche opérationnelle et


d’aide à la décision, en particulier la théorie des graphes et la programmation linéaire et dynamique.
D’abord cela permettra aux étudiants de libérer leurs capacités de modélisation et par conséquent
reconnaı̂tre les problèmes pour lesquels la recherche opérationnelle pourrait se révéler un instrument
incontournable. Ensuite, il leur permettra de comprendre les possibilités et les limites de ce type de
méthodes.
2. Programmation linéaire

Depuis longtemps, la programmation linéaire a été l’une des techniques mathématiques les plus
populaires pour résoudre des problèmes complexes là où les méthodes mathématiques classiques
échouaient. Sa popularité est due à sa simplicité . En effet, on peut la décrire comme étant un en-
semble d’approches de résolution assez facile pour les mettre en oeuvre, où beaucoup de problèmes
pratiques et en particulier ceux liés à la gestion des ressources des entreprises où le gestionnaire face
à différentes possibilités, doit les optimiser pour atteindre un objectif spécifique comme bien sûr
la maximisation des bénéfices ,. Dans ce même sens, on peut mentionner que l’importance de la
programmation linéaire est due au fait que dans la plupart des cas ; les problèmes de l’entreprise
pouvant être formalisée comme étant un ensemble d’équations linéaires et par la suite traitées par
l’une des méthodes de la programmation linéaire. On peut citer à titre d’exemple la disponibilité en
quantité limitée de la main-d’oeuvre, les matières premières, les capitaux, etc qu’on veut répartir
d’une façon optimale entre un certain nombre de processus de fabrication.

Généralement pour résoudre ce type de problèmes on approche sur trois étapes principales :
1. La modélisation du problème sous forme d’équations (inéquations) linéaires ;
2. La formulation d’une fonction objective ;
3. La détermination de l’optimum à l’aide d’une approche propre à la programmation linéaire.

2.1 Formalisation
Comme nous l’avons déjà mentionné, avant de procéder à la résolution d’un problème donné,
d’abord il faut le formaliser afin de l’écrire sous une forme canonique. Formellement, on peut le
définir comme suit :
8 Chapitre 2. Programmation linéaire

La fonction à optimiser z = c1 x1 + ... + cn xn 


 ≤ 
Sous contraintes ai1 x1 + ... + ain xn = bi

 
i = 1, ..., m

et x j ≥ 0, j = 1, ..., n

Où ai j , bi et c j sont des constantes connues et les contraintes x j ≥ 0, j = 1, ..., n sont appelées
contraintes de non négativité.
 Exemple 2.1 On considère le cas d’un fabricant d’automobiles qui propose deux modèles à la

vente, des grosses voitures et des petites voitures. Les voitures de ce fabricant sont tellement à la
mode qu’il est certain de vendre tout ce qu’il parvient à produire, au moins au prix catalogue actuel
de 1,6 million de dinars pour les grosses voitures, et 1.0 million de dinars pour les petites voitures.
Son problème vient de l’approvisionnement limité de deux matières premières. La construction
d’une petite voiture nécessite l’emploi d’une unité de caoutchouc et d’une unité d’acier, tandis que
celle d’une grosse voiture nécessite une unité de caoutchouc, mais deux unités d’acier. Sachant que
son stock de caoutchouc est de 400 unités et son stock d’acier de 600 unités, la question est combien
doit-il produire de petites et de grosses voitures au moyen de ces stocks afin de maximiser son chiffre
d’affaires ?

En notant le nombre de grosses voitures produites par x1 ,et par x2 le nombre de petites voitures,
et le chiffre d’affaires résultant par z. Le problème se traduit alors sous la forme canonique suivante :

la fonction à maximiser z = 1.6x1 + 1.0x2

sous les contraintes x1 + x2 ≤ 400


2x1 + x2 ≤ 600
x1 ≥ 0, x2 ≥ 0.

 Exemple 2.2 La direction d’une usine de meubles a constaté qu’il y a des temps morts dans
chacun des départements de l’usine. Pour remédier à cette situation, elle décide d’utiliser ces temps
morts pour fabriquer deux nouveaux modèles de bureaux, x1 et x2 . Les temps de réalisation pour
chacun de ces modèles dans les ateliers de sciage, d’assemblage et de sablage ainsi que les temps
libres dans chacun de ces ateliers sont donnés dans le tableau ci-dessous.

x1 x2 Temps libres
Sciage 1 2 20
Assemblage 2 1 22
Sablage 1 1 12

Ces temps représentent le nombre d’heures nécessaires à un homme pour effectuer le travail. Les
profits que la compagnie peut réaliser pour chacun de ces modèles sont de 3000 DA pour x1 et de
2.2 Résolution de problèmes par voie graphique 9

2000 DA pour x2 . La direction désire déterminer combien de bureaux de chaque modèle elle doit
fabriquer pour maximiser son profit. Le problème se traduit alors sous la forme canonique suivante :

la fonction à maximiser z = 3000x1 + 2000x2

sous les contraintes x1 + 2x2 ≤ 20


2x1 + x2 ≤ 22
x1 + x2 ≤ 12
x1 ≥ 0, x2 ≥ 0.

2.2 Résolution de problèmes par voie graphique


La résolution graphique de problèmes de programmation linéaire ne peut concerner que des
problèmes avec deux et trois variables, où le processus de résolution s’applique en deux étapes :
a). la représentation du domaine des solutions réalisables,
b). trouver une solution optimale.
Nous allons sur cette section illustrer le principe d’une telle résolution sur deux exemples : le premier
il ne contient que deux variables et le second il ne contient que trois variables.

2.2.1 Problème à deux variables


Une usine fabrique deux produits finis p1 et p2 à l’aide de main-d’oeuvre (r1 ) et deux matières
premières (ressources) r2 et r3 . Les procédés de fabrication sont définis comme suit que : pour
fabriquer une unité de p1 , il faut 1h de r1 , deux unités de r2 et 4 unités de r3 , pour fabriquer une unité
de p2 , il faut 6h de r1 , deux unités de r2 et une unité de r3 , les ressources quotidiennes de l’usine
sont limitées à : 30h de r1 , 15 unités de r2 , 24 unités de r3 , les prix de vente unitaires sont 2 DA pour
p1 , 3 DA pour p2 , le directeur de l’usine souhaite organiser sa production de telle sorte qu’il parvient
à maximiser le bénéfice quotidien.

D’abord, le problème est traduit sous la forme canonique suivante :

la fonction à maximiser z = 2x1 + 3x2

sous les contraintes x1 + 6x2 ≤ 30


2x1 + 2x2 ≤ 15
4x1 + x2 ≤ 24
x1 ≥ 0, x2 ≥ 0.

Ensuite, en analysant les contraintes on peut facilement déduire que chaque solution est un point
x = (x1, x2) ∈ R2 , encore en considérant la contrainte de positivité, on peut réduire le domaine des
solutions réalisables à R+2 . Puis en représente chacune des trois contraintes restantes par une droite
en réduisant l’espace des solutions réalisables soit du haut ou du bas (à droite ou à gauche en cas
de droite verticale). Pour notre cas, toutes nos contraintes sont des inéquations, alors on élimine les
Exemple de référence
Schéma général de la modélisation
10 Résolution graphique d’un PL
Chapitre 2. Programmation linéaire
Définition et écriture de PL
Utilisation de solveurs
solutions qui sont positionnées en haut de chacune de nous trois droites. La Figure 2.1 illustre un
Résolution
polygonegraphique d’unde PL
convexe où chacun ses points (chacune de ces solutions) l’usine fera un profit positif.

x2
7
Max f (x) = 2x1 + 3x2 6
s.t. x1 + 6x2 ≤ 30 5
2x1 + 2x2 ≤ 15
4x1 + x2 ≤ 24 4
x1 ≥ 0, x2 ≥ 0 3
2
1
0
x1
0 1 2 3 4 5 6 7 8

Exemple
VincentdeMousseau
référence F IGURE 2.1 –
Modélisation en Programmation Linéaire
Schéma général de la modélisation
Résolution graphique d’un PL
Si l’usine fabrique trois exemplaires du modèle p1 et deux exemplaires du modèle p2 , le profit
Définition et écriture de PL
Utilisation de solveurs
sera : z = 2 ∗ 3 + 3 ∗ 2 = 12. Il n’en est pas question de calculer le profit realisable pour chacun des
Résolution
points dugraphique
polygone convexed’un! ! !. PL

x2
7
Max f (x) = 2x1 + 3x2 6
x ∗ = (3, 4.5)
s.t. x1 + 6x2 ≤ 30 5
2x1 + 2x2 ≤ 15
4x1 + x2 ≤ 24 4
x1 ≥ 0, x2 ≥ 0 3
2x
1
2 +
3x
2 =
19
1 .5

0
x1
0 1 2 3 4 5 6 7 8

Vincent Mousseau
F IGURE 2.2 –
Modélisation en Programmation Linéaire

Pour avoir l’optimum, on le représente par le parametre p. Alors on a : 2 ∗ x1 + 3 ∗ x2 = p. qui


représente une famille de droites parallèles. En isolant x2 , on obtient : x2 = 32 x1 + 3p . Il s’agit donc
d’une famille de droites de pente 23 et dont l’ordonnée est 3p . Parmi les droites de cette famille, seules
celles ayant des points communs avec le polygone convexe nous intéressent (voir la Figure 2.2).
2.2 Résolution de problèmes par voie graphique 11

Graphiquement on constate que la droite respectant ces conditions semble etre la droite de la famille
passant par le point-sommet (3 ;4.5).

2.2.2 Problème à trois variables


Un marchand de légumes prépare trois types de paquets de légumes P1 , P2 et P3 dont les
ingrédients de base sont les carottes, les courgettes et les poireaux. Pour préparer ces mélanges
comme des paquets, il reçoit hebdomadairement 24000gr de carottes, 12000gr de courgettes et
12000gr de poireaux. Les quantités utilisées pour chaque type de paquet et le profit réalisé sont
données dans le tableau suivant :

P1 P2 p3 Quantité disponible
Les carottes 300 300 200 24000 gr
Les courgettes 100 100 200 12000 gr
Les poireaux 300 100 100 12000 gr
Profit 2 DA 1.5 DA 1 DA

Sachant que le commerçant peut écouler tous les paquets de légumes qu’il peut préparer chaque
semaine, trouver combien il doit en préparer de chaque type de paquets de légumes de telle sorte
qu’il arrive à maximiser son profit.

En notant x1 x2 et x3 les nombres de paquets de légumes P1 , P2 et P3 respectivement et en


simplifiant les contraintes et les quantités de légumes par 10, le problème est traduit sous la forme
canonique suivante :

la fonction à maximiser z = 2x1 + 1.5x2 + x3

sous les contraintes 3x1 + 3x2 + 2x3 ≤ 240


x1 + x2 + 2x3 ≤ 120
3x1 + x2 + x3 ≤ 120
x1 ≥ 0, x2 ≥ 0, x3 ≥ 0.

Rappel : Lorsque l’inéquation comporte trois inconnues, la frontière est un plan. Ainsi la frontière
de l’inéquation a1 x1 + a2 x2 + a3 x3 ≤ b est un plan coupant les axes aux points représentant le triplet :
(b/a1 ; 0; 0) (0; b/a2 ; 0) (0; 0; b/a3 ) comme l’illustre la Figure 2.3.

title en considérant la forme canonique du problème au-dessus on obtient le Polyedre des


contraintes suivant :
Il nous faut maintenant représenter la fonction économique, alors on pose 2x1 +1, 5x2 +x3 = p où
p est un paramètre. On a une famille de plans parallèles et l’on cherche le plan de cette famille pour
lequel la valeur de p est maximale, tout en ayant au moins un point commun avec le polyèdre convexe.

Le bon choix de la représentation axonométrique du polyèdre convexe va nous permettre de


représenter cette famille de plans et donc de déterminer celui qui nous fournira la valeur maxi-
male. L’idée est de déterminer l’axonométrie permettant de représenter cette famille de plans par
Cajou 30 10 10 1’200
Profit Fr. 2.- Fr. 1.50 Fr. 1.-

Sachant que le commerçant


CHAPITREécoule tous les mélanges
2. RÉSOLUTION DE qu’il peut pré-D’INÉQUATION
SYSTÈMES
12 parer chaque semaine, trouver combien il doit2.en
Chapitre préparer de chaque
Programmation linéaire
sorte pour que son profit soit maximum.
x3
Lorsque l’inéquation comporte trois in
p0 ; 0 ; b{a3 qdu mélangeplan.
Solution: ‚ Posons xi le nombre de sachets Mi Ainsi la frontière de l’inéquation
‚ Fonction économique : f px1 ; x2 ; x3 q “ 2x1 ` 1,5x2 ` x3 a1 x1 ` a2 x2 ` a3
‚ Contraintes (simplifiée par 10) :p0 ; b{a ; 0q
2
est un plan coupant les axes aux point
$ x2

’ 3x1 ` 3x2 ` 2x3 ď 240
&
x ` x ` 2x3 ď 120 pb{a1 ; 0 ; 0q; p0 ; b{a2 ; 0
pb{a1 1; 0 ; 0q 2
x’ 3x1 ` x2 ` x3 ď 120

1
% En effet :
où xi ě 0 pour i “ 1; 2; 3
‚ Polyèdre des contraintes :
F IGURE 2.3 –
26 CHAPITRE 5. RÉSOLUTION
x3 GRAPHIQUE D’UN PROBLÈME
x3 À 3 VARIABLES
120 120

Il nous faut maintenant représenter la fonction économique :


Lorsqu’on représente un tel plan, il es
On pose 2x1 ` 1,5x2 ` x3 “ p où p est un paramètre. On a du
traces une plan sur les plans du syst
famille de plans parallèles et l’on cherche le plan de cette famille
fait qu’une partie du plan puisque celu
pour lequel la valeur de p est maximale, tout en ayant au moins un
10 10
point commun avec le polyèdrex2convexe. x2
1010 120 1010 120
Le bon choix de la représentation Exemple 3: Représenter
axonométrique du polyèdre l’ensemble-solution de l’éq
convexe va nous permettre de représenter cette famille de plans et
donc
x1 120de déterminer celui qui nous fournira
x1 120 la valeur maximale.4 x3
L’idée est de déterminer l’axonométrie permettant de représenter
cette famille de plans par une famille de droites.
25 F IGURE 2.4 – 3
En choisissant par exemple p “ 60, il s’agira d’assurer l’alignement
2
3 points : p30 ; 0 ; 0q, p0 ; 40 ; 0q et p0 ; 0 ; 60q.
desdroites.
une famille de
1
En choisissant Il restera à représenter
par exemple p = 60, il sur cette
s’agira axonométrie
d’assurer le polyèdre
l’alignement de : (30; 0; 0),
des 3 points
contrainte,
(0; 40; 0) et (0; puis d’y
0; 60). Il restera déterminersur
à représenter le cette
plan axonométrie
maximisant lela polyèdre
fonction de
éco-
contrainte, puis
nomique. 1
d’y déterminer le plan maximisant la fonction à maximiser.
2 1 2 3 4 x2
3
x3 x3 4
pla fct é
la

x1
n con

plan :
ma o

60 2x1 ` 1,5x2 ` x3 “ 60 60
xim miq

50 50
isa ue

Exercice 2.2: Représenter l’ensemble-solution des éq


nt

x1 x1
50 50
30 30 x3
4
10 10 10 10
x2 x2
10 40 50 100 10 40 50 3100

2
F IGURE sera
Nous constatons que la solution 2.5 – optimale sur le point de
coordonnées p20 ; 60 ; 0q ce qui nous permet alors de conclure1 le
problème :
1
Il s’agira de préparer 20 mélanges M1 , 60 mélanges M2 et 0 mélange
2 1 2 3 4 x2
M3 pour un profit maximum de : 3
2.3 Résolution de problèmes par méthode du simplexe 13

Nous constatons que la solution sera optimale sur le point de coordonnées (20; 60; 0) ce qui
nous permet alors de conclure le problème : Il s’agira de préparer 20 paquets de légumes de type P1 ,
60 paquets de légumes de type P2 et 0 paquet de légumes de type P3 pour un profit maximum de :
z = 2 ∗ 20 + 1, 5 ∗ 60 + 0 = 130DA.

2.3 Résolution de problèmes par méthode du simplexe


Comme nous venons de le constater la résolution graphique est difficile et même impraticable à
pratiquer dès que nous aurons à faire avec un nombre de variables supérieur ou égale à trois. Donc,
pour résoudre des problèmes de programmation linéaire ayant un nombre de variables supérieur
à trois, nous devons faire appel à une méthode de résolution que celle de la résolution par voie
graphique. En traduisant, le problème sous forme d’un simple tableau dit “tableau du simplexe”.
Ceci permettra de résoudre plus facilement des problèmes ayant beaucoup plus de variables et de
contraintes. Cette technique est connue comme la méthode du simplexe. Nous allons sur cette section
illustrer le principe d’une résolution en suivant la méthode du simplexe sur un exemple.

L’entreprise Simco fabrique différents modèles d’appareils électro-ménagers. Le programme


actuel de fabrication est de 500 unités du modèle Elec-100 et 400 unités du modèle Elec-200. Le
vice-président de la fabrication veut déterminer si les contributions aux bénéfices de l’entreprise
peuvent être augmentées en modifiant le programme actuel de fabrication. Il possède l’information
suivante sur le nombre d’heures requises pour fabriquer chaque modèle, ainsi que le temps disponible
à chaque atelier.

Nombre d’heures requises par modèle


Atelier temps disponible
Elec-100 Elec-200
Assemblage 3 4 4’200 heures
Verification 1 3 2’400 heures
Empaquetage 2 2 2’600 heures
Contribution 100/unité 120/unité

D’abord, le problème est traduit sous la forme canonique suivante :

la fonction à maximiser z = 100x1 + 120x2

sous les contraintes 3x1 + 4x2 ≤ 4200


x1 + 3x2 ≤ 2400
2x1 + 2x2 ≤ 2600
x1 ≥ 0, x2 ≥ 0.

Afin de pouvoir utiliser la méthode du simplexe pour résolution, il est nécessaire que les
contraintes du modèle soient exprimées sous forme d’équations linéaires au lieu d’inéquations
que l’on va note forme standard. La mise sous forme standard d’un problème de programmation
linéaire quelconque consiste à transformer les contraintes d’inégalités (mise à part les contraintes
de positivité) en égalité tout en imposant aux variables d’être positives. Pour ce faire, on procède
comme suit : D’abord, on peut facilement transformer une inéquation linéaire ayant un signe : (a)
14 Chapitre 2. Programmation linéaire

≤ en une équation linéaire en additionnant une variable non négative dite variable d’écart ; (b) ≥
en une équation linéaire en retranchant une variable non négative dite variable d’écart. Ensuite, on
remplacer chaque variable xi sans restriction de signe par la différence de deux variables positives :
xi = xi+ − xi avec xi+ ≥ 0 et xi ≥ 0. Si une variable xi est négative, effectuer le changement de variable
xi = −xi .

En revenant à notre exemple sur entreprise Simco, le problème, après l’introduction des variables
d’écart, était le suivant :

la fonction à maximiser z = 100x1 + 200x2 + 0x3 + 0x4 + 0x5

sous les contraintes 3x1 + 4x2 + x3 = 4200


x1 + 3x2 + x4 = 2400
2x1 + 2x2 + x5 = 2600
xi ≥ 0 pour i = 1, ..., 5.

Que l’on peut écrire sous la forme

3x1 + 4x2 + x3 + 0x4 + 0x5 = 4200


x1 + 3x2 + 0x3 + x4 + 0x5 = 2400
2x1 + 2x2 + 0x3 + 0x4 + x5 = 2600
xi ≥ 0 pour i = 1, ..., 5.

 
 3 4 1 0 0 4200 
 
La représentation en tableau sera :  1 3 0 1 0 2400 
 
 2 2 0 0 1 2600 
100 120 0 0 0 0

Dès maintenat, toutes les propriétés que nous connaissons sur les calculs à propos des matrices
peuvent être alors utilisées.
N ÉTAPE no 1 : Matrice du programme de base no 1 :
 
 3 4 1 0 0 4200 
 
 1 3 0 1 0 2400 
 
 2 2 0 0 1 2600 
100 120 0 0 0 0

N ÉTAPE No 2 : Matrice du programme de base no 2 :


Pour accroı̂tre le plus rapidement possible la valeur de la fonction économique, il faut donner
une valeur positive à x2 puisque c’est x2 qui a le plus grand coefficient positif sur la dernière
ligne de la matrice. Quelle est la plus grande valeur que l’on peut attribuer à x2 ? Pour le
déterminer, on prend les rapports des éléments de la colonne de droite sur les éléments de la
colonne des x2 . On trouve alors :
2.3 Résolution de problèmes par méthode du simplexe 15

 
t t

 3 4 1 0 0 4200  4200/4 = 1050


 1 3 0 1 0 2400  2400/3 = 800

 2 2 0 0 1 2600  2600/2 = 1300
100 120 0 0 0 0
Le plus petit de ces rapports est 800 et c’est la plus grande valeur qu’on peut attribuer à x2 .
Nous utiliserons donc l’élément de la deuxième ligne deuxième colonne ; encerclons-le pour
le mettre en évidence. Nous l’appellerons pivot de la 1re étape.
 
3 4 1 0 0 4200
 1
 ® 0 1 0 2400  
 2 2 0 0 1 2600 
100 120 0 0 0 0

Nous devons maintenant annuler les autres éléments de la deuxième colonne. Pour ce faire,
nous effectuons des opérations sur les lignes. En premier lieu, nous allons rendre le pivot
unitaire en divisant les termes de la deuxième ligne par 3 :

 
3 4 1 0 0 4200
1  1/3 ¬ 0 1/3 0 800 
L2 → L2 
 2

3 2 0 0 1 2600 
100 120 0 0 0 0
En deuxième lieu, on soustrait 4 fois la deuxième ligne à la première, 2 fois la deuxième à la
troisième et finalement 120 fois la deuxième a la dernière :
3 − 4/3 4−4 1 − 0 0 − 4/3 0 − 0 4200 − 3200
 
 1/3
 ¬ 0 1/3 0 800 

 2 − 2/3 2−2 0 0 − 2/3 1 − 0 2600 − 1600 
100 − 40 120 − 120 0 − 0 0 − 40 0 − 0 0 − 120 ∗ 800
Donc, nous obtenons apres avoir simplifié :
1 −4/3
 
5/3 0 0 1000
 1/3 1 0 1/3 0 800 
 
 4/3 0 0 −2/3 1 1000 
60 0 0 0 −40 −96000

N ÉTAPE No3 : Matrice du programme de base no 3 :


On constate que l’on peut encore accroı̂tre la valeur à optimiser en introduisant une valeur
pour x1 . A nouveau, effectuons le rapport de la dernière colonne avec celle de x1 :

 
t t

 5/3 0 1 −4/3 0 1000  1000/(5/3) = 600


 1/3 1 0 1/3 0 800  800/(1/3) = 2400

 4/3 0 0 −2/3 1 1000  1000/(4/3) = 750
60 0 0 −40 0 −96000
16 Chapitre 2. Programmation linéaire

Le plus petit rapport étant sur la première ligne, notre pivot sera l’élément de la première ligne,
première colonne. Rendons-le unitaire en le multipliant par 3/5 :
¬ 0 3/5 −4/5 0
 
600
3  1/3 1 0 1/3 0 800 
L1 → L1   4/3 0 0 −2/3 1

5 1000 
60 0 0 −40 0 −96000
Effectuons à nouveau les opérations sur les lignes afin d’annuler les autres éléments de la 1re
colonne :
¬ 0 3/5 −4/5 0
 
600
 0 1 −1/5 3/5 0 600 
 
 0 0 −4/5 2/5 1 200 
0 0 −36 8 0 −132000
Nous n’avons pas encore atteint la solution optimale puisque le coefficient de la variable x4 ,
dans la fonction économique, est positif. Effectuons le rapport de la dernière colonne avec
celle de x4 .

N ÉTAPE No 4 : Matrice du programme de base no 4 :

 
t t

 1 0 3/5 −4/5 0 600  600/(−4/5) = −750


 0 1 −1/5 3/5 0 600 
 600/(3/5) = 1000
 0 0 −4/5 2/5 1 200  200/(2/5) = 500
0 0 −36 8 0 −132000
Le pivot se situe en 3e ligne, 4e colonne. Rendons-le unitaire en le multipliant par 5/2 :
1 0 3/5 −4/5 0
 
600
5  0 1 −1/5 3/5 0 600 
L3 → L3 
 0 0 −2

3 ¬ 5/2 500 
0 0 −36 8 0 −132000
Effectuons à nouveau les opérations sur les lignes afin d’annuler les autres éléments de la 4e
colonne :
1 0 −1 0
 
2 1000
 0 1
 1 0 −3/2 300 

 0 0 −2 ¬ 5/2 500 
0 0 −20 0 −20 −136000
Il n’y a plus de coefficients positifs sur la dernière ligne de la matrice et il n’est donc plus
possible d’accroı̂tre la valeur de la fonction économique.

Retranscrivons le système correspondant :



1x1 + 0x2 − 1x3 + 0x4 + 2x5 = 1000

0x1 + 1x2 − 1x3 + 0x4 + 3/2x5 = 300

0x1 + 0x2 − 2x3 + 1x4 + 5/2x5 = 500

2 3x
2 “
9
1
2x1 ` 3x2 ă 9
2.4 Exercices ´1 1 2 3 4 5 x1 17

´1donc le quintuplet :
La solution optimale est

Constatations: Pour déterminer l’ensemble-solution d’une


(x1 ; x2 ; x3 ; x4 ; x5 ) = (1000; 300; 0;inéquation
500; 0) linéaire à
deux inconnues,
qui correspond on commence
à un bénéfice maximum de par136tracer la droite-frontière,
000 en produisant 1000 unités depuis
Elec-100,
à300
l’aide
unitésd’un couple,
de Elec-200 avec onundétermine
temps mort depar 500substitution
heures à l’atelierde
de quel côté de
vérification.
la frontière sont les couples qui satisfont à l’inéquation. Lorsque l’in-
équation
En ne résoudre
résumé, pour comporte qu’une inégalité
matriciellement un problèmestricte < ou >leslaétapes
de maximisation, frontière
sont :
ne fait pas partie de l’ensemble-solution de l’inéquation.
1) Déterminer la colonne (sauf la dernière) dont l’élément de la dernière ligne a la plus grande
valeur positive. C’est la colonne du pivot.
2) Déterminer la ligne du pivot en faisant le rapport des éléments de la dernière colonne sur les
Exemple 2: Représenter l’ensemble-solution
éléments correspondants de la colonne dude l’inéquation
pivot. x1 `
La ligne du pivot 2xcelle
étant 5:
2 ă donnant le plus
petit rapport non négatif.
2 3) Rendre le pivot unitaire.
4) Annuler tous les termes de la colonne du pivot.
5) Répéter les quatre premières étapes jusqu’à ce que tous les éléments de la dernière ligne soient
non positifs.
6) Les colonnes ne contenant qu’un seul élément non nul sont celles correspondant aux variables
dans le programme ; la valeur de ces variables est donnée dans la dernière colonne, les variables
1 2 3 4 5 1x hors programme étant nulles.
7) La valeur maximale de la fonction économique (plus exactement son opposé) est donnée dans
x1 ` 2x2 ă 5
la derniere ligne, dernière colonne.

2.4 Exercices
Exercise 2.1 Représenter l’ensemble-solution des inéquations proposées :

Exercice 2.1: Représenter l’ensemble-solution des inéquations proposées :


x2 x2
3 3
2 2
1 1

´1 1 2 3 4 5 x1 ´1 1 2 3 4 5 x1
´1 ´1
x1 ` 3x2 ď 9 4x1 ` 6x2 ą 12
1
2 1 2 3 4 x2
3
4
18 Chapitre 2. Programmation linéaire
x1
Exercise 2.2 Representer l’ensemble-solution des équations proposées :
Exercice 2.2: Représenter l’ensemble-solution des équations proposées :

x3 x3
4 4

3 3

2 2

1 1

1 1
2 1 2 3 4 x2 2 1 2 3 4 x2
3 3
4 4
x1 x1
6x1 ` 8x2 ` 12x3 “ 24 2x1 ` 3x2 “ 6

Exercise 2.3 Représenter graphiquement l’ensemble-solution des systèmes d’inéquations linéaires


suivants puis déterminer les coordonnées des points-sommets.
 
x1 + 2x2 ≤ 20
 x1 + 4x2 ≤ 24

2x1 + x2 ≤ 22 3x1 + x2 ≤ 21

 

 
a) x1 + x2 ≤ 12 b) x1 + x2 ≤ 9
 



x1 ≥ 0 


x1 ≥ 0
x2 ≥ 0 x2 ≥ 0
 

 
2x1 + x2 ≤ 6 x + 2x2 ≤ 8
 1

 


x + x ≥ 0
1 2
x1 + x2 ≤ 6
c) d)

x1 ≥ −1 
x1 ≥ 0
 
x2 ≥ −2 x2 ≥ 0
 

Exercise 2.4 Justifier par des raisonnements les affirmations suivantes :


a) L’ensemble solution d’une inéquation linéaire est un ensemble convexe.
b) L’intersection de deux ou de plusieurs ensembles convexes est un ensemble convexe.

Exercise 2.5 La compagnie “Plants géants inc.” produit trois types de fertilisants : du 20-8-8 pour
les pelouses, du 4-8-4 pour les jardins et du 4-4-2 pour usages multiples. Les nombres représentent
les pourcentages respectifs de nitrate, de phosphate et de potasse dans chaque sac de fertilisant. La
compagnie dispose de 6’000 kg de nitrate, de 10’000 kg de phosphate et de 4’000 kg de potasse.
Les profits, sur chaque sac de 100 kg, sont respectivement de 3 DA pour le fertilisant de pelouse,
2.4 Exercices 19

de 8 DA pour le fertilisant de jardin et de 6 DA pour le fertilisant a usages multiples. Construire le


programme de base permettant de maximiser le profit.

Exercise 2.6 Énoncer le programme de base décrivant la situation suivante : Une compagnie prépare
trois assortiments de fruits frais : une boı̂te de luxe, une boı̂te spéciale et une boite ordinaire. La
boı̂te de luxe contient 0,45 kg de dattes, 0,67 kg d’abricots et 0,34 kg de pêches. La boı̂te spéciale
contient 0,56 kg de dattes, 0,34 kg d’abricots et 0,084 kg de pêches. La boı̂te ordinaire contient 0,45
kg de dattes, 0,22 kg d’abricots. La compagnie dispose de 33,6 kg de dattes, 25,2 kg d’abricots et
10,08 kg de pêches. Les profits sur chaque boı̂te de luxe, spéciale et ordinaire sont respectivement de
3 DA, 2 DA et 1.50 DA.

Combien de boı̂tes de chaque sorte faut-il produire pour maximiser le profit ?

Exercise 2.7 En utilisant la méthode graphique, déterminer dans chaque cas, la solution (valeurs
des variables et de la fonction économique).

b) Maximiser
a) Maximiser f (x1 , x2 ) = 4x1 + 4x2
f (x1 , x2 ) = 3x1 + 3x2
 x1 + x2 ≤ 13
x1 + 4x2 ≤ 12


 
5x + 2x ≤ 50
1 2
avec les contraintes : 2x1 + x2 ≤ 10 avec les contraintes :
 4x1 + 5x2 ≤ 60
où x1 ≥ 0 pour i = 1; 2
 

où x ≥ 0 pour i = 1; 2

i

c) Maximiser
d) Minimiser
f (x1 , x2 ) = 3x1 + 4x2
f (x1 , x2 ) = 5x1 + 7x2
x1 + 2x2 ≤ 18

 x1 + 2x2 ≥ 8
x1 + x2 ≤ 10

 

 
2x + x ≥ 8
1 2
avec les contraintes : 3x1 + x2 ≤ 20 avec les contraintes :
 x1 + x2≥6
4x1 + x2 ≤ 26

 


 où x ≥ 0 pour i = 1; 2

 i
où 3x1 ≥ 0 pour i = 1; 2

Exercise 2.8 Dans un gymnase, un groupe d’élèves se charge de la distribution de pains au chocolat
et de croissants lors de la pause de 10 heures. Pour pouvoir satisfaire la demande, ils doivent disposer
au minimum de 108 pains au chocolat et de 96 croissants. Deux boulangers proposent pour le meme
prix :
— l’un le lot A comprenant 12 pains au chocolat et 8 croissants,
— l’autre le lot B composé de 9 pains au chocolat et 12 croissants.
Déterminer le nombre de lots A et le nombre de lots B qui doivent être achetés pour satisfaire la
demande au moindre coût.
20 Chapitre 2. Programmation linéaire

Exercise 2.9 Un atelier de confection fabrique en série deux modèles de chemises. Une chemise
du premier modèle nécessite 1 mètre de tissu, 4 heures de travail et rapporte 24 DA. Une chemise
du deuxième modèle exige 2 mètres de tissu, 2 heures de travail et rapporte 16 DA. Sachant que
l’atelier dispose quotidiennement de 150 mètres de tissu et de 400 heures de travail, et qu’il peut
vendre toute sa fabrication, combien de lots de 10 chemises de chaque modèle faut-il fabriquer pour
obtenir un bénéfice maximal ?

Exercise 2.10 Résoudre a l’aide de la méthode du simplexe les problèmes linéaires suivants :

b) Maximiser
a) Maximiser f (x1 , x2 ) = 5x1 + 8x2
f (x1 , x2 ) = 3x1 + 3x2
 x1 + x2 ≤ 13
x1 + 4x2 ≤ 12


 
5x + 2x ≤ 50
1 2
avec les contraintes : 2x1 + x2 ≤ 10 avec les contraintes :
 4x 1 + 5x2 ≤ 60
où x1 ≥ 0 pour i = 1; 2
 

où x ≥ 0 pour i = 1; 2

i

d) Maximiser
c) Maximiser
f (x1 , x2 ) = 3x1 + 4x2
f (x1 , x2 ) = 4x1 + 4x2
x1 + 2x2 ≤ 18
x1 + x2 ≤ 13 

x1 + x2 ≤ 10

 


5x + 2x ≤ 50 
1 2
avec les contraintes : avec les contraintes : 3x1 + x2 ≤ 20
4x1 + 5x2 ≤ 60 
4x1 + x2 ≤ 26

 

où x ≥ 0 pour i = 1; 2
 

1 
où xi ≥ 0 pour i = 1; 2

e) Maximiser f) Maximiser
f (x1 , x2 , x3 ) = 3x1 + 3x
 2 + 3x3 f (x1 , x2 , x3 ) = 4x1 + 2x
 2 + 3x3

 x1 + x2 + 2x3 ≤ 8 
 x1 + x2 + 2x3 ≤ 8
 
x1 + 2x2 + x3 ≤ 8 x1 + 2x2 + x3 ≤ 8

 

 
avec les contraintes : 2x1 + x2 + x3 ≤ 8 avec les contraintes : 2x1 + x2 + x3 ≤ 8
 
x1 + x2 + x3 ≤ 5 x1 + x2 + x3 ≤ 5

 


 

 
où x1 ≥ 0 pour i = 1; 2; 3 où x1 ≥ 0 pour i = 1; 2; 3
 

Exercise 2.11 Une entreprise fabrique deux types de ceintures A et B. Le type A est de meilleure
qualité que le type B. Le bénéfice net est de 2 DA pour le type A et de 1,50 DA pour le type B. Le
temps de fabrication de A est deux fois plus élevée que le temps de fabrication de B. Si toutes les
ceintures étaient de type B, l’entreprise pourrait en fabriquer 1 000 par jour. L’approvisionnement en
cuir est suffisant pour 800 ceinturespar jour (type A ou B). Enfin, on dispose de 400 boucles de type
A et de 700 boucles de type B chaque jour.
2.4 Exercices 21

Résoudre a l’aide de la méthode du simplexe le problème linéaire en détaillant la solution comme


suit :
1. Formuler ce problème comme étant un programme linéaire,
2. Ecrire sa forme standard,
3. Remplir le premier tableau du simplex
4. Quels sont les nombres respectifs de ceintures des deux types à fabriquer chaque jour de
manière à maximiser le bénéfice total ?

Exercise 2.12 Si dans le problème de fabrication de l’entreprise Simco (page 13), le bénéfice pour
le modèle Elec-100 est de 90 DA au lieu de 100 DA :
a) Quel est alors le programme optimal de fabrication ?
b) Et si l’on propose le programme suivant : x1 =1’000 ; x2 = 300 ; x4 = 500 Que pouvez-vous
alors affirmer ?
3. Théories des graphes

L’histoire de la théorie des graphes a débuté avec les travaux d’Euler au XVIIIème siècle avec
l’étude du problème des ponts de Königsberg : les habitants de Königsberg se demandaient s’il était
possible, en partant d’un quartier quelconque de la ville, de traverser tous les ponts sans passer deux
fois par le même et de revenir à leur point de départ. La Figure 3.1 illustre la ville de Königsberg à
gauche et à droite le graphe qui modélise la situation.

F IGURE 3.1 – Le problème des ponts de Königsberg


24 Chapitre 3. Théories des graphes

La théorie des graphes s’est alors développée dans diverses disciplines telles que la chimie, la
biologie, les sciences sociales. Depuis le début du XXème siècle, elle constitue une branche à part
entière des mathématiques, grâce aux travaux de Konig, Menger, Cayley puis de Berge et d’Erdos.
Nous donnons dans ce chapitre les principales définitions de la théorie des graphes.

3.1 Notions de base


De manière générale, un graphe permet de représenter la structure, les connexions d’un ensemble
complexe en exprimant les relations entre ses éléments : réseau de communication, réseaux routiers,
Internet, interaction de diverses espèces animales, circuits électriques ... Les graphes constituent donc
une méthode de pensée qui permet de modéliser une grande variété de problèmes en se ramenant à
l’étude de sommets et d’arcs.

Pour avoir les idées plus claires, nous allons considérer la situation suivante :

 Exemple 3.1 Une entreprise qui fabrique six sortes de produits chimiques différents (notés P1 ,
P2 , P3 , P4 , P5 , P6 ) doit en assurer le transport par train. Ces produits sont en petite quantité, mais ne
peuvent être tous placés dans le même wagon pour des raisons de sécurité (le contact entre certains
de ces produits peut provoquer des réactions explosives) :

è P1 ne peut pas être transporte avec P2 , P3 , ou P4 .


è P2 ne peut pas être transporté avec P1 , P3 ou P5 .
è P3 ne peut pas être transporté avec P1 , P2 ou P4 .
è P5 ne peut pas être transporté avec P2 ou P6 .


La question qui se pose à ce niveau est : combien de wagons sont-ils nécessaires au transport des
six produits ? En d’autres termes, l’idée ici est de relier par une arête les sommets représentant des
produits incompatibles : le graphe obtenu est appelé graphe d’incompatibilité comme l’illustre la
Figure 3.2.

P1

P2 P6

P3 P5

P4

F IGURE 3.2 –

Par contre la question en termes de propriétés du graphe, se pose maintenant ainsi : combien de
3.1 Notions de base 25

familles de sommets doit-on créer au minimum, si l’on veut que deux sommets liés par une arête
n’appartiennent jamais à la même famille ?

3.1.1 Graphes non-orientés et orientés


Comme nous l’avant déjà mentionner, pour faire face aux problèmes rencontrés dans les actes de
la vie quotidienne, nous aurons besoin dans beaucoup situations à les modéliser comme des graphes
et faire appel aux techniques de la théorie des graphes pour trouver des solutions optimales à ces
problèmes. Cependant, lors de la phase de modélisation et selon la situation rencontrée, nous aurons
recours soit aux graphes non orientés et orientés.

De façon générale, la complexité structurelle des graphes est liée au fait qu’un graphe permet
d’encoder deux informations : l’information représentée par les sommets, ainsi que celle représentée
par les arêtes (arcs). Un graphe G est un couple d’ensembles V (G) = {v1 , v2 , v3 , ...}, et E(G) =
{e1 , e2 , e3 , ...}. Les éléments du premier ensemble sont notés sommets (ils sont aussi appelés points
ou noeuds) et ceux du deuxième ensemble sont notés les arêtes (arcs). Alors nous pouvons définir un
graphe non orienté comme suit :
Définition 3.1.1 — Graphe non orienté. G = (V, E) se compose d’un ensemble de sommets
V et d’un ensemble d’arêtes E ⊆ V ×V reliant deux sommets. De façon équivalente, on dit que
V (G) et E(G) sont des ensembles contenant respectivement les sommets et les arêtes du graphe
G.
Par contre, un graphe est dirigé (orienté), si ses arêtes possèdent un ordre d’orientation entre les
deux sommets de chacune, des arêtes c.-à-d. un sommet initial u et un sommet terminal v, c.-à-d.
(u, v) 6= (v, u).
Définition 3.1.2 — Graphe orienté. Un graphe orienté G = (V, E) se compose d’un ensemble
V dont les éléments sont les sommets du graphe, et d’un ensemble E dont les éléments, les arcs du
graphe, sont des couples d’éléments de V . Un arc (x, y) ∈ E est aussi indifférement noté x −→ y.
Les boucles sont autorisées, mais pas les arcs parallèles.

Graphiquement, les sommets sont généralement représentés par des points, et les arêtes (arcs)
e = (u, v) par une droite (flèche) joignant les deux points u et v. À titre d’exemple, la Figure 3.3
illustre (a) un graphe orienté et (b) un graphe non orienté.

a b a b

c c

e d e d

(a) (b)

F IGURE 3.3 – Exemples de graphes non-orientés et orientés

Cependant, une arête (arc) e = (u, u) dont les extrémités coı̈ncident est appelé une boucle. Un
26 Chapitre 3. Théories des graphes

tel type de graphe ayant une arête reliant un sommet à lui-même est noté un pseudo-graphe. Par
contre, un graphe dont deux sommets sont reliés par plusieurs arêtes est un multigraphe. La Figure
3.4 illustre des exemples d’un pseudo-graphe (le graphe à gauche) et un multigraphe (le graphe à
droite).

v1 v2 v1 v2

v4 v3 v4 v3

F IGURE 3.4 –

Encore, un graphe qui est ni un multigraphe, ni un pseudo graphe est signé comme un graphe
simple. Avant d’en terminer avec cette section, nous mentionnons qu’un graphe est noté étiqueté
G(V, E, Σ, L) en lui associant un ensemble Σ d’étiquettes et une fonction L : V ∪ E −→ Σ qui assigne
les étiquettes et ∈ Σ aux ensembles d’arêtes (graphe pondéré) et de sommets V et E. Où un graphe
G(V, E) est un graphe à étiquetage d’arêtes (sommets) non redondant si et seulement si l’étiquette de
chaque arête (sommet) survient au plus une fois.

Avant d’enfinir avec cette sous-section, nous évoquons la notion de sous graphes qui va nous
servir pour la suite de ce cours. Un sous graphe est un graphe contenu dans un autre graphe.
Formellement on peut donner la définition suivante :
0 0 0
Définition 3.1.3 — Sous graphe. Soit G = (V, E) un graphe. Le graphe G = (V , E ) est un
0 0 0
sous graphe de G, si V ⊆ V et E ⊆ E. Autrement dit, on obtient G en enlevant une ou plusieurs
sommets et/ou arêtes au graphe G.

Alors qu’un sous graphe est noté partiel s’ il admit le même ensemble de sommets que le graphe
qui le contient.
Définition 3.1.4 — Graphe partiel. Soit G = (V, E) un graphe. Le graphe G = (V, E ) est un
graphe partiel de G, si E est inclus dans E. Autrement dit, on obtient G en enlevant une ou
plusieurs arêtes au graphe G.

Par contre, un sous-graphe induit est un sous-graphe défini par un sous-ensemble de sommets.
0
Définition 3.1.5 — Sous-graphe induit. Soit G = (V, E) un graphe. Le graphe G = (V , E ) est
un graphe sous-graphe induit de G, si V est inclus dans V et pour tout couple (x, y) de sommets
0
de V , x est connecté à y dans G si et seulement si x est connecté à y dans G.

3.1.2 Voisinages et degrés


La notion de voisinage est très importante pour ce qui concerne les graphes. La définition de ce
voisinage dépendra de l’orientation ou non de graphes. Pour le cas de graphe non orienté, on définit
un voisinage d’un sommet donné du graphe par l’ensemble des sommets adjacents à ce dernier au
niveau du graphe. C’est à dire la liste des sommets que l’on peut directement accéder depuis le
3.1 Notions de base 27

sommet courant. La Figure 3.5 illustre un exemple pour qui le voisinage est désigné ci-contre.

v1 v2 NG (v1 ) = {v2 , v3 }
NG (v2 ) = {v1 , v4 }
NG (v3 ) = {v1 , v4 }
v4 v3 NG (v4 ) = {v2 , v3 }
G
F IGURE 3.5 –

Cependant, pour le cas où le graphe est orienté on définit deux concepts : les prédécesseurs et les
successeurs. Les prédécesseurs d’un sommet sont la liste des sommets depuis lesquels on peut arriver
au sommet courant. Les successeurs du sommet sont les sommets auxquels on peut accéder à partir
du sommet courant. La Figure 3.6 illustre un exemple pour qui le voisinage est désigné ci-contre.

v1 v2 PredG (v1 ) = 0,
/ SuccG (v1 ) = {v2 , v3 }
PredG (v2 ) = {v1 }, SuccG (v2 ) = {v4 }
PredG (v3 ) = {v1 }, SuccG (v3 ) = {v4 }
v4 v3 PredG (v4 ) = {v2 , v3 }, SuccG (v4 ) = 0/
G
F IGURE 3.6 –

Dans ce même contexte, la taille de ces ensembles de voisinage (prédécesseurs, successeurs)


est une notion significative connue comme étant le degré de sommet. Par définition le degré d’un
sommet est le nombre d’arêtes qui entrent et qui sortent du sommet en cours. Cependant, pour plus
de précision, dans le cas d’un graphe non orienté et comme l’illustre la Figure 3.7, le degré de chacun
des sommets correspond tout naturellement au cardinal de son voisinage. En prenant soin à ce qu’une
boucle sur un sommet doit être compté, double.

v1 v2 dG (v1 ) = 4
dG (v2 ) = 2
dG (v3 ) = 4
v4 v3 dG (v4 ) = 2

G
F IGURE 3.7 –

Pour un graphe orienté, on définit le degré comme étant la somme de deux demi-degrés, le
demi-degré extérieur noter d + et le demi-degré intérieur noter d − . Le demi-degré intérieur est le
cardinal des prédécesseurs du sommet. Par analogie, le demi-degré extérieur est le cardinal des
28 Chapitre 3. Théories des graphes

successeurs du sommet. La Figure 3.8 illustre un graphe orienté pour qui les degrés de sommets sont
désignés ci-contre.

v1 v2 d − G (v1 ) = 0, d + G (v1 ) = 2
d − G (v2 ) = 2, d + G (v2 ) = 2
d − G (v3 ) = 1, d + G (v3 ) = 1
v4 v3 d − G (v4 ) = 2, d + G (v4 ) = 0
G
F IGURE 3.8 –

Théorème 3.1.1 La somme des degrés des sommets d’un graphe est égale à deux fois le nombre
d’arêtes : ∑vi ∈G(V ) d(vi ) = 2 ∗ |G(E)|.

Démonstration. En effet, chaque paire {vi , v j } de G(V ) est comptée deux fois, une fois pour d(vi )
et une seconde fois pour d(v j ). Dans le cas d’une boucle en vi , celle-ci contribue pour 2 dans le
degré du sommet vi . 

En adaptant ce dernier théorème pour le cas d’un graphe orienté, on a :

∑vi ∈G(V ) d(vi ) = d + (vi ) + d − (vi ) = 2 ∗ |G(E)|.

3.1.3 Représentation d’un graphe


Bien que le dessin soit un moyen pratique pour définir un graphe, il n’est pas adapté au stockage
des graphes dans la mémoire d’un ordinateur pour les utiliser. Pour pouvoir manipuler ces graphes au
niveau de nos algorithmes, généralement ils sont représentés structurellement comme des matrices
ou des listes chaı̂nées. Au niveau de cette section, nous allons présenter deux des représentations
algorithmiques d’un graphe qui sont la matrice d’adjacences et les listes d’adjacences.
Matrice d’adjacences
En algorithmique on peut représenter un graphe par une matrice d’adjacences. Cette matrice de
cardinalité (m × m) est un tableau de m lignes et m colonnes. AD[i, j] désigne l’intersection de la
ligne i et de la colonne j. Au niveau cette matrice d’adjacences, les lignes et les colonnes représentent
les sommets du graphe. Un “ind” à la position AD[i, j] signifie que le sommet i est adjacent au
sommet j et le nombre d’arêtes entre les deux est ind.

Formellement, on peut définir une matrice d’adjacence comme suit :


Définition 3.1.6 — Matrice d’adjacence (graphe simple). Soit G(V, E) un graphe simple
non orienté : avec V = {v1 , v2 , ..., vn }. La matrice d’adjacence du graphe G est la matrice AD(G)
dont les coefficients sont définis par :
(
1, s’il existe une arête entre vi etv j .
ai, j =
0, autrement.
3.1 Notions de base 29

Définition 3.1.7 — Matrice d’adjacence (multigraphe). Dans le cas d’un multigraphe ou


d’un pseudographe, les coefficients sont définis par :
(
n, s’il existe n arêtes entre vi et v j .
ai, j =
0, autrement.

 Exemple 3.2 1- Déterminer la matrice d’adjacence du graphe représenté ci-dessus (Figure


3.9) :

a b

c d

F IGURE 3.9 –

— On ordonne les sommets dans l’ordre a, b, c et d. La matrice est donc :


 
0 1 1 1
1 0 1 0
 
1 1 0 0
1 0 0 0
2- Déterminer la matrice d’adjacence du pseudographe représenté ci-dessus (Figure 3.10) :

a b

d c

F IGURE 3.10 –

— On ordonne les sommets dans l’ordre a, b, c et d. La matrice est donc :


 
0 3 0 2
3 0 0 1
 
0 0 1 2
2 1 2 0

30 Chapitre 3. Théories des graphes

Pour le cas des graphes orientés, nous procédons de la même manière sauf que nous devons
faire attention à l’orientation. Par conséquent, on mit un “ind” à la position AD[i, j] que lorsqu’on
veut indiquer que le sommet i est adjacent au sommet j avec une orientation de i vers j (i → j) et
le nombre d’arcs est ind. Formellement, on peut définir la matrice d’adjacence en question comme
suit :
Définition 3.1.8 Soit G(V, E) un graphe orienté : avec V = {v1 , v2 , ..., vn }. La matrice d’adjacence
du graphe G est la matrice AD(G) dont les coefficients sont définis par :
(
n, s’il existe n arcs de vi vers v j .
ai, j =
0, autrement.

 Exemple 3.3 1- Déterminer la matrice d’adjacence du graphe représenté ci-dessus (Figure


3.11) :

x2 x4

x1 x3

F IGURE 3.11 –

— On ordonne les sommets dans l’ordre x1 , x2 , x3 et x4 . La matrice est donc :


 
0 0 0 1
1 1 1 0
 
1 1 0 0
0 0 0 0


Enfin, cette matrice a plusieurs caractéristiques :


1. Elle est carrée : il y a autant de lignes que de colonnes.
2. Un “1” sur la diagonale indiquerait une boucle.
3. Elle est symétrique : ai, j =a j,i . On peut dire que la diagonale est un axe de symétrie.
4. Une fois que l’on fixe l’ordre des sommets, il existe une matrice d’adjacences unique pour
chaque graphe. Celle-ci n’est la matrice d’adjacences d’aucun autre graphe.

Listes d’adjacences
On peut aussi représenter un graphe simple en donnant pour chacun de ses sommets la liste
des sommets auxquels il est adjacent. Ce sont les listes d’adjacences. Autrement dit, pour chaque
sommet, on stocke la liste des sommets adjacents à celui-ci. Afin d’avoir une idée bien claire en ce
qui concerne ces listes d’adjacences l’exemple sur la Figure 3.12 illustre un graphe non orienté avec
la liste d’adjacences qui lui correspond.
3.1 Notions de base 31

v1 v5 v1 : {v3 , v4 , v5 }
v2 : {v3 }
v4
v3 : {v1 , v2 , v4 , v5 }
v3
v4 : {v1 , v3 , v5 }
v2 v5 : {v1 , v3 , v4 }

F IGURE 3.12 –

3.1.4 Chemins et cycles


Intuitivement, une chaı̂ne(chemin) de vi à v j permet de joindre v j à partir de vi en parcourant
sans saut différentes arêtes de G. Les sommets vi et v j sont les extrémités de la chaı̂ne C. Pour alléger
les notations, on pourra écrire simplement :C = (vi , e1 , vx , e2 , vy , ..., vz , ek , v j ). Le nombre k est la
longueur de la chaı̂ne C.
Autrement dit, une chaı̂ne dans G, est une suite ayant pour éléments alternativement des sommets
et des arêtes, commençant et se terminant par un sommet, et telle que chaque arête est encadrée par
ses extrémités. On dira que la chaı̂ne relie le premier sommet de la suite au dernier sommet. En plus,
on dira que la chaı̂ne a pour longueur le nombre d’arêtes k de la chaine.
Le graphe sur le Figure 3.13 contient entre autres les chaı̂nes (v1 , e1 , v2 , e2 , v3 , e5 , v5 ) et (v4 , e4 , v3 , e2 , v2 , e1 , v1 ).

v1
e1
v2
e3
e2 v5
e5
v3
e4
v4

F IGURE 3.13 –

On remarque qu’une chaı̂ne ne change pas en inversant l’ordre des éléments pour le cas de ce
graphe non orienté. Ainsi, les chaı̂nes (v1 , e3 , v3 , e4 , v4 ) et (v4 , e4 , v3 , e3 , v1 ) sont identiques. Alors à
partir de cette observation, on peut dire que pour le cas non orienté, il est clair qu’une chaı̂ne de vi à
v j induit une chaı̂ne de v j à vi , ce qui n’est pas le cas pour les graphes orienté.

Une chaı̂ne est dite fermée si ses deux extrémités coı̈ncident (c.-à-d., vi = v j ). Lorsque c’est
le cas, tout sommet de la chaı̂ne peut être considéré comme son extrémité. Cette chaı̂ne fermée
est connue comme cycle ; en fait un cycle n’a “ni queue ni tête”, la numérotation est une simple
32 Chapitre 3. Théories des graphes

commodité. La longueur d’un cycle est le nombre d’arêtes qui le composent ; où une boucle est un
cycle de longueur 1. Dans le graphe précédent, la chaı̂ne (v1 , e1 , v2 , e2 , v3 , e3 , v1 ) est un cycle.

3.1.5 Connexité
La définition de la connexité diffère d’un graphe non orienté à celle d’un graphe orienté. Nous
allons nous concentrer d’abord au cas non orienté.
Définition 3.1.9 — Connexité (graphe non orienté). Un graphe non orienté est connexe s’il
y a une chaı̂ne entre n’importe quelle paire de sommets distincts du graphe.

 Exemple 3.4 Soit les deux graphes sur le Figure 3.14 :


Le graphe de gauche est connexe puisqu’il existe une chaı̂ne entre n’importe quelle paire de
sommets distincts. Le graphe de droite n’est pas connexe ; par exemple, il n’y a pas de chaı̂ne entre
les sommets a et d. 

a b a b

c c

f d e

g e f e

F IGURE 3.14 –

Cependant, un graphe qui n’est pas connexe est l’union de deux ou de plusieurs sous-graphes
connexes, chaque paire de ceux-ci n’ayant pas de sommet en commun. Les sous-graphes connexes
disjoints sont les composantes connexes du graphe.
 Exemple 3.5 Dans l’exemple précédent (i.e., Figure 3.14), le graphe de droite contient deux
composantes connexes : la première est formée des sommets a, b et c et la deuxième est formée des
sommets d, e et f. 

Pour le cas des graphes orientés, un graphe est dit connexe si son graphe non orienté associe est
bien connexe. Pour un graphe orienté connexe, on s’intéresse est-ce que ce dernier est fortement ou
faiblement connexe. Pour avoir les idées plus claires, on considère la définition suivante :
Définition 3.1.10 — Connexité (graphe orienté). Un graphe orienté est fortement connexe
s’il existe un chemin du sommet a au sommet b et du sommet b au sommet a, quels que sont les
sommets représentés par a et b dans le graphe. Un graphe orienté est faiblement connexe s’il y
a une chaı̂ne entre n’importe quelle paire de sommets dans le graphe si l’on ne considère plus
l’orientation des arcs.
À titre d’exemple soient les deux graphes présentés sur la Figure 3.15 :

Le graphe non orienté associe au graphe orienté de droite est bien connexe. Donc on peut dire
que notre graphe est faiblement connexe. Encore on peut déduire qu’il est fortement connexe parce
3.2 Quelques graphes remarquables 33

a b a b

c c

e d e d

F IGURE 3.15 –

qu’il existe un chemin entre n’importe quelle paire de sommets dans ce graphe orienté.

Pour le graphe de gauche, nous pouvons vérifier qu’il existe une chaı̂ne entre n’importe quelle
paire de sommets du graphe si l’on ne considère pas l’orientation. Il est donc connexe. Cependant, il
n’est pas fortement connexe, car par exemple, il n’existe pas de chemin orienté de a vers b. Donc, il
est faiblement connexe.

3.2 Quelques graphes remarquables


Dans la grande flore des graphes, nous étudions au niveau de cette section quelques graphes
particuliers parmi eux.

D’abord, nous commençons par l’un des cas les plus remarquables qui ce lui de graphes complets.
Ces derniers peuvent être définis comme suit :
Définition 3.2.1 — graphe complet. Un graphe G(V, E) est complet si chaque sommet du
graphe est relié directement à tous les autres sommets.

Un graphe complet est noté par Ki où le i désignera le nombre de sommets. La Figure 3.16
illustre des exemples de graphes complets ayant de 1 à 5 sommet.

K1 K2 K3 K4 K5

F IGURE 3.16 – Exemple de graphes complets

Un autre cas particulier très intéressant est bien le cas de graphes bipartis. Ces derniers peuvent
être définis comme suit :
34 Chapitre 3. Théories des graphes

Définition 3.2.2 — graphe biparti. Un graphe est biparti si ses sommets peuvent être divisés
en deux ensembles X et Y , de sorte que toutes les arêtes du graphe relient un sommet dans X à un
sommet dans Y .

v1 v3 v5

v2 v4

F IGURE 3.17 –

La Figure 3.17 illustre un exemple d’un graphe biparti, où on a X = {v1 , v3 , v5 } et Y = {v2 , v4 },
ou vice versa).

Comme nous l’avons vu pour le cas des graphes complets simples, ceux bipartis complets aussi
serons noté par un Ki, j où i et j désigneront la taille de la partie X et de Y respectivement. La Figure
3.18 illustre deux exemples de graphes bipartis complets.

v1 v3 v5 v1 v3 v5 v7

v2 v4 v2 v4 v6

K2,3 K3,4

F IGURE 3.18 –

Maintenant nous passons à un cas très important qu’on le rencontrera souvent lors de notre vie
quotidienne. Ce type de graphes sont des graphes sans cycles connus comme arbres, et vu leurs
importances, nous allons leurs consacrer en entier la section suivante.

3.3 Arbre et arborescence


Comme nous l’avons déjà annoncé, cette présente section illustre un type particulier de graphe
que l’on appelle arbres. Ces arbres pouvons être définis comme suit :
Définition 3.3.1 — arbre. Un arbre est défini comme un graphe connexe et sans cycles.

En d’autres termes, les arbres sont les graphes acycliques qui ont suffisamment d’arêtes pour
rester connexes, ou encore, les graphes connexes qui ont suffisamment peu d’arêtes pour rester
acycliques. Le théorème suivant précise ces considérations :

Théorème 3.3.1 Les affirmations suivantes sont equivalentes pour tout arbre A a n sommets.
1. A est sans cycle et connexe,
3.3 Arbre et arborescence 35

2. A est connexe et la suppression d’une arête quelconque le déconnecte,


3. A est sans cycle et comporte n − 1 aretes,
4. A est connexe et comporte n − 1 aretes,
5. chaque paire u, v de sommets distincts est reliée par une seule chaı̂ne simple (et le graphe
est sans boucle).
La Figure 3.19 illustre un ensemble de graphes, où les deux derniers (G3 , et G4 ) sont bien des
arbres alors que les deux premiers ne le sont pas.

G1 G2 G3 G4

F IGURE 3.19 –

Pour le cas de premier graphe G1 il claire que ce n’est pas un arbre vu qu’il possède un cycle,
par contre le G2 il ne possède pas de cycle, mais il n’est pas un arbre vu qu’il n’est pas connexe. Ce
dernier cas est bien connu comme forêt d’arbres vu qu’il est composé de plusieurs composantes
connexes qui sont des arbres. Une forêt d’arbres peut être définie comme suit :
Définition 3.3.2 — forêt. Une forêt est un graphe dont chaque composante connexe est un arbre.

Une autre notion très importante liée aux arbres est celle de l’arbre couvrant. Il consiste du sous
graphe partiel connexe sans cycle de taille maximale (arbre maximal) qu’on peut définir comme
suit :
Définition 3.3.3 — arbre couvrant. Un arbre couvrant (aussi appelé arbre maximal) est un
graphe partiel qui est aussi un arbre.

La Figure 3.20 illustre un exemple d’un graphe non orienté G1 ainsi que son arbre couvrant AC .

Pour le cas de graphes ayant les arêtes étiquetées, et comme tout graphe G non orienté et connexe
admet un arbre couvrant, l’ensemble des poids (valeurs) de ses arbres couvrants est une partie non
vide de N. Il admet donc un element minimum et un maximum. Les arbres couvrants de G dont le
poids realise ce minimum (maximum) sont appeles arbres couvrants minimaux (maximaux) de G.
La Figure 3.21 illustre un graphe non orienté connexe G1 ainsi que ses arbres couvrants minimaux
ACmin et maximal ACmax .

La recherche d’un arbre couvrant minimal (maximal) d’un graphe non orienté connexe et étiqueté
est un problème classique, pour lequel existent plusieurs algorithmes. Nous allons en évoquer les
plus célèbres parmi eux qui sont l’algorithme de Kruskal (Algorithme 1) et l’algorithme de Prim
(Algorithme 2).

Pour avoir les idées plus claires, au niveau de la Figure 3.22, nous donnons un exemple du
36 Chapitre 3. Théories des graphes

v1 v1
v2 v2
v5 v5

v3 v3

v4 v4

G1 AC

F IGURE 3.20 –

v1 v1 v1
6 6
v2 v2 v2
5 5 5
v5 v5 v5
4 4
v3 3 v3 3 v3 3
2 2
1 1
v4 v4 v4

G1 ACmin ACmax

F IGURE 3.21 –

Algorithm 1 | Algorithme de Kruskal


Données : Un graphe pondéré connexe G.
Résultat : Un arbre couvrant minimal (maximal) de G.

1: F = 0/ ;
2: trier les arêtes de G par ordre croissant (décroissant) de pondération ;
3: for chaque arête a, par ordre de pondération croissante (décroissante) do
4: if F ∪ a est acyclique then
5: F = F ∪a;
6: end if
7: end for
8: return F ;

dérobement de l’algorithme de Kruskal sur le graphe connexe étiqueté (pondéré) G1 afin de récupérer
l’arbre couvrant de poids minimal associe. Les instantanés Ai où i ∈ [0..5] illustre le niveau de
construction à chacune des itérations de l’algorithme. D’abord, on commence par un graphe A0 ayant
tous les sommets de G1 sauf qu’ils sont tous isolés les uns des autres. Ensuite, comme l’instruction
deux de l’algorithme trier les arêtes de G1 selon un ordre croissant des valeurs (poids), on commence
3.3 Arbre et arborescence 37

les assertions des arêtes. Les graphes A1 ..A4 illustrent les instantanées correspondantes à l’ajout des
arêtes 1, 1, 2 et 2. Les arêtes de poids 3 et 5 n’ont pas pu être placées, car elles auraient formé un
cycle. L’algorithme s’est arrêté dès que cinq arêtes ont été placées. L’instantanée A5 illustre l’arbre
couvrant de poids minimal associe au graphe G1 . Toute arête supplémentaire aurait créé un cycle.

5 5
v1 v2 v3 v1 v2 v3 v1 v2 v3

3 2 4 2 1 1

v4 v5 v6 v4 v5 v6 v4 v5 v6
1 3
G1 A0 A1

v1 v2 v3 v1 v2 v3 v1 v2 v3

1 2 1 2 2 1

v4 v5 v6 v4 v5 v6 v4 v5 v6
1 1 1
A2 A3 A4

v1 v2 v3

2 4 2 1

v4 v5 v6
1
A5

F IGURE 3.22 –

Prim est un autre algorithme célèbre pour la découverte d’un arbre couvrant de poids minimum
au sein d’un graphe connexe et pondéré non orienté. Cet algorithme a été développé en 1930 par le
mathématicien tchèque Vojtech Jarnik puis a été redécouvert et republié par Robert C. Prim et Edsger
W. Dijkstra en 1959. L’algorithme consiste à faire croı̂tre un arbre depuis un sommet. On commence
avec un seul sommet puis à chaque étape, on ajoute une arête de poids minimum ayant exactement
une extrémité dans l’arbre en cours de construction. En effet, si ses deux extrémités appartenaient
déjà à l’arbre, l’ajout de cette arête créerait un deuxième chemin entre les deux sommets dans l’arbre
38 Chapitre 3. Théories des graphes

en cours de construction et le résultat contiendrait un cycle.

Afin de construire à la fin l’arbre couvrant de poids minimum, l’algorithme de Prim (Algorithme
2) suit le processus suivant : Il commence par un arbre couvrant ACmin équivalant au plus petit (poids
de l’arête) sous graphe connexe de taille deux , l’idée consiste réellement à gérer deux ensembles
de sommets le premier contiendra les sommets déjà ajoutés à l’arbre V (ACmin ) et le second ceux qui
n’ont pas encore été traités V (ACmin ). Donc, par répétition un sommet de l’ensemble deux est basculé
vers l’ensemble un jusqu’à ce que tous les sommets seront affectés au premier ensemble V (ACmin ). À
chaque itération toutes les arêtes connectent (noté cut) deux sommets des deux ensembles V (ACmin )
et V (ACmin ) sont récupérées, ensuite l’arête de taille minimale sera sélectionnée et le sommet de son
extrémité qu’est dans V (ACmin ) sera déplacé vers l’ensemble V (ACmin ). Ce procédé sera répété jusqu’à
ce que tous les sommets seront déplacés de V (ACmin ) vers V (ACmin ).

Algorithm 2 | Algorithme de Prim


Données : Un graphe pondéré connexe non orienté G.
Résultat : Un arbre couvrant minimal (maximal) de ACmin .

1: ACmin = sous graphe g t.q |E(g)| = 1 et e ∈ E(g) d’un poids minimal ;


2: V (ACmin ) = V (G) \V (ACmin ) ;
3: cut = récupérer toutes les arête de V (ACmin ) vers V (ACmin ) ;
4: while V (ACmin ) 6= 0/ do
5: cut = récupérer toutes les arête de V (ACmin ) vers V (ACmin ) ;
6: trier les arêtes du cut par ordre croissant (décroissant) de pondération ;
7: récupérer la plus petite arête e ∈ cut, ainsi que ces deux extrémités V (e) ;
8: V (ACmin ) = V (ACmin ) ∪V (e) ;
9: E(ACmin ) = E(ACmin ) ∪ e ;
10: V (ACmin ) = V (ACmin ) \V (e) ;
11: end while
12: return ACmin ;

En appliquant l’algorithme de Prim sur le Graphe G1 de la Figure 3.22, la Figure 3.23 illustre
un exemple du déroulement de cet algorithme. Afin de récupérer l’arbre couvrant de poids mi-
nimal associe. Les instances Ai où i ∈ [0..4] illustre le niveau de construction à chacune des
itérations de l’algorithme. D’abord, on commence par un graphe A0 ayant deux sommets de G1
avec V (ACmin ) = {v3 , v6 } et V (ACmin ) = {v1 , v2 , v4 , v5 }. Pour le A1 le cut a ce niveau est composé de
{(v2 , 5, v3 ), (v3 , 2, v5 ), (v5 , 3, v6 )}, par conséquent la mise à jour des deux ensemble sera comme suit
V (ACmin ) = {v3 , v6 , v5 } et V (ACmin ) = {v1 , v2 , v4 }. Ensuite, au niveau du A2 , V (ACmin ) = {v3 , v6 , v5 , v4 }
et V (ACmin ) = {v1 , v2 }. Encore par rapport au A3 , V (ACmin ) = {v3 , v6 , v5 , v4 , v1 } et V (ACmin ) = {v2 }.
Enfin, V (ACmin ) = {v3 , v6 , v5 , v4 , v1 , v2 } et V (ACmin ) = 0.
/ L’arbre couvrant de poids minimal ACmin
associe au graphe G1 est celui obtenu à l’itération A4 .
3.3 Arbre et arborescence 39

5 5
v1 v2 v3 v3 v3

3 2 4 2 1 1 2 1

v4 v5 v6 v6 v5 v6
1 3
G1 A0 A1

v3 v1 v3 v1 v2 v3

2 1 2 2 1 2 4 2 1

v4 v5 v6 v4 v5 v6 v4 v5 v6
1 1 1
A2 A3 A4

F IGURE 3.23 –

Comme nous venons de le constater jusqu’à maintenant on n’a pas parlé d’orientation au niveau
des arbres. À ce niveau si on tente de transcrire une définition des arbres dans le cadre orienté par :
“graphes orientés fortement connexes et sans circuit” est vouee à l’échec puisque de tels graphes
n’existent pas. Par conséquent, pour définir une telle notion d’arbre orienté, on doit plutôt parler
d’arborescence. Cette notion d’arborescence peut être définie comme suit :
Définition 3.3.4 — Arborescence. Une arborescence est un couple (G, r) constitué d’un graphe
orienté et d’un sommet de ce graphe, tel que pour tout x ∈ V (G), il existe un unique chemin de r
à x.

En d’autres termes, si notre arbre possède un sommet particulier r qui peut nous mener vers
tous les autres sommets, donc cet arbre est qualifié d’arborescence. Le théorème suivant donne deux
caractérisations des arborescences :
Théorème 3.3.2 Soient G un graphe orienté et r un sommet de G. Les affirmations suivantes
sont equivalentes :
1. G est une arborescence de racine r,
2. G est connexe et d − (r) = 0 et ∀ x 6= r, d − (x) = 1,
3. G est sans circuit et d − (r) = 0 et ∀x 6= r, d − (x) = 1.

À titre d’exemple la Figure 3.24 illustre deux graphes orientés G1 et G2 , on constate que le
premier est bien un cas d’arborescence où sa racine est r = c. Par contre le second il ne l’est pas
parce qu’ aucun de ses sommets ne peut être designer comme racine r et qui en commençant à partir
de lui on peut atteindre tous les autres.
40 Chapitre 3. Théories des graphes

a b

e c f g a d e

b c

G1 G2

F IGURE 3.24 –

Le vocabulaire relatif aux arborescences empreintes autant à la généalogie : Nous avons vu


qu’à l’exception de la racine, qui est de degré entrant nul, tout noeud d’une arborescence est de
degré entrant 1. Pour chaque x 6= r, l’unique prédécesseur de x dans G est appelé père de x. On le
note père(x). Un noeud peut être de degré sortant quelconque. Les noeuds de degré sortant nul sont
appelés feuilles de l’arbre ; les autres sont dits noeuds internes. Les successeurs d’un noeud interne
sont appelés ses fils. Par définition, il existe un unique chemin entre r et un noeud quelconque x.
Les noeuds qui constituent ce chemin sont les ancêtres de x. Les ancêtres de x sont exactement les
noeuds u pour lesquels il existe un chemin p : u x dans G. À l’inverse, les sommets v accessibles
à partir de x, c’est-à-dire pour lesquels il existe un chemin q : x v, sont appelés descendants de x.

3.4 Cycles eulériens et hamiltoniens


Les graphes eulériens et hamiltoniens sont des graphes particuliers très importants. Généralement,
on peut dire qu’un graphe est eulérien (ou semi-eulérien) s’il est possible de dessiner le graphe sans
lever le crayon et sans passer deux fois sur la même arête. Cependant, on peut dire qu’un graphe est
hamiltonien (ou semi-hamiltonien) s’il est possible de visiter tous ces sommets sans passer deux fois
sur le même sommet.

Techniquement, un graphe est dit eulérien s’il possède un cycle eulérien. Un graphe est dit
hamiltonien s’il possède un cycle hamiltonien.
Définition 3.4.1 Un chemin eulérien est un chemin dans le graphe qui passe par toutes les arêtes
juste une seule fois. Si ce chemin est fermé, on parlera de cycle eulérien.

Définition 3.4.2 Un chemin hamiltonien est un chemin dans le graphe qui passe par tous les
sommets une et une seule fois. Si ce chemin est fermé (c.-à-d., il existe une arête reliant le sommet
de départ au sommet d’arrivée), on parlera de cycle hamiltonien.

Il existe un critère de base qui permet de déterminer si un multigraphe contient un cycle eulérien.
Ce critère peut être donné comme suit : Si tous les sommets d’un graphe sont de degré pair, alors ce
graphe contient un cycle eulérien. Par conséquent, on peut donner le théorème suivant :
3.5 Coloration 41

Théorème 3.4.1 Un multigraphe connexe admet un cycle eulérien si et seulement si chacun de


ses sommets est de degré pair.

Par contre, un multigraphe connexe admet un chemin eulérien et non un cycle eulérien si et
seulement s’il a exactement deux sommets de degré impair. Alors le graphe est semi-eulérien.

Contrairement au cas eulérien, il n’existe pas de critères pour démontrer l’existence de chemins
ou de cycles hamiltoniens, on possède uniquement une implication pour une classe donnée de
graphes simples. Alors un graphe simple G admet un cycle est hamiltonien si |G(V )| ≥ 3 sommets
et pour chacun des sommets d(v) ≥ n/2.

a b a b a g f e

e e

d c d c b c d

G1 G2 G3

 Exemple 3.6 Soit les trois graphes sur le Figure 3.4, le tableau ci-dessus présente les ca-
ractéristiques de ces derniers. 

Chemin Chemin Graphe Graphe


eulérien hamiltonien eulérien hamiltonien
G1 oui oui oui non
G2 non oui non oui
G3 oui oui non oui

3.5 Coloration
La coloration d’un graphe (c.-à-d. coloration des sommets) consiste généralement à affecter à
tous les sommets de ce graphe une couleur de telle sorte que deux sommets adjacents n’aient jamais
la même couleur. Le nombre minimum de couleurs nécessaires à la coloration d’un graphe G est
noté le nombre chromatique χ(G). Ce nombre est le plus petit nombre de couleurs permettant de
colorier tous les sommets du graphe sans que deux sommets adjacents soient de la même couleur.
On peut aussi voir une coloration avec k couleurs comme une partition de l’ensemble des sommets
en k stables. Un sous-ensemble S d’un graphe non orienté G est stable s’il ne comprend que des
sommets non adjacents deux à deux.

Comme il n’existe pas de formule donnant le nombre chromatique d’un graphe. Le plus souvent
on déterminera ce nombre par encadrement (il est plus petit que... et plus grand que...), et en exhibant
une coloration utilisant un nombre de couleurs egal au minorant (borne inferieure de l’encadrement).
42 Chapitre 3. Théories des graphes

Par rapport à la majoration, si S1 ,..., Sk est une partition stable d’un graphe simple G alors
χ(G) ≤ k. Encore, χ(G) ≤ n + 1 − |max(Si )| où max(Si ) est le plus grand stable au sein de G. Enfin,
χ(G) ≤ r + 1, où r est le plus grand degré des sommets de G.

Par rapport à la minoration, le nombre chromatique d’un graphe est supérieur ou égal à celui
de chacun de ses sous-graphes. Encore, le nombre chromatique du graphe sera supérieur ou égal à
l’ordre de sa plus grande clique que l’on note ω(G), alors ω(G) ≤ χ(G).

v1 v6

v2 v7 v5

v3 v4

F IGURE 3.25 –

 Exemple 3.7 Soit le graphe illustré au niveau de le Figure 3.25, ce graphe G contient plusieurs
cliques d’ordre 3, donc χ(G) ≥ 3.
La partition des sommets de G en sous-ensembles stables : S1 = {v1 , v4 }, S2 = {v2 , v6 , v7 }, S3 =
{v3 , v5 }. Donc χ(G) ≤ 3, car pour chacun des stables correspondra une couleur. On en déduit que
χ(G) = 3. 

3.5.1 Algorithme de coloration de Welch et Powell


D’abord il faut noter que cet algorithme couramment utilise permet d’obtenir une assez bonne
coloration d’un graphe, c’est-à-dire une coloration n’utilisant pas un trop grand nombre de couleurs.
Cependant, il n’assure pas que le nombre de couleurs utilisees soit minimum (et donc egal au nombre
chromatique du graphe). Cet algorithme suit le processus suivant :

Étape 1 : Classer les sommets du graphe dans l’ordre décroissant de leur degré, et attribuer à chacun des
sommets son numéro d’ordre dans la liste obtenue. On obtient une liste ordonnée de sommets
X1 , X2 , ..Xn tel que : d(X1 ) ≥ d(X2 )... ≥ d(Xn ).

Étape 2 : En parcourant la liste dans l’ordre, attribuer une couleur non encore utilisée au premier sommet
non encore coloré, et attribuer cette même couleur à chaque sommet non encore coloré et non
adjacent à un sommet de cette couleur.

Étape 3 : S’il reste des sommets non colorés dans le graphe, revenir à l’étape 2. Sinon, la coloration est
terminée.
3.6 Plus courts chemins 43

a b

c d

e f

F IGURE 3.26 –

Exemple 3.8 En appliquant l’algorithme de Welch et Powell au graphe G de la Figure 3.26, nous
obtenons les résultats suivants :
— Liste ordonnée :{b, c, d, e, a, f }
1ère couleur : pour les sommets b et e.

— Liste ordonnée :{c, d, a, f }


2ème couleur : pour les sommets c et f .

— Liste ordonnée :{d, a}


3ème couleur : pour les sommets d et a.


En plus de cette coloration des sommets, la coloration des arêtes d’un graphe consiste à affecter
à toutes les arêtes de ce graphe une couleur de telle sorte que deux arêtes adjacentes ne portent pas la
même couleur. L’indice chromatique χ du graphe G est le plus petit entier k pour lequel il existe une
coloration des arêtes.

3.6 Plus courts chemins


Dans cette section nous allons voir un problème très important ayant de nombreuses applications.
Ce problème est la détermination du plus court chemin. Afin de nous mettre rapidement dans le bain,
nous pouvons supposer à titre d’exemple que lorsqu’on veut se rendre d’un point à un autre d’un
réseau routier, on peut rechercher le chemin le plus court. C’est ce que font tous les systèmes GPS.
Lorsqu’on veut minimiser la distance parcourue, les valeurs sur les arcs sont les distances à parcourir
d’un point à un autre.

Alors pour pouvoir chercher un tel chemin il faut modéliser la carte routière comme un graphe
pondéré qui sera exploré pour enfin le récupérer. Edgser Wybe Dijkstra (1930-2002) a proposé en
1959 un algorithme qui permet de calculer le plus court chemin entre un sommet particulier et tous
les autres.
44 Chapitre 3. Théories des graphes

3.6.1 Algorithme de Dijkstra


La règle à suivre est très simple : Un plus court chemin [x0 ; xn ] entre deux sommets x0 et xn d’un
graphe est constitué des plus courts chemins reliant deux sommets du chemin [x0 ; xn ]. (En d’autres
termes : les sous-chemins des plus courts chemins sont des plus courts chemins. La recherche du
plus court chemin entre x0 et xn d’un graphe passe alors par les recherches successives des plus
courts chemins reliant x0 à tous les sommets du graphe susceptibles de se trouver sur le trajet. Reste
à choisir dans quel ordre on liste les sommets intermediaires. On peut formuler la méthode utilisée
par l’Algorithme 3.

Algorithm 3 | Algorithme de Dijkstra


Données : Un graphe simple, non orienté, pondéré, à n sommets.
Résultat : Le plus court des chemins d’un sommet de départ à tous les autres sommets.

1: *** Initialisation ***


2: S = 0/ ; L(x1 ) = 0 et L(xi ) = ∞ pour i 6= 1 ;
3: *** Itération ***
4: repeat
5: choisis un sommet xi ∈ V − S avec L(xi ) minimal ;
6: if L(xi ) = ∞ then halte ;
7: end if
8: ajoute le sommet xi à l’ensemble S ;
9: if S = V then halte ;
10: end if
11: for chaque voisin x j ∈ V − S du sommet xi , do
12: if L(x j ) > L(xi ) + ∂ (xi , x j ) then
13: remplace L(x j ) par L(xi )+ ∂ (xi , x j ) et remplace p(x j ) par xi ;
14: end if
15: end for

Où L(xi ) est le poids du plus court chemin allant de 1 au sommet xi , ∂ (xi , x j ) est le poids de
l’arête entre xi et x j , et p(x j ) désigne le prédécesseur de x j pour lequel on a calculé L(x j ).

2
A C
3 3
3
E 1 1 S
1 1
B D
5

F IGURE 3.27 –

 Exemple 3.9 Soit le graphe présenté au niveau de la Figure 3.27, en appliquant l’algorithme de
3.6 Plus courts chemins 45

Dijkstra pour determiner le plus court chemin entre E et S, on peut proposer la resolution à l’aide du
tableau suivant :

E A B C D S
0 ∞ ∞ ∞ ∞ ∞ E
3/E 1/E ∞ ∞ ∞ EB
2/B 4/B 6/B ∞ EBA
4/B,A 6/B ∞ EBAC
5/C 7/C EBACD
6/D EBACDS

Où on peut distinguer E – B – A – C – D – S comme le plus court chemin avec un poid de 6.




3.6.2 Algorithme de Bellman-Ford


L’algorithme de Bellman-Ford est un autre algorithme qui calcule les plus courts chemins depuis
un sommet source donné dans un graphe orienté pondéré. Il a été proposé par Richard Bellman et
Lester Randolph Ford junior (publications en 1956 et 1958), et de Edward Forrest Moore qui le
redécouvrit en 1959. Contrairement à l’algorithme de Dijkstra, ce dernier autorise la présence de
certains arcs de poids négatif sauf pour le cas d’existence d’un circuit absorbant, c’est-à-dire de
poids total strictement négatif, accessible depuis le sommet source. On peut formuler la méthode
utilisée par l’Algorithme 4.

On peut détecter la présence d’un cycle de poids négatif de la façon suivante : il y a un cycle de
poids négatif si et seulement si un nouveau tour de boucle ferait diminuer une distance.

Algorithm 4 | Algorithme de Bellman-Ford


Données : Un graphe simple, orienté, pondéré, à n sommets.
Résultat : Le plus court des chemins d’un sommet de départ à tous les autres sommets.

1: *** Initialisation ***


2: S = 0/ ; L(x1 ) = 0 et L(xi ) = ∞ pour
3: *** Itération ***
4: for k = 1 jusqu’à|G(V )| − 1 do
5: for chaque arc e(v, u) ∈ G(E) do
6: L(v) = min(L(v), L(u) + poids(u, v))
7: end for
8: end for
9: *** Détection de présence d’un cycle de poids négatif ***
10: for chaque arc e(v, u) ∈ G(E) do
11: if L(u) + poids(u, v) < L(v) then
12: afficher ”il existe un cycle absorbant”
13: end if
14: end for
46 Chapitre 3. Théories des graphes

2
B D
4
4
A 3 1 −5
3
2
C E
5

F IGURE 3.28 –

 Exemple 3.10 Soit le graphe présenté au niveau de la Figure 3.28, en appliquant l’algorithme de
Bellman-Ford pour determiner les plus courts chemins à partir de A, on peut proposer la resolution à
l’aide du tableau suivant :

itr=1 A B C D E itr=3 A B C D E
int 0 ∞ ∞ ∞ ∞ int 0 3 2 1 6
A 0 4 2 ∞ ∞ A 0 3 2 1 6
B 0 4 2 6 7 B 0 3 2 1 6
C 0 3 2 6 7 C 0 3 2 1 6
D 0 3 2 6 7 D 0 3 2 1 6
E 0 3 2 2 7 E 0 3 2 1 6

itr=2 A B C D E itr=4 A B C D E
int 0 3 2 2 7 int 0 3 2 1 6
A 0 3 2 2 7 A 0 3 2 1 6
B 0 3 2 2 6 B 0 3 2 1 6
C 0 3 2 2 6 C 0 3 2 1 6
D 0 3 2 2 6 D 0 3 2 1 6
E 0 3 2 1 6 E 0 3 2 1 6

3.7 Flots et réseaux de transport


Au niveau de cette section, nous revenons sur les graphes orientés, cependant, nous allons les
traiter comme des réseaux. Ces derniers sont indispensables à notre vie de tous les jours. Où nous
sommes dans l’obligation de ce servir d’eux dans différents domaines tels que les transports, les
communications, ainsi que la distribution, etc. Alors à ce niveau, nous nous proposons d’introduire
les propriétés élémentaires des réseaux.
Définition 3.7.1 Un réseau R est un graphe orienté simple (c’est-à-dire sans multi-arcs ni boucle)
d’ordre fini R = (V, E) ayant une source s et un puits p tels qu’il existe
i) au moins un chemin de s à p ;
ii) et une valuation c :E→ appelée capacité.

Parmi les problèmes les plus classiques liés aux réseaux, on peut citer celui de la recherche d’un
flot maximal qui va être dévoilé au niveau de cette section. On se donne une capacité maximale sur
3.7 Flots et réseaux de transport 47

chaque arc qui sera une borne supérieure du flot autorisé sur cet arc. Le problème du flot maximal
consiste à déterminer un flot dont la valeur en un certain lieu est maximale. On peut, de plus, se
donner un coût de transport d’une unité de flot sur chaque arc et chercher le flot maximum de coût
minimum. Afin de déterminer ce flot maximal, nous allons d’abord définir deux notions importantes,
la coupe du réseau ainsi que le flot.
Définition 3.7.2 Une coupe d’un réseau R(V, E) est la donnée d’une partition X ∪ X de V telle
que s ∈ X et p ∈ X. On notera la coupe simplement (X, X). La capacité de la coupe (X, X), notée
c(X, X) est la somme des capacités des arcs e(u, v) ∈ E allant de X à X :

c(X, X) = ∑ c(e)
e∈E
u ∈ X et v ∈ X

Cependant, une coupe (X, X) est appelée coupe minimum si sa capacité est minimum : pour toute
0
coupe (X, X ) de R, on a
0 0
c(X, X) ≤ c(X , X )

La seconde notion que nous allons définir et celle du flot qui peut être désigné comme étant
l’affectation d’une valeur réelle à chaque arc de G, représentant une quantité transportée sur cet arc,
de telle sorte que, en chaque sommet, la somme des flots entrants soit égale à la somme des flots
sortants. Formellement, on définit un flot comme suit :
Définition 3.7.3 Une application f : E → R est un flot dans le réseau R si elle satisfait aux
propriétés suivantes :
a) pour tout e ∈ E,

0 ≤ f (e) ≤ c(e).

b) pour tout x ∈ V \{s, p},

∑ f (e) = ∑ f (e).
e(u, v) ∈ E e(u, v) ∈ E
v=x u=x

Un exemple très parlant est celui d’un réseau routier : les carrefours sont représentés par les
sommets du réseau, chaque route entre deux carrefours étant représentée par une arête orientée ; si la
route est à double sens, on met un arc dans chaque sens ; la capacité peut signifier, par exemple, le
nombre maximum de véhicules dont la circulation peut être absorbée par le tronçon routier sur une
période d’une heure. Dans ce cas, on s’intéresse plus précisément à la circulation des véhicules sur
les différents itinéraires permettant d’aller du point s vers le point p.
 Exemple 3.11 On a représenté un flot dans un réseau en Figure 3.29. La valeur sur chaque arc
représente le flot ; le nombre entre parenthèses représente la capacité de chaque arc. La valeur
totale du flot est ω( f ) = 14 + 10 + 2 + 41 + 5 = 34. On a une coupe X = {s, x1, x2, x3, x4, x5, x6} et
X = {x7 , x8 , x9 , x10 , p}. La capacité de cette coupe est c(X, X) = 17 + 13 + 4 + 4 + 6 = 44. 

Comme la valeur totale du flot est toujours inférieure ou égale à la plus petite capacité possible
d’une coupe, et d’après le théorème de Ford et Fulkerson, il existe toujours un flot maximum qui
48 Chapitre 3. Théories des graphes

x7
{(17), 14} {(13), 10}

x1 {(13), 10} {(17), 14}

{(14), 12} {(8), 2}


{(4), 2}
x4 x8 {(21), 17} p

{(5), 2}
{(14), 14} {(8), 2}
x2 {(7), 6}
s {(5), 1}

{(7), 2} {(4), 4} x9
x5
{(9), 8} {(3), 1} {(5), 5}
{(5), 3} {(3), 1}
x3
x10
{(3), 3}
x6 {(6), 5}

F IGURE 3.29 –

atteint cette borne. L’algorithme 5 ci-dessous est une version simplifiée de celui proposé par Ford et
Fulkerson. Il fournit à partir d’un réseau un flot f maximum et une coupe (X, X) minimum.

Où G f représente le réseau résiduel et f (e(v, u)) les flots inverses. Autrement dit, l’algorithme
fonctionne sur deux étapes qui sont elles-mêmes composées d’une succession d’étapes. La première
succession d’étapes consiste à saturer un à un les chemins mentent de la source vers le puits. Où
un chemin est défini comme une succession d’arcs adjcents bien orientés. Dans ce même sens un
arc direct ne sera saturé que si le flux qui y circule est égal la capacité (c.-à-d., on ne peut rien
ajouter). Par conséquent, cette opération nous mènera d’un flot nul vers un flot complet. La deuxième
succession d’étapes consiste à saturer une à une les chaı̂nes montent de la source vers le puits. Où
une chaı̂ne est une succession d’arcs adjacents avec un ou plusieurs arcs mal orientés (inverse). Dans
ce même sens, un arc inverse ne sera pas saturé que si le flux qui y circule est égal à 0 (c.-à-d., on ne
peut rien soustraire). Par conséquent, cette étape nous mènera d’un flot complet vers un flot maximal.

À titre d’exemple, prenons le cas du réseau affiché sur la Figure 3.30.

En applicant la première phase (c.-à-d., les instructions 5-11 de l’algorithme 5) nous obtiendra le
flot complet illustré sur la Figure 3.31.

Enfin, en appliquant la seconde succession d’étapes en saturant les chaı̂nes de s vers le noeud
p. Par conséquent on remarque la chaı̂ne s → 4← 3 → 5 → 7 → 8 → p où l’arc 4 ← 3 est bien un
arc inverse alors en saturant cette chaı̂ne nous obtiendrons un flot maximal de 16 comme illustre la
3.7 Flots et réseaux de transport 49

Algorithm 5 | Algorithme de Ford–Fulkerson


Données : Un graphe G avec des capacités de flots c, une source s et un puis p.
Résultat : Un flot maximal f de s vers p.

1: for chacun des arcs e(u, v) of G do


2: f (e(u, v)) ← 0
3: f (e(v, u)) ← 0 ;
4: end for
5: while (il existe un chemin ch de s vers p dans G f t.q f (e(u, v)) < c(e(u, v))) do
6: Trouver min f (ch) = min{ f (e(u, v)) : e(u, v)) ∈ ch} ;
7: for chacun des arcs e(u, v) ∈ ch do
8: f (e(u, v)) ← f (e(u, v)) + min f (ch) ;
9: f (e(v, u)) ← f (e(v, u)) + min f (ch) ;
10: end for
11: end while
12: while (il existe un chaı̂ne ch de s ers p dans G f t.q f (e(u, v)) > 0) do
13: Trouver min f (ch) = min{ f (e(u, v)) : e(u, v) ∈ ch and e(u, v) < c(e(u, v))} ;
14: for chacun des arcs e(u, v) ∈ ch do
15: f (e(u, v)) ← f (e(u, v)) + min f (ch) ;
16: f (e(v, u)) ← f (e(v, u)) − min f (ch) ;
17: end for
18: end while

5 5
2 6 9
6 4 2 3 8
8 6 5 p
s 4 7
4 2
7 3 7
3 5 8
5 4

F IGURE 3.30 –

5/5 3/5
5/6 2 0/4 6 2/2 3/3 9 6/8
3/8 6/6 5/5
s 4 7 p
0/2
3/3 0/4
7/7 4/7
3 5 8
4/5 4/4

F IGURE 3.31 –
50 Chapitre 3. Théories des graphes

Figure 3.32.

5/5 3/5
5/6 2 0/4 6 2/2 3/3 9 6/8
4/8 6/6 5/5
s 4 7 p
1/2
2/3 1/4
7/7 5/7
3 5 8
5/5 4/4

F IGURE 3.32 –

3.8 Problèmes d’affectations


Comme nous l’avons déjà évoqué au niveau de l’introduction, le problème d’affectation est un
cas très important de la littérature, semblable à celui des flots, ce denier n’est qu’une généralisation
du problème de couplage maximum ( un cas particulier du problème de transport (sans capacité)dans
un graphe biparti), puisqu’il s’agit de trouver, parmi les couplages de cardinal maximal, celui qui a
le poids minimum (ou maximum).

En supposant la formulation générale d’un problème d’affectation comme suit, l’exemple le plus
classique est l’affectation de n tâches à m machines. On suppose qu’on connaı̂t le coût de production
Ci, j d’une tâche i sur une machine j (ce coût est infini ∞ s’il n’est pas possible d’effectuer cette
tâche sur cette machine). Le but est d’affecter toutes les tâches de sorte à minimiser le coût total
de production (défini comme la somme des coûts). On peut modéliser ce problème par un graphe
biparti pondéré G(X ∪Y, E,C) dans lequel X est l’ensemble des tâches, Y l’ensemble des machines,
et les arêtes (i, j) ∈ E sont pondérées par le coût de production de la tâche i sur la machine j.

Cependant, compte-tenu de l’importance de ce type de problème, un algorithme spécifique a été


proposé par Kuhn ; il s’agit de l’algorithme Hongrois que nous allons présenter au niveau de cette
section. L’algorithme hongrois permet de résoudre le problème d’affectation. Il fonctionne de la
façon suivante :

Phase 1 : Obtention des zéros : On retranche de chaque ligne l’élément minimum puis, dans la nouvelle
matrice, de chaque colonne l’élément minimum.
Phase 2 : On recherche un ensemble de cardinalité maximale de zéros indépendants (ce qui revient à
chercher un couplage maximal dans un graphe biparti). Si l’affectation est complète, on a une
solution optimale. Sinon on passe à la phase 3.
Phase 3 : On cherche le nombre minimal de lignes et de colonnes contenant tous les zéros (il est égal à
la cardinalité de l’ensemble calculé à la phase 2). Pour cela, il faut suivre ces étapes :
(a) Marquer les lignes ne contenant pas de 0 encadrés (les 0 encadrés sont ceux obtenus à la
phase 2).
(b) Marquer les colonnes ayant un 0 sur une ou plusieurs lignes marquées
(c) Marquer toute ligne ayant un 0 encadré dans une colonne marquée
(d) Répéter b. et c. jusqu’à ce que plus aucune ligne ni colonne ne puisse être marquée
3.8 Problèmes d’affectations 51
23/08/20
(e) Rayer les lignes non marquées et les colonnes marquées.
Phase 4 : Ajout ou déplacement de zéros : On retranche le plus petit nombre non rayé (forcément
strictement positif) aux éléments non rayés et on l’ajoute aux éléments rayés 2 fois, puis on
retourne à la phase 2.
 Exemple 3.12 Soit le problème d’affectation donné avec la matrice suivante :

M1 M2 M3 M4 P1 M1
P1 0 110

8
8
P2 M2
P2 0 70 0

8
P3 0 50 20 P3 M3

8
P4 30 0 0

8
P4 M4
Le plus simple pour bien comprendre cet algorithme est de suivre un exemple détaillé :
1). Phase 1 : Création d’un zéro par ligne
23/08/2018 23(24

M1 M2 M3 M4 M1 M2 M3 M4
3. Phase 2: Recherche d'ensemble de 0 indépendants
P1 60 170 60 P1 0 110
8

8
8

8
Prec Suiv

P2 130 200 200 130 P2 0 70 70


8

8
P3 50 170 180 50 P3 0 120 130
8

8
P4 120 90 200 90 P4 30 0 110
8

2). Phase 1 : Création d’un zéro par colonne


23/08/2018 23(25

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110
8

8
8

P2 0 70 70 P2 0 70 0
8

P3 0 120 130 P3 0 50 20
8

https://www.pairform.fr/doc/1/32/180/web/res/exempleHongrois.eWeb/index.html Pa

P4 30 0 110 P4 30 0 0
8

0 0 70 110
3). Phase 2 : Recherche d’ensemble de 0 indépendants
52 Chapitre 3. Théories des graphes
23/08/2018 23(27

M1 M2 M3 M4 P1 M1
P1 0 110

8
8
P2 M2
P2 0 70 0

8
P3 0 50 20 P3 M3
8
P4 30 0 0
8 P4 M4

4). Phase 2 : Couplage maximum

23/08/2018 23(29

P1 M1 M1 M2 M3 M4
P1 0 110

8
8
P2 M2
P2 0 70 0

8
P3 M3 P3 0 50 20
8
P4 30 0 0
P4 M4 8

5). Phase 3 : a. Marquer les lignes sans 0 encadrés

23/08/2018 23(56

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110
8

8
8

P2 0 70 0 P2 0 70 0
8

P3 0 50 20
https://www.pairform.fr/doc/1/32/180/web/res/exempleHongrois.eWeb/img/algoHongrois2.svg
P3 0 50 20 Page 1 of 1
8

P4 30 0 0 P4 30 0 0
8

6). Phase 3 : b. Marquer les col. avec un 0 sur une ligne marquée
3.8 Problèmes d’affectations 53
23/08/2018 23(58

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110

8
8

8
P2 0 70 0 P2 0 70 0

8
P3 0 50 20 P3 0 50 20
8

8
P4 30 0 0 P4 30 0 0
8

8
7). Phase 3 : c. Marquer ligne avec un 0 encadré dans une col. marquée

23/08/2018 23(59

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110
8

8
8

8
P2 0 70 0 P2 0 70 0
8

8
P3 0 50 20 P3 0 50 20
8

8
P4 30 0 0 P4 30 0 0
8

8
8). Phase 3 : d. rien à faire ici

24/08/2018 00(00

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110
8

8
8

P2 0 70 0 P2 0 70 0
8

P3 0 50 20 P3 0 50 20
8

https://www.pairform.fr/doc/1/32/180/web/res/exempleHongrois.eWeb/img/algoHongrois5.svg Page 1 of 1

P4 30 0 0 P4 30 0 0
8

9). Phase 3 : e. Rayer les lignes non marquées et les colonnes marquées
54 Chapitre 3. Théories des25/08/2018
graphes 00(08

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 110

8
8

8
P2 0 70 0 P2 0 70 0

8
P3 0 50 20 P3 0 50 20
8

8
P4 30 0 0 P4 30 0 0
8

8
10). Phase 4 : Ajout ou déplacement de zéros
25/08/2018 00(09

M1 M2 M3 M4 M1 M2 M3 M4
P1 0 110 P1 0 90
8

8
8

8
P2 0 70 0 P2 20 70 0
8

8
k=20
P3 0 50 20 P3 0 30 0
8

8
P4 30 0 0 P4 50 0 0
8

8
11). Phase 2 : Recherche d’ensemble de 0 indépendants

25/08/2018 00(10

M1 M2 M3 M4 P1 M1
P1 0 90
8
8

P2 M2
P2 20 70 0
8

P3 0 30 0 P3 M3
8

https://www.pairform.fr/doc/1/32/180/web/res/exempleHongrois.eWeb/img/algoHongrois8.svg Page 1 of 1

P4 50 0 0
8

P4 M4

12). Phase 2 : couplage maximum


3.8 Problèmes d’affectations 55
25/08/2018 00(10

M1 M2 M3 M4 P1 M1
P1 0 90

8
8
P2 M2
P2 20 70 0

8
P3 0 30 0 P3 M3
8
P4 50 0 0
8 P4 M4

13). Phase 2 : Retour à la matrice initiale


25/08/2018 00(12

P1 M1 M1 M2 M3 M4
P1 0 90

8
8
P2 M2
P2 20 70 0

8
P3 M3 P3 0 30 0

8
P4 50 0 0

8
P4 M4

https://www.pairform.fr/doc/1/32/180/web/res/exempleHongrois.eWeb/img/algoHongrois10.svg Page 1 of 1
56 Chapitre 3. Théories des graphes

3.9 Exercices :
Exercise 3.1 Des études comportementales démontrent que certaines personnes peuvent influencer
le comportement des autres. Un graphe appelé graphe d’influence sert à modéliser cette situation :
a) Représenter le graphe d’influence de : Déborah influence Bastien, Frédéric et Linda, mais que
personne n’influence Déborah elle-même. De la même façon, Yvonne et Bastien s’influencent
mutuellement.
b) De quel type de graphe s’agit-il ?

Exercise 3.2 Dans un tournoi de football, les Tigers ont battu les Blue Jays, les Cardinals et les
Orioles ; les Blues Jays ont battu les Cardinals et les Orioles ; et les Cardinals ont battu les Orioles.
a) Représenter le graphe du tournoi.
b) De quel type de graphe s’agit-il ?

Exercise 3.3 Construire un graphe dont les sommets sont les entiers compris entre 1 et 8 et dont les
arcs représentent la relation ”être diviseur de”. De quel type de graphe s’agit-il ?

Exercise 3.4 Combien y a-t-il de sommets, d’arêtes qui composent les graphes suivants :

a) Kn b) Kn,m c) Cn

Exercise 3.5 Les graphes G et H sur la Figure 3.33 sont-ils bipartis ?

a a b

f b g c

e c f

d e d

G H

F IGURE 3.33 –

Exercise 3.6 Le conseil municipal d’une ville comprend 7 commissions, qui obéissent aux 2 règles
suivantes :
— tout conseiller municipal fait partie de 2 commissions exactement ;
— deux commissions quelconques ont exactement un conseiller en communs.
3.9 Exercices : 57

Combien y a-t-il de membres dans le conseil municipal ?

Exercise 3.7 Sur la table sont disposés deux tas de trois allumettes. Deux joueurs vont à tour de
rôle enlever une ou deux allumettes de l’un des tas. Le joueur qui retire la dernière allumette perd la
partie.
a) Modéliser ce jeu a l’aide d’un graphe.
b) Que doit jouer le premier joueur pour gagner la partie à coup sûr ?

Exercise 3.8 Pour les 2 graphes G et H sur la Figure 3.34 :

a b c a b
d

i h g e e d c

G H

F IGURE 3.34 –

a) Déterminer le nombre de sommets, le nombre d’arêtes et le degré de chaque sommet.


b) Calculer la somme des degrés des sommets de chacun des graphes.
c) Cette valeur était-elle prévisible ?

Exercise 3.9 Combien d’arêtes un graphe contient-il s’il a des sommets de degré 4, 3, 3, 2, 2 ?
Tracer un tel graphe.

Exercise 3.10 Une ligue de football comporte 5 équipes. Le bureau de la ligue désire organiser un
tournoi d’avant saison permettant à chaque équipe de jouer 3 matchs contre 3 équipes. Comment
l’organiser ?

Exercise 3.11 Montrer que dans un groupe de personnes, il y a toujours deux personnes ayant le
même nombre d’amis présents.

Exercise 3.12 Soit G(V, E) un graphe orienté. Alors, montrer que :


58 Chapitre 3. Théories des graphes

∑ d −(xi)= ∑ d +(xi)=|E|
xi ∈V xi ∈V

Exercise 3.13 Déterminer les matrices d’adjacence des deux graphes G et H sur la Figure 3.35.

a b c a b c

d e d e

G H

F IGURE 3.35 –

Exercise 3.14

a) Tracer le graphe de la matrice d’adjacence proposée :


 
0 0 1 1
0 0 1 0
 
1 1 0 1
1 1 1 0
b) Tracer le graphe non orienté de la matrice d’adjacence proposée :
 
1 2 0 1
2 0 3 0
 
0 3 1 1
1 0 1 0
c) Tracer le pseudographe orienté de la matrice d’adjacence proposée : :
 
0 2 3 0
1 2 2 1
 
2 1 1 0
1 0 0 2
3.9 Exercices : 59

Exercise 3.15 Les listes de sommets suivants forment-elles des chaines dans le graphe présenté sur
la Figure 3.36 ? Quelles sont les longueurs de celles qui sont des chaı̂nes :

a) a,e,b,c,b
b) e,b,a,d,b,e

a b c

d e

F IGURE 3.36 –

Exercise 3.16 Les listes de sommets suivants forment-elles des chemins dans le graphe orienté sur
la Figure 3.37 ? Quelles sont les longueurs de celles qui sont des chemins :

a) a,b,e,c,b
b) a,d,a,d,a
c) a,d,b,e,a

a b c

d e

F IGURE 3.37 –

Exercise 3.17 Soit les deux graphes G et H sur la Figure 3.38.


a) Pour chaque sommet des deux graphes G1 et G2 , donner les ensembles des voisins.
b) Est-ce que les deux graphes sont connexes ?
c) Énumérer tous les sommets vi en respectant la condition suivante : la suppression de vi résultera
un graphe non connexe ?
60 Chapitre 3. Théories des graphes

v5 v5
v1 v2 v1 v2
v6
v4 v3 v4 v3
v7 v7

G H

F IGURE 3.38 –

d) Énumérer toutes les arêtes (vi , v j ) en respectant la condition suivante : la suppression de l’arête
en question résultera un graphe non connexe ?

Exercise 3.18 a) Le graphe orienté G sur la Figure 3.39 est-il fortement connexe ?

F IGURE 3.39 –

b) Déterminer alors le nombre de composantes fortement connexes.

Exercise 3.19 Un facteur désire faire sa tournée sans passer deux fois dans la même rue. Est-ce
possible si sa tournée a les profils suivants (où chaque rue est représentée par une arête) :

Exercise 3.20 Quels sont les graphes complets Kn qui admettent un cycle eulérien ?

Exercise 3.21 Un message de diagnostic doit être envoyé sur un réseau informatique afin d’effectuer
les tests de tous les terminaux par le biais d’un réseau intranet. Quelle sorte de graphe doit représenter
le réseau pour tester tous les liens intranet ? Et pour tester tous les terminaux ?
3.9 Exercices : 61

G H

F IGURE 3.40 –

Exercise 3.22 Étant données 13 villes reliées par des routes comme l’illustre la Figure 3.41, un
voyageur de commerce habitant la ville X peut-il passer par chaque ville une fois et une seule, en
rentrant chez lui à la fin de son circuit ?

F IGURE 3.41 –

Exercise 3.23 Donner un exemple de graphe comportant au moins six sommets tel que :
a) il est hamiltonien mais pas eulérien ;
b) il est eulérien mais pas hamiltonien.

Exercise 3.24 L’école supérieure de technologie industriel (ESTI ANNABA) doit organiser les
examens des enseignements optionnels de ses élèves de quatrième année. Les différentes options
sont : français (F) ; anglais (A) ; mécanique (M) ; sport (S) ; Internet (I) et dessin industriel (D).
Certains étudiants ont choisi plusieurs options, et les regroupements existants sont : (F,A,M) ; (D,S) ;
(I,S) ; (I,M).
Combien de demi-journees seront-elles nécessaires à cette organisation sachant que la durée de
62 Chapitre 3. Théories des graphes

chaque épreuve est d’une demi-journée ?

Exercise 3.25 a) Déterminer et justifier le nombre chromatique d’un graphe Kn .


b) Déterminer et justifier le nombre chromatique d’un graphe biparti Kn,m .
c) Déterminer et justifier le nombre chromatique d’un graphe cycle Cn .

Exercise 3.26 Tout graphe contenant un triangle (K3 ) ne peut être colorié en moins de trois couleurs.
a) Construire un graphe sans triangle qui nécessite également trois couleurs.
b) Comment, à partir du graphe précédent, construire un graphe sans une clique K4 nécessitant 4
couleurs ?
c) Un graphe sans une clique K5 nécessitant 5 couleurs ?

Exercise 3.27 Appliquer l’algorithme de Dijkstra pour déterminer le plus court chemin entre A et I
et proposer la résolution à l’aide du tableau.

D
9 3
B 4 G
7 5 2 9

A 3 E 8 I
8
6 6 3
C 8 H
7 9
F

F IGURE 3.42 –

Dans chaque cas, proposer un chemin minimum et indiquer le nombre de chemins minimums
possible.

Exercise 3.28 Dans le graphe ci-dessous contenant un poids négatif, montrer que l’algorithme de
Dijkstra ne peut pas être appliqué.
3.9 Exercices : 63

B
2 1
A C
4 −2
D

F IGURE 3.43 –

Exercise 3.29 Déterminer le plus court chemin de C à I

A
4
10 4 10
C D
10
B 12
5 16
E 21 F
4
3
17 10
3
G H
3
5
I J
8
G

F IGURE 3.44 –

Exercise 3.30 On veut affecter 5 étudiants (A, B, C, D, E, F) à 5 postes libres x, y, z, t, u. Pour cela
on leur demande de noter (sur 20), les postes selon leurs préférences. Plus la note est élevée et plus
l’étudiant veut accéder à ce poste. Les résultats sont consignés dans le tableau suivant. Par exemple
l’étudiant A préfère les postes X et Y et les notes 18/20 mais a moins de préférence pour le poste Z
et le note 9/20.
Question : En utilisant la méthode hongroise, affecter ces 5 étudiants à ces 5 postes de telles manières
à satisfaire leurs préférences de manières optimales. Il est demandé de donner les matrices de chaque
étape, le coût optimal et les affectations optimales.
de noter (sur 20), les postes selon leurs préférences. Plus la note est élevée et plus l’étudiant veut accéder
à ce Université
poste. Les d’Orléans
résultats sont consignés
– Licence dans et
économie le gestion
tableau 2007-8
suivant. Par exemple l’étudiant A préfère
1 les
postes X et Y et les notes 18/20 mais a moins de préférence pour le poste Z et le note 9/20.
Question : En utilisant la méthode hongroise, affecter ces 5 étudiants à ces 5 postes de telles manières
TD Licence
à satisfaire 3 – Optimisation
leurs préférences et aide
de manières optimales. à la décision
Il est demandé de donner les matrices de chaque
étape, le coût optimal et les affectations optimales. Chapitre 3. Théories des graphes
64
Série 6 - A↵ectation de coût minimal
Exercice 1 X Y Z T U
A hongroise
Déterminer par la méthode 18 18 une9a↵ectation
11 de 11coût minimal associée au tableau
des coûts suivant:
B 18 17 11 10 17
7 2 1 9 4 C 16 10 15 17 14
9 6 9 5 5
D 18 13 15 17 15
8 8 3 1 8
7 9 4 2 2 E 15 19 11 18 10
4 3 7 4 8
F IGURE 3.45 –

Exercice 2
Exercise
On 3.31
veut On veut affecter
a↵ecter 5 tâches
5 tâches à 5 machines.
à 5 machines. LesLescoûts
coûts des
des affectations
a↵ectationssont donnés
sont par par
donnés le le
tableau suivantsuivant:
tableau :

machine 1 machine 2 machine 3 machine 4 machine 5


tâche 1 15 40 5 20 20
tâche 2 22 33 9 16 20
tâche 3 40 6 28 0 26
tâche 4 8 0 7 25 60
tâche 5 10 10 60 15 5

Rechercher une a↵ectation conduisant à un coût minimum en utilisant l’algorithme hon-


Rechercher une affectation conduisant à un coût minimum en utilisant l’algorithme hongrois.
grois.

Devoir à rendre pour le mardi 2 avril


Déterminer par la méthode hongroise une a↵ectation de coût minimal associée au tableau
des coûts suivant:

2 2 11 9 9
2 3 9 10 3
4 10 5 3 6
2 7 5 3 5
5 1 9 2 10
Bibliographie

[1] BASTIN, Fabian. Modèles de Recherche Opérationnelle, 2010.


[2] BRETTO, Alain, FAISANT, Alain, et HENNECART, François. Éléments de théorie des
graphes. Springer Science Business Media, 2012.
[3] CRAMA, Yves, DUPONT, Lionel, et FINKE, Gerd. Recherche opérationnelle et gestion de la
production. 1997.
[4] FORTZ, Bernard, Recherche opérationnelle et applications, 2013.
[5] JAVET, Jean-Philippe. Quelques éléments de théorie des graphes, 2016.
[6] JAVET, Jean-Philippe. Programmation linéaire, 2018.
[7] Laurent GODEFROY, Advanced Algorithmics, 2017.
[8] Laurent SMOCH, Recherche opérationnelle, 2013.
[9] REBAÏNE, Djamal. 8INF806 Conception et analyse des algorithmes, 2005.
[10] Richard Bellman, Dynamic Programming, Princeton, Princeton University Press, 1957. —
Réimpression 2003, Dover Publication, Mineola, New-York.

Vous aimerez peut-être aussi