Académique Documents
Professionnel Documents
Culture Documents
Optimisation Graphe 23 24. Etudiants
Optimisation Graphe 23 24. Etudiants
Flot maximal
M. El Ossmani
ENSAM–Meknès
2023–2024
Problématique
Pour y répondre, Euler a introduit le graphe ci-dessus (les arcs symbolisent les
ponts ; les sommets, les quatre zones terrestres) :
Le problème de départ se ramène alors à la question suivante : peut-on trouver
un circuit permettant d’emprunter une, et une seule fois chaque arête, en
retournant à son point de départ ?
La réponse, dans ce cas particulier, est non.
Une arête a = {x , y } est aussi notée (xy ). On dit que x et y sont adjacents.
Une arête a = {x , x } est une boucle reliant deux fois le même sommet x .
A B
n o
S= A, B, C , D, E
E n
A= {A, B}, {A, C }, {C , D}, {B, D},
o
{B, E }, {D, E }
C D
Un graphe non orienté, G1
Graphes orientés
E n
A= (A, B), (A, C ), (B, E ), (D, B),
o
G (C , D), (E , D), (F , G), (G, F )
C D
Un graphe orienté, G2
Définition (Degré)
Dans un graphe orienté, le degré sortant (resp. entrant) d’un
sommet s est le nombre de sommets qui sont successeurs (resp.
antécédents) de s. Le degré est la somme des degrés entrants et
sortants.
Dans un graphe non orienté, le degré de s est le nombre de
sommets adjacents à s.
A B F
Définition (Graphe partiel)
Soit un graphe G = (S, A), et A0 ⊂ A, E
le graphe (S, A0 ) est un graphe partiel
de G.
C D G
Un graphe partiel de G2
Aij = 1 ⇔ (i, j) ∈ A
Matrice d’adjacence
A B A B
C D C D
A B C D E
A B C D
A 0 1 1 0 0
A 0 1 1 0
1 0 0 1 1
B
0
B 0 0 0
C 1 0 0 1 0
C 0 0 0 1
D 0 1 1 0 1
D 0 1 0 0
ENSAM–Meknès M. El Ossmani
0 1 des0 graphes
E Optimisation 1 0 2023–2024 10/97
Notions de base
Définitions
Flot maximal
Liste d’adjacence
Non orienté Orienté
Exercice 1. :
Dessiner un graphe non orienté complet d’ordre 4.
1. Quel est le degré des sommets de ce graphe ?
2. Combien d’arêtes possède-t-il ?
3. Généralisez ces résultats à un graphe simple complet ayant n sommets.
4. Ce graphe complet d’ordre 4 est-il planaire ?
1ère représentation
2ème représentation du même graphe
Propriété
n(n−1)
Un graphe (S, E ) non orienté complet d’ordre n possède 2
arrêtes.
Preuve :
Une arrête a = {si , sj }= combinaison de 2 sommets si , sj ∈ S.
Nombre de sommets est n.
Le graphe étant complet, donc chaque 2 sommets forme une arête.
n!
D’où le résultat : Cn2 = (n−2)!x 2!
.
Théorème
1 Graphe (S, A) non
orienté :
d(s) = 2 card(A)
X
s∈S
s∈S s∈S
Corollaire
Dans un graphe non orienté le nombre de sommets de degrés
impaires est pair.
Exemple
Exercice 2 :
On a 7 types de matières premières que l’on veut tester. La
procédure est la suivante :
On veut examiner le mélange de chaque paire de types de MP.
a) Est-il possible de tester chaque MP exactement 5 fois ?
b) 4 fois
Chaı̂nes et cycles
Exemple de chaı̂nes :
(C,D,B,B,A), (D,B,C,E), (E,C,D,B,C,D,B,A).
Resp. de longueurs 4, 3 et 7.
(C,B,D,A) et (B,E) ne sont pas des chaı̂nes.
Exemple de cycles :
(C,D,B,B,C), (D,B,A,B,C,E,C,D) cycles
(D,B,A,D) et (B,C,E,B) ne sont pas des cycles.
Chemins et circuits
Exemple de circuits :
(B,D,C,B), (D,C,B,D,C,D).
(B,C,D,B) et (A,B,D,C,B,A) ne sont pas des
circuits.
Simple et élémentaire
Théorème
Soit G=(V,E) un graphe non orienté (resp. orienté) et Ma sa matrice d’adjacence. Soit
p un entier non nul. Alors, le coefficient à l’intersection de la i-ème ligne et de la j-ème
colonne de Map est égal au nombre de chaı̂nes (resp. chemins) de longueur p, ayant
pour origine le i-ème sommet et pour extrémité le j-ème sommet.
Graphes connexes
Définition (Connexité)
Soit G = (V , E ) un graphe orienté (ou non orienté).
On dit que G est connexe si pour tout couple {x , y } de sommets de G il existe une
chaı̂ne qui relie x et y .
Composantes connexes
2 composantes connexes :
{a,b,c,d}
{e,f,g}
Exercice 3
Graphes eulériens
Problème
Peut-on parcourir la ville de
Königsberg en empruntant ces
7 ponts une et une seule
fois ?
La question devient :
Peut-on trouver une chaı̂ne
passant une et une seule fois
par toutes les arêtes de ce
graphe ?
Chaı̂ne Eulérienne
Définition
Soit G=(V,E) un graphe non orienté.
Une chaı̂ne eulérienne de G = chaı̂ne simple passant par toutes les arêtes de G
(càd une chaı̂ne passant une et une seule fois par toutes les arêtes de G).
Un cycle eulérien = chaı̂ne eulérienne ayant les mêmes extrémités.
Un graphe eulérien = graphe qui possède un cycle eulérien.
Remarque :
Un graphe admet une chaı̂ne ou un cycle eulérien ⇒ le graphe est connexe.
Un graphe admet un cycle eulérien ⇒ chacun de ses sommets a un degré pair.
Théorème
Soit G=(V,E) un graphe non orienté connexe.
Le graphe G admet un cycle eulérien si et seulement si tous ses sommets ont
un degré pair.
Le graphe G admet une chaı̂ne eulérienne qui n’est pas un cycle si et seulement
si tous ses sommets ont un degré pair sauf exactement deux d’entre eux.
Ces deux sommets particuliers seront les extrémités de cette chaı̂ne.
Les 4 sommets de ce
graphe ont des degrés
impairs
Il n’existe donc ni cycle
eulérien, ni chaı̂ne
eulérienne.
Le problème des ponts de
Königsberg n’a donc pas
de solution.
Exemple
On considère ensuite le sous-graphe de
G obtenu en supprimant ce cycle :
Chemin eulérien
Définition (Cas des graphes orientés)
Soit G=(V,E) un graphe orienté.
Un chemin eulérien de G est un chemin simple passant par tous les arcs de G,
c’est-à-dire un chemin passant une et une seule fois par tous les arcs de G.
Un circuit eulérien est un chemin eulérien ayant les mêmes extrémités.
Un graphe eulérien est un graphe possédant un circuit eulérien.
Théorème
Soit G=(V,E) un graphe orienté connexe.
Le graphe G admet un circuit eulérien si et seulement si tous ses sommets ont
un degré entrant égal à leur degré sortant.
Le graphe G admet un chemin eulérien qui n’est pas un circuit si et seulement si
tous ses sommets ont un degré entrant égal à leur degré sortant, sauf deux
d’entre eux x et y qui vérifieront
d+ (x ) = d (x ) − 1 et d+ (y ) = d (y ) + 1
Exercice 4 :
Les graphes suivants possèdent-ils un cycle eulérien ?
Graphes Hamiltoniens
Définition
Soit G=(V,E) un graphe orienté ou non.
Une chaı̂ne, un chemin, un cycle ou un circuit de G sont dits hamiltoniens s’ils
passent une et une seule fois par tous les sommets de G.
Un graphe hamiltonien est un graphe non orienté possédant un cycle
hamiltonien ou un graphe orienté possédant un circuit hamiltonien.
Ce graphe non orienté est hamiltonien Ce graphe orienté est hamiltonien car il
car il possède le cycle (A,E,B,C,D,F,A). possède le cycle (E,D,C,B,A,F,E).
Histoire :
Question (1859) par Sir William Rowan Hamilton (1805-1865).
Question : Peut-on parcourir ce dodécaèdre en passant une et une seule fois par
chacune de ses villes et en revenant au point de départ ?
Proposition
Soit G=(V,E) un graphe non orienté.
Si G possède un sommet de degré 1, il ne peut pas être hamiltonien.
Preuve. C’est évident, car pour qu’un graphe possède un cycle hamiltonien on doit
pouvoir arriver et repartir par n’importe quel sommet, et donc le degré de chacun des
sommets doit être au moins égal à 2. ! !
Condition de Dirac
Soit G=(V,E) un graphe non orienté d’ordre n, avec n ≥ 3.
Si pour tout sommet x de G on a d(x ) ≥ n/2 alors G est
hamiltonien.
Exemple
Exercice 5 :
Les graphes suivants possèdent-ils un cycle hamiltonien ?
Définition
Soit un graphe simple non-orienté G = (V , E ). Une coloration de
G est une fonction associant à tout sommet de G une couleur telle
que deux sommets adjacents n’ont pas la même couleur.
graphe G = (V , E )
3-coloration légale
k-coloration de G = (V , E )
ENSAM–Meknès M. El Ossmani Optimisation des graphes 2023–2024 45/97
Notions de base
Définitions
Flot maximal
Emplois du temps
Allocation de créneaux horaires à des événements : cours, examens...
Problème de compatibilité
Nombre chromatique
Définition
Soit G = (V , E ) un graphe non orienté. Le nombre chromatique
de G est le nombre minimal de couleurs permettant de le colorer.
On le notera χ(G).
Propriété
Le nombre chromatique d’un
graphe non orienté complet à n
sommets est n.
Preuve
Raisonnons par l’absurde
Problème de coloration
Exemple : coloration
Puis le sommet D en vert
On choisit une couleur pour pause
A : rouge.
On applique l’algorithme :
x A C B D E G F H
d(x) 5 5 4 4 4 4 3 3
Exercice 6
Combien de couleurs ?
ENSAM–Meknès M. El Ossmani Optimisation des graphes 2023–2024 59/97
Notions de base
Définitions
Flot maximal
Correction
Appliquons l’algorithme de
Trouvons une autre Coloration
Welsh et Powell
avec moins de couleurs ?
4 Couleurs
3 Couleurs
N.B. Ce n’est pas optimal
N.B. C’est optimal
Solution
Question : De combien de places assises doit disposer la bibliothèque pour que chacun
ait pu travailler correctement au cours de cette journée ?
Un lycée doit organiser les horaires des examens. On suppose qu’il ya 7 épreuves à
planifier, correspondant aux cours numérotés de 1 à 7 et que les paires de cours
suivantes ont des étudiants communs : (1 et 2), (1 et 3), (1 et 4), (1 et 7), (2 et 3),
(2 et 4), (2 et 5), (2 et 7), (3 et 4), (3 et 6), (3 et 7), (4 et 5), (4 et 6), (5 et 6), (5
et 7) et enfin (6 et 7).
Question : Comment organiser ces épreuves de façon qu’aucun étudiant n’ait à passer
deux épreuves en même temps et cela sur une durée minimale ?
Graphes valués
Définition
Un graphe valué (ou pondéré) est un graphe G = (V , E , w ), où w : E → R :
{u, v } 7→ w ({u, v }) est une fonction affectant à chaque arête une valeur réelle
(appelée coût, poids ou longueur).
• Le coût d’un chemin dans un graphe valué est la somme des coûts des arcs qui le
compose
CNS d’existence
Soient i et j deux sommets de G tels qu’il existe un chemin de i à j. Le problème du
pcch de i à j a une solution si et seulement s’il n’existe pas dans le graphe de circuit
absorbant (tel qu’il existe un chemin de i à j contenant un des sommets du circuit).
Initialisation :
On construit un tableau ayant pour colonnes chacun des sommets du graphe. On ajoute à gauche une
colonne qui recensera les sommets choisis à chaque étape (cette colonne est facultative mais facilitera la
compréhension de l’algorithme).
Puisque l’on part du sommet M, on inscrit, sur la première ligne intitulée Départ , 0M dans la
colonne M et ∞ dans les autres colonnes.
Cela signifie qu’à ce stade, on peut rejoindre M en 0 minute et on n’a rejoint aucun autre sommet puisque
l’on n’a pas encore emprunté de chemin...
Étape 1 :
On sélectionne le plus petit résultat de la dernière ligne. Ici, c’est 0M qui correspond
au chemin menant au sommet M en 0 minute.
On met en évidence cette sélection (nous l’écrirons en rouge mais il est
également possible de la souligner, de l’entourer, etc.).
On inscrit le sommet retenu et la durée correspondante dans la première
colonne (ici on écrit M(0)).
On désactive les cases situées en dessous de notre sélection en les grisant par
exemple. En effet, on a trouvé le trajet le plus court menant à M ; il sera inutile
d’en chercher d’autres.
Étape 2 :
On sélectionne le plus petit résultat de la dernière ligne. Ici, c’est 4M qui correspond au chemin menant au
sommet N en 4 minute.
On met en évidence cette sélection.
On inscrit le sommet retenu et la durée correspondante dans la première colonne : N(4).
On désactive les cases situées en dessous de notre sélection. On a trouvé le trajet le plus court menant à
N ; il dure 4 minutes.
À partir de N, on peut rejoindre L et S (on ne se préoccupe plus de M qui a été désactivé ).
Si l’on rejoint L : On mettra 2 minutes pour aller de N à L et 4 minutes pour aller de M à N (ces 4
minutes sont inscrites dans la première colonne) soit au total 6 minutes. Ce trajet est plus rapide que le
précédent qui durait 7 minutes. On indique donc 6N dans la colonne L. Le N situé en indice signifie que
l’on vient du sommet N.
Si l’on rejoint S : On mettra 8 minutes pour aller de N à S et 4 minutes pour aller de M à N soit au total
12 minutes. Ce trajet est plus rapide que le précédent qui était ∞. On indique donc 12N dans la
colonne S.
Puis on complète la ligne en recopiant dans les cellules vides les valeurs de la ligne précédente.
Étape 3 :
On sélectionne le plus petit résultat de la dernière ligne. Ici, c’est 6N qui correspond au chemin menant au
sommet L en 6 minute.
On met en évidence cette sélection.
On inscrit le sommet retenu et la durée correspondante dans la première colonne : L(6).
On désactive les cases situées en dessous de notre sélection. On a trouvé le trajet le plus court menant à
L ; il dure 6 minutes.
À partir de L, on peut rejoindre E et S (on ne se préoccupe plus de M ni de N qui ont été désactivés ).
Si l’on rejoint E : On mettra 8 minutes pour aller de L à E et 6 minutes pour aller de M à L soit, au total,
14 minutes.
Ce trajet N’EST PAS plus rapide que le précédent qui durait 10 minutes. On se contente donc de
recopier le contenu précédent 10M dans la colonne E.
Si l’on rejoint S : On mettra 5 minutes pour aller de L à S et 6 minutes pour aller de M à L soit au total
11 minutes. Ce trajet est plus rapide que le précédent qui durait 12 minutes. On indique donc 11L dans la
colonne S.
Important !
On inscrit la durée d’un trajet dans le tableau uniquement si elle est inférieure à la durée figurant sur la ligne
précédente. Dans le cas contraire, on recopie la valeur précédente.
Puis on complète la ligne en recopiant dans les cellules vides les valeurs de la ligne précédente.
Étape 4 :
On sélectionne le plus petit résultat de la dernière ligne. Ici, c’est 10M qui correspond au chemin menant au
sommet E en 10 minute.
On met en évidence cette sélection.
On inscrit le sommet retenu et la durée correspondante dans la première colonne : E (10).
On désactive les cases situées en dessous de notre sélection. On a trouvé le trajet le plus court menant à
E ; il dure 10 minutes.
À partir de E, on peut rejoindre S et T (on ne se préoccupe plus des autres sommets qui ont été désactivés ).
Si l’on rejoint S : On mettra 10 minutes pour aller de E à S et 10 minutes pour aller de M à E ( c’est 10
minutes sont inscrites dans la première colonne) soit, au total, 20 minutes.
Ce trajet N’EST PAS plus rapide que le précédent qui durait 11 minutes. On se contente donc de
recopier le contenu précédent 11L dans la colonne S.
Si l’on rejoint T : On mettra 4 minutes pour aller de E à T et 10 minutes pour aller de M à E soit au total
14 minutes. Ce trajet est plus rapide que le précédent qui était ∞. On indique donc 14E dans la colonne
T.
Étape 5 :
On sélectionne le plus petit résultat. C’est 11L qui correspond au chemin menant au sommet S en 11 minutes.
On a trouvé le trajet le plus court menant à S : il dure 11 minutes. Comme c’est la question posée dans l’énoncé, il
est inutile d’aller plus loin et le tableau est terminé !
Il reste toutefois à reconstituer le trajet qui correspond à cette durée de 11 minutes. En pratique, il est plus facile
de trouver le trajet en sens inverse en remontant dans le tableau de la façon suivante :
On part de notre point d’arrivée : S
On recherche la cellule marquée en rouge de la colonne S ; elle contient 11L . On note la lettre écrite en
indice : L.
On recherche la cellule marquée en rouge de la colonne L ; elle contient 6N . On note la lettre écrite en
indice : N.
On recherche la cellule marquée en rouge de la colonne N ; elle contient 4M . On note la lettre écrite en
indice : M.
On est arrivé à notre point de départ M après être passé par N et L et S (liste obtenue en listant les sommets en
ordre inverse).
Le trajet optimal est donc M - N - L - S.
Enfin, on peut vérifier sur le graphe que ce trajet est correct et dure 11 minutes !
Algorithme de Dijkstra
Exemple 1 :
Appliquer l’algorithme de Dijkstra sur ce graphe en prenant E
comme sommet de départ.
E A B C D S
Départ 0E ∞ ∞ ∞ ∞ ∞
Algorithme de Dijkstra
Exemple 2 :
Appliquer l’algorithme de Dijkstra sur ce graphe pour trouver le PCCH allant de E vers
A.
E A B C D
Départ 0E ∞ ∞ ∞ ∞
Algorithme de Dijkstra
Exercice :
Appliquer l’algorithme de Dijkstra aux graphes suivant pour
calculer les chemins de poids minimum depuis le sommet A.
Combien d’itérations sont réalisés ?
Algorithme de Dijkstra
Exercice :
On considère un réseau de télécommunication, composé
d’émetteurs/récepteurs pouvant s’envoyer des messages, avec une
certaine fiabilité de communication, c’est à dire une certaine probabilité
pour que la communication ne soit pas interrompue. On modélise ce
problème à l’aide du graphe orienté et valué suivant, où la valuation d’un
arc est une valeur réelle comprise entre 0 et 1 et indiquant la probabilité
pour que la communication se passe sans problème.
Quel est le chemin le plus fiable pour envoyer un message de a vers i ?
Algorithme de Dijkstra
L’algorithme de Dijkstra ne marche pas toujours quand le graphe contient des arcs
dont les coûts (longueurs) sont négatifs. Considérons par exemple le graphe suivant :
Algorithme de Bellman-Ford
Une autre méthode qui est largement utilisée pour trouver le plus court chemin et
surtout quand le graphe possède des poids négatifs.
Algorithme :
1 Les sommets x0 sans précédents sont dit du ‘1er niveau’ ou niveau de départ :
on leur affecte une fonction coût (ou distance), notée m, égale à 0 :m(x0 ) = 0
2 Examiner les nœuds x1 adjacents aux nœuds x0 . Pour chacun, la fonction m se
calcule en ajoutant la distance à partir du nœud source par :
Exemple d’illustation
Exercice :
Trouver le plus cout chemin en utilisant l’algorithme de Bellman-Ford
Flot maximal
Un premier problème est de déterminer s’il est possible de satisfaire à travers ce réseau la demande des 3
villes et comment ?
Pour résoudre ce problème il faut dans un premier temps le modéliser.
Pour cela, nous introduisons un nouveau problème standard qui est celui du flot maximal sur un réseau
Réseau de transport
Définition
Un Réseau de transport est un quadruple (G, c, S, T ) tel que
G = (V , A) est un graphe orienté,
c : A → R+ est une fonction qui associe à chaque arc sa capacité,
S ∈ V est la source,
T ∈ V est le puits.
Le problème de flots dans les graphes concerne la circulation de matière sur les arcs.
circulation d’information à travers les réseaux de communication,
circulation du courant dans les réseaux électriques,
circulation de marchandises entre différents points, etc.
Un flot d’un réseau de transport (G, c, s, t) est une fonction f : V 2 → R telle que
1 Contrainte de capacité :
2 Conservation du flot :
X X
f (v , u) = f (u, v ), ∀u ∈ V − {s, t}.
v ∈Pred(u) v ∈Succ(u)
La valeur d’un flot f , notée |f |, est égale à la somme des flots partant de la source, et
du fait de la propriété de conservation des flots, est aussi égale à la somme des flots
arrivant au puits : X X
|f | = f (s, u) = f (u, t)
u∈Succ(s) u∈Pred(t)
Capacité résiduelle
La capacité résiduelle d’un arc (u, v ) est rf (u, v ) = c(u, v ) − f (u, v ).
Un arc (u, v ) est dit saturé si f (u, v ) = c(u, v ) (i.e. rf (u, v ) = 0).
Un flot est dit complet si et seulement si tout chemin de S à T comporte au
moins un arc saturé.
Chaine améliorante
Une chaı̂ne µ est dite améliorante si pour chaque arrête (u, v ) ∈ µ
• f (u, v ) < c(u, v ) si (u, v ) est arc dans ”le bon sens” ((u, v ) ∈ µ+ )
• f (u, v ) > 0 si (u, v ) est arc dans ”le mauvais sens” ((u, v ) ∈ µ− )
St-coupe
Une St-coupe est une partition (X , Y ) des sommets de G telle que s ∈ X et t ∈ Y .
La capacité c(X , Y ) d’une st-coupe (X, Y) est définie comme la somme de capacités des arcs
(u, v ) tels que u ∈ X et v ∈ Y , et on a |f | ≤ c(X , Y ).
Application
Pour modéliser les capacités des châteaux d’eau, on introduit un sommet supplémentaire s, qui sera la source du
réseau, et deux arcs (s, C1) et (s, C2) avec une capacité supérieure égale à 100. La conservation des flux au
sommet C1 permet de traduire qu’il ne peut pas partir de C1 une quantité supérieure à 100. Il en est de même pour
C2. Si on veut mesurer ce qui arrive en chaque ville, on introduit un sommet supplémentaire p, qui sera le puits, et
des arcs de chacune des villes vers p. Pour imposer que les demandes des villes soient satisfaites, on munit ces arcs
d’une capacité inférieure égale à la demande. Ce qui part de chaque ville sera au moins égal à la demande et,
d’après la loi de conservation des flux, ce qui arrive en chaque ville sera aussi au moins égal à la demande. A l’arc
de retour près, on a construit un réseau sur lequel il s’agit de déterminer un flot compatible avec les capacités et de
valeur maximale
MAIS
Idéée générale :