Compare Document
Compare Document
Compare Document
Graphes et Optimisation
2ème année
LISI LSI
Institut Supérieur des Sciences Appliquées et de Technologie de Sousse
A.U. 2023-2024
22
8 décembre
novembre2023
2023
Table des matières
1 Les graphes 3
1.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Graphes non orientés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Graphes orientés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Opérations et quelques types de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Représentation d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 Listes d’adjacences (ou de succession) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.2 Matrices d’adjacence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.3 Matrice d’incidence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 La connexité 11
2.1 Les chaînes et les cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Graphe connexe, eulérien, hamiltonien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1 Codage et décodage d’un arbre – Prüfer code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.2 Arbre couvrant de poids minimum – ACM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Programmation linéaire 27
4.1 La méthode simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.1 Solution de base admissible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.2 L’algorithme du simplexe avec la méthode des tableaux . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.3 Initialisation - Phase I du simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 Dualité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2
C HAPITRE 1
Les graphes
L’exemple classique pour introduire la théorie des graphes est le problème des ponts de Königsberg, étudié par
Euler en 1736. Quel itinéraire doit-on suivre pour traverser chaque pont exactement une fois ? Une telle prome-
nade n’existe pas, et c’est Euler qui donna la solution de ce problème en caractérisant les graphes que l’on appelle
aujourd’hui eulériens.
A e5
e1 e2
e7
B D
e3 e4
C e6
Les graphes introduisent une simplification : les régions se transforment en des "points" (aussi appelés noeuds
ou sommet), les ponts se transforment en des lignes (aussi appelées arêtes ou arcs), et ce principe s’applique dès
lors qu’une relation existe entre des objets. Les graphes relèvent de la combinatoire plutôt que de la géométrie (les
intersections, les longueurs, et la forme des arêtes n’ont aucune importance, sauf en ce qui concerne la lisibilité de
la représentation).
1.1 Définitions
Dans la suite, il est toujours supposé que les graphes sont finis, sauf indication contraire.
Un graphe G est un couple d’ensembles (V, E ) où l’ensemble E est une partie de V {2} des pairs non ordon-
nées de V . V est l’ensemble des noeuds (Vertices en anglais) et E c’est l’ensemble des arêtes de G (Edges en
anglais). Lorsque e = {x, y} est une arête, on dit que x, y sont les extrémités de cette arête, que e est incidente
en x et en y. On joint x et y par un trait et on dit que x, y sont adjacents (ou voisins). On note aussi e = x y ou
encore e = (x, y) (attention, dans ce cas : (x, y) = (y, x)).
Si G est un graphe alors, on note par V (G) l’ensemble de noeuds et par E (G) l’ensemble des arcs.
Remarque 1.
— Une arête e = {x, x} s’appelle boucle.
— Dans un graphe, il peut exister des arêtes parallèles (on parle donc de multigraphe).
Dans l’exemple des ponts on a : e 1 = e 2 = (A, B ).
3
4 Chapitre 1. Les graphes
— Un graphe est dit simple s’il ne comporte ni arêtes multiples ni de boucles, c’est-à-dire chaque paire de nœuds
distincts est reliée par au plus une arête, ou encore E (G) ⊆ P2 (G).
Dans la plupart des cas, les graphes sont considérés comme simples par défaut.
v(G) = |V |
e(G) = |E |
3. Le degré (ou valence) d’un sommet x noté d (x) est le nombre d’arêtes contenant x. (Attention ! Une
boucle sur un sommet compte double).
Si on note par Γ(x) l’ensemble des voisins de x, i.e.
Γ(x) = {y ∈ V : x y ∈ E }
b1 b2 b3
a1 a2 a3 a4
Dans ce théorème d (x) est le nombre de personnes à qui x serre la main et e(G) le nombre total de poignées
de mains.
H. SABRI 5
Preuve.
P
• Méthode simple Il y en a d (x) arêtes en un sommet x fixé. Pour tout les sommets cela fait donc x∈V (G) d (x).
Mais avec cette manière chaque arête est comptée deux fois, une fois à chacune de ses extrémités, d’où le
résultat en divisant par 2.
• Preuve par double dénombrement On pose
Z = {(x, e) ∈ V × E : x ∈ e} ⊆ V × E
où f −1 [b] désigne l’image réciproque de {b} par f (pourquoi ˙ b∈B f −1 [b] est une union disjointe ?).
S
Ainsi on obtient : X −1 X −1
|Z | = |p [x]| = |q [e]|
x∈V e∈E
−1 −1
Or, |p [x]| = d (x) et |q [e]| = |{x ∈ V : x ∈ e}| = 2. Donc :
X X
d (x) = 2 = 2|E |
x∈V e∈E
Remarque 2.
— Un sommet de degré 0 est appelé sommet isolé.
— Un graphe tel que : ∀x ∈ V, d(x) = k est dit graphe k-régulier.
— Le graphe complet K n est un graphe (n − 1)-régulier.
Exercice 1.1
Montrer que dans un graphe le nombre de sommets d’ordre impairs est toujours pair. En particulier un
graphe k-régulier avec k impaire est un graphe d’ordre pair.
Proposition 1.1
Soit G = (V, E ) un graphe (simple) d’ordre n ≥ 2. Alors :
Preuve. Supposons le contraire, c’est-à-dire ∀u, v ∈ V ; d (u) ̸= d (v). Or dans un graphe (simple) on a toujours d (x) ∈
{0, 1, . . . , n − 1}. Dans ce cas, puisque tous les n sommets ont des degrés distincts, alors il existe une bijection
{d (x) : x ∈ V } ←→ {0, 1, . . . , n − 1}
Donc, il existe un sommet u avec un degré 0, et un sommet v avec degré n −1, donc v est connecté à tous les autres
sommets du graphe, ce qui signifie que u ne peut pas être un sommet isolé, d’où une contradiction.
6 Chapitre 1. Les graphes
→
−
Un graphe orienté G (ou G ) est un couple d’ensembles (V, E ) où l’ensemble E est une partie de V 2 des pairs
ordonnées de V . E est l’ensemble des arêtes (ou flèches, arcs) de G. Lorsque e = (x, y) est une arête, on dit
que x est l’origine (ou sommet initiale) et y l’extrémité (ou sommet terminale) de e, que e est sortant en x
et incident en y, et que y est un successeur de x tandis que x est un prédécesseur de y. On note l’arête e
par :
e = (x, y) = −
x→
y =x→y
De la même façon, une arête x → x est une boucle. On peut toujours supprimer les boucles pour obtenir des
digraphes simples. Voici l’exemple d’un digraphe G = (V, E ) d’une fonction f : E → E où (x, y) est un arc si et seule-
ment si y = f (x). On l’appelle digraphe fonctionnelle.
0 8 9
16
3 14
10 13
4
12 6
1 2 15
11 5
Comme dans les graphes on peut définir les degrés (entrant, sortant) d’un sommet dans un digraphe.
Dans un graphe orienté, les voisins d’un sommet v sont soit des successeurs ou des prédécesseurs. On les notes
par :
Proposition 1.2
Soit G un digraphe, alors :
d − (v) = d + (v) = |E |
X X
v∈V v∈V
Preuve. On a
E = ˙ {• → v} = ˙ {v → •}
[ [
v∈V v∈V
d − (v) = d + (v)
X X X X
=⇒ |E | = |{• → v}| = |{v → •}| =⇒ |E | =
v∈V v∈V v∈V v∈V
Graphe valué
Tout d’abord, on peut vouloir attribuer des valeurs aux arcs ou arêtes pour tenir compte de contraintes : dis-
tance, coût ...
Un (di)graphe valué G = (V, E , w) est un (di)graphe muni d’une application w : E → R. L’application w est
appelée application poids ou coût. On indique sur chaque arête son poids (ou son coût). On note w(x, y)
au lieu de w((x, y)). On convient (même que ceci n’a pas de sens !) que w(x, y) = +∞ si (x, y) ∉ E .
b
3
5 c
1 3 5
a
4
d 3 f
3
3 8
e
3Python code : -
Implémenter le digraphe valué précédent avec python. Indice – use chatGPT : how to build a weighted digraph with
python
8 Chapitre 1. Les graphes
Sous graphes
Soit G = (V, E ) un graphe (orienté ou non). Un sous graphe de G est un graphe de la forme G ′ = (V ′ , E ′ ) où
V ⊆ V, E ′ ⊆ E tels que toute arête de E ′ a ses extrémités dans V ′ (ou encore G ′ est aussi un graphe). On a :
′
En d’autres termes, deux sommets de G ′ qui sont connectés dans G, sont également connectés dans G ′ .
• Sous-graphe couvrant Un sous-graphe couvrant G ′ de G contient tous les sommets de G, i.e. V ′ = V .
• G − v Supprimer un sommet v d’un graphe G consiste à supprimer v et toutes ses arêtes incidentes. Le sous-
graphe obtenu de cette opération est noté G − v, i.e.
De manière similaire, une arête e peut être supprimée (resp. ajoutée) d’un graphe G, et le sous-graphe
résultant est représenté par G −e (resp. G +e). Notez que la suppression d’une arête ne retire pas de sommets
du graphe.
• G − V′ = G[V′ ] On supprimer tous les sommets v ∈ V ′ du graphe G avec les arêtes incidentes. Le sous-graphe
obtenu de cette opération est noté G[V ′ ], i.e.
• Clique Une clique C d’un graphe G est un sous-ensemble des sommets de G dont le sous-graphe induit G ′ =
(C , E ′ ) est un graphe complet, en d’autres termes, deux sommets quelconques de la clique C sont toujours
adjacents.
• Stable Un stable – appelé aussi ensemble indépendant (independent set en anglais) est un ensemble de som-
mets deux à deux non adjacents. Donc le sous-graphe induit est sans arcs.
F IGURE 1.5 – L’ensemble des sommets en bleu dans ce graphe est un stable maximal du graphe.
Note : -
Le problème décisionnel de la clique (c’est à dire existe t-il une clique de taille k) est NP-complet. De même la
recherche d’un stable de taille maximum dans un graphe est un problème NP-complet et difficile à approximer.
Exercice 1.2
Trouver un plus grand stable et une plus grande clique du graphe suivant :
7 2 8
3 4
5 1 6
Opérations binaires
Union L’union de deux graphes G = (VG , EG ) et H = (V H , E H ) est un graphe F = G ∪ H = (VF , E F ) dans lequel
VF = VG ∪ V H et E F = EG ∪ E H
VF = VG ∩ V H et E F = EG ∩ E H
2 4
1 2 3 4 5
2 3
3 4
4 −
5 1 4
10 Chapitre 1. Les graphes
Soit G = (V, E ) un graphe (orienté) d’ordre n. On peut numéroter V = {1, 2, . . . , n}. La matrice d’adjacence
de G est la matrice carrée A = (a i j ) d’ordre n, définie par :
(
1 si (i j ) ∈ E ;
ai j =
0 sinon.
Remarque 3.
1. Si le graphe G est non orienté et simple, alors la matrice A est symétrique avec des 0 sur la diagonale. Pour un
digraphe simple, on a toujours des 0 sur la diagonale, mais la matrice n’est pas symétrique en général.
2. Pour les multigraphes, il peut y avoir des termes diagonaux (pour les boucles) et s’il y a plusieurs arêtes de i à
j , le coefficient de la matrice a i j est le nombre d’arêtes de i à j .
3. Pour un (di)graphe valué G = (V, E , w), on pose :
(
w(i , j ) si (i j ) ∈ E ;
ai j =
∞ sinon.
• Si G non-orienté (
1 si v i est une extrémité de e j ;
bi j =
0 sinon.
Exercice 1.3
La connexité
Il est important de savoir si on peut suivre un chemin d’un sommet donné à un autre dans un graphe donné.
Cette propriété (de connexité) doit être maintenue dans différents types de réseaux.
Example 2.1
abxcd xa est une chaîne simple et fermée (non cycle !) de longueur 6 (mais, c’est un graphe eulérien - voir
plus loin). Y a-t-il un cycle de longueur 3, 4 ?
Ï
a b
d c
Remarque 4.
1. On peut pivoter une chaine fermée (l’orienter de manière arbitraire) , i.e.
11
12 Chapitre 2. La connexité
Théorème 2.1
S’il existe une chaîne du sommet y au sommet z dans le graphe G, où y ̸= z, alors il existe une chaîne élé-
mentaire (path) dans G avec pour premier sommet y et pour dernier sommet z.
Si les sommets x 0 , x 1 , . . . , x n sont tous distincts, alors W1 est une chaîne élémentaire, et nous avons terminé. Sinon,
il existe x i = x j (i < j ) et on écrit :
W2 = x 0 x 1 . . . x i x j +1 . . . x n .
Alors, l (W2 ) < l (W1 ). Si W2 ne contient aucun sommet répété, alors c’est la chaîne recherché. Sinon, par la même
procédure, il existe W3 (y z−chaîne) tel que
Ce processus doit s’arrêter à un certain stade, car chaque chaîne est plus courte que la précédente et la longueur
ne peut jamais être inférieure à 1
1 < · · · < l (Wk ) < · · · < l (W3 ) < l (W2 ) < l (W1 ).
Ainsi, pour un certain k, Wk ne peut pas être réduit en longueur. Donc, la chaîne Wk ne contient aucun sommet
répété et est donc une y z−chaîne élémentaire (path).
Exercice 2.1
v3 v5
v1 v2 v4
v6
v9 v8 v7
Calculer d (v 1 , v 7 ) et le diamètre de G.
3 python : >> G = nx.Graph([(1, 2), (2, 3), (2, 4), ...]) >> nx.diameter(G)
Théorème 2.2
Un graphe est biparti si et seulement s’il ne contient aucun cycle de longueur impaire.
Preuve.
⇒ On suppose que G = U ∪V ˙ est un graphe biparti. Soit W =< x 1 , x 2 , . . . , x 2k+1 , x 1 > un cycle de longueur im-
paire (2k + 1). Si x 1 ∈ U , alors
x 1 ∈ U =⇒ x 2 ∈ V =⇒ x 3 ∈ U =⇒ · · · =⇒ x 2k+1 ∈ U =⇒ x 1 ∈ V .
Exercice 2.2
Vérifier si le graphe maison est un graphe biparti. Faire de même pour la grille G 4,4 .
maison grille
Un graphe est dit connexe si deux points peuvent toujours être joints par une chaîne, i.e.
— Une composante connexe d’un graphe est un sous-graphe induit maximal connexe.
— Un point d’articulation d’un graphe est un sommet dont la suppression augmente le nombre de
composantes connexes.
a b e
d c f g
n’est pas connexe car il n’existe pas de chaîne entre les sommets a et e. On a donc 2 composantes connexes. En
revanche, le sous-graphe induit par les sommets {a, b, c, d } est connexe dont a est le seul point d’articulation.
Remarque 5.
1. Un graphe connexe à n sommets possède au moins n − 1 arêtes (faite une preuve par récurrence).
2. L’algorithme de parcours en profondeur permet de déterminer si un graphe est connexe ou non.
3. Même définitions dans un graphe orienté. Graphe orienté (fortement) connexe et de composante connexe.
— Une chaîne joignant deux sommets x et y est dite chaîne eulérienne si elle emprunte chaque arête
de G une et une seule fois. On parle de chemin eulérien dans le cas d’un graphe orienté.
— Un cycle eulérien est une chaîne eulérienne dont les extrémités coïncident. Un graphe qui admet
un cycle (resp. circuit) eulérien est dit graphe eulérien.
f Remarquer qu’un cycle eulérien n’est pas forcément un cycle comme définit dans la définition 2.1
Si un graphe (ou multigraphe) G possède une chaîne eulérienne, alors soit G possède deux sommets impairs, le
début et la fin de cette chaîne, soit G n’a aucun sommet impair, et la promenade d’Euler commence et se termine
au même point (cycle eulérien). Une autre condition nécessaire évidente est que G doit être connexe. Ces deux
conditions sont ensemble suffisantes.
Preuve.
⇐ On commence par la réciproque. S’il existe une chaîne eulérienne µ(x, y), alors on peut crée une arête fictive
e = (y, x) et par la suite on obtient un cycle eulérien. Donc il suffit de montrer que si G admet un cycle
eulérien alors tous les sommets sont de degré pair.
Soit W =< v 1 , v 2 , . . . , v n , v 1 > un cycle eulérien. Soit le sommet v j avec j ̸= 1, il est donc claire que chaque
fois v j apparaît dans W , il ya deux arcs distincts incidents en v j ( (•, v j ) et (v j , •)). Comme toutes les arêtes
sont utilisées, on voit que d (v j ) est pair. Même chose pour v 1 car on ajoute deux arcs (v 1 , v 2 ) et (v 1 , v n ).
⇒ On suppose que tous les sommets sont de degré pair. Montrons que G admet un cycle eulérien. Puisque
tous les sommets sont de degré pair on peut construire d’abord une chaîne simple fermée (quelconque)
W1 =< v 1 , v 2 , . . . , v k , v 1 >
Si W1 contient chaque arête de G, alors c’est finis, c’est un cycle eulérien. Sinon (puisque G est connexe), il
existe une arête e = (v i , c) qui n’est pas dans W1 (avec v i sommet de W1 ). On pose le sous-graphe
G ′ = G − { arêtes de W1 }
H. SABRI 15
Il est donc claire que les sommets de G ′ sont aussi de degré pair. Alors, par la même procédure on construit
une chaîne simple fermée dans G ′ de la forme : < v i , c, d , . . . , v i > et par la suite on insère cette chaîne dans
W1 pour obtenir :
W2 =< v 1 , v 2 , . . . , vi , c, d, . . . , vi , v i +1 , . . . , v k , v 1 >
Si l (W2 ) < |E (G)|, on construit W3 de longueur plus grand. Ainsi, on a :
Donc, nécessairement, il existe Wk (chaîne simple fermée de longueur |E (G)|) donc c’est un cycle eulérien.
Finalement, si ∃a, b ∈ V (G) : d (a) ≡ d (b) ≡ 1 mod 2, et tous les autres sommets sont de degré pair, alors on
pose :
G ′ = G + {a, b}
et donc tous les sommets de G ′ sont de degré pair. Avec la construction précédente, il existe un cycle eulérien
dans G ′ :
W =< a, b, v 1 , . . . , a >
est donc la chaîne < b, v 2 , . . . , a > est une chaîne eulérienne dans G.
Algorithme 1 : Euler
Entrées : G un graphe eulérien
Output : Un cycle eulérien W
/* On suppose que G est eulérien, i.e. les sommets sont de degré pair */
1 G aux ← G ; W ← µ(v, v) une chaîne simple (quelconque) de G ; // Initialisation
2 tant que l (W ) < e(G) faire
3 G aux ← G − { arêtes de W } ;
4 Choisir (x, c) ∈ E (G aux ) tel que x ∈ W ;
5 L ←< x, c, . . . , x > une chaîne simple de G aux ;
6 Dans W , remplacer (juste ce) x par la séquence L;
7 fin
8 retourner W ;
Exercice 2.3
1. Montrer que le graphe de l’exercice 2.1 est un graphe eulérien et donner un cycle eulérien.
2. Tracer cette maison d’un seul trait.
Remarque 7.
— Une chaîne hamiltonienne est une chaîne élémentaire de longueur n − 1.
— Un graphe peut être eulérien, hamiltonien, les deux à la fois, ou aucun des deux.
— De nombreux problèmes concrets peuvent être formulés en termes de recherche de parcours hamiltoniens : pro-
blème du voyageur de commerce (chercher un cycle hamiltonien de longueur totale minimale), l’ordonancement
de tâches.
— Le problème du chaîne hamiltonienne est un problème NP-complet.
Exercice 2.4
Aucune condition nécessaire et suffisante adéquate n’est connue pour l’existence de cycles hamiltoniens. Le
résultat suivant constitue une condition suffisante utile.
Preuve. On suppose que le théorème est faux. Alors, il existe un graphe G simple d’ordre n non hamiltonien tel que
d (u)+d (v) ≥ n pour tout sommets non adjacents u et v. On prend G un tel graphe d’ordre n de taille maximale qui
vérifie cette propriété (remarquer que le graphe complet K n est hamiltonien).
Soient u et v deux sommets non adjacents de G. Par maximalité de G, le graphe G + uv (d’ordre n) doit être
hamiltonien. Donc il existe dans G + uv un cycle hamiltonien :
W =< u, x 1 , x 2 , . . . , x n−2 , v, u >
u v
x1 x n−2
... ...
xi x i +1
Or, si ux i +1 ∈ E (G) et v x i ∈ E (G) (les arcs en rouge), alors on peut construire dans G le cycle hamiltonien :
< u, x 1 , x 2 , . . . , x i , v, x n−2 , . . . , x i +1 , u >
H. SABRI 17
Ceci est absurde car G est non hamiltonien. Donc si x i +1 est un sommet voisin à u, alors le sommet x i n’est pas
voisin de v :
x i +1 ∈ Γ(u) =⇒ x i ∉ Γ(v)
Donc :
et par la suite
d (u) + d (v) ≤ n − 1
2.3 Arbres
Définition 2.5: Arbres et forêts
On appelle arbre tout graphe (non orienté) connexe et acyclique. Les composantes connexes dans un
graphe acyclique sont des arbres et le graphe est dit forêt. Une feuille ou sommet pendant est un som-
met de degré 1.
Un graphe G est une arborescence s’il existe un sommet R appelé racine de G tel que, pour tout sommet
S de G, il existe un chemin et un seul de R vers S. Donc, c’est un arbre orienté dans lequel on choisit un
sommet R comme racine et on dirige les arcs vers le sens sortant de la racine.
Remarque 8.
— Un graphe G d’ordre n est un arbre ssi G est sans cycle et possède n − 1 arêtes.
— Un graphe G d’ordre n est un arbre ssi G est connexe et possède n − 1 arêtes.
— G est un arbre si pour chaque paire u, v de sommets distincts est reliée par une seule chaîne (donc chaîne
élémentaire d’après le théorème 2.1).
— Un arbre (ou forêt) est nécessairement un graphe simple.
Théorème 2.5
Soit G un graphe ayant m arêtes, n sommets et p composantes connexes, on définit nu(G) :
ν(G) = m − n + p
Alors, on a :
1. ν(G) ≥ 0.
2. ν(G) = 0 ⇐⇒ G est acyclique.
18 Chapitre 2. La connexité
Preuve. Par récurrence sur la taille m du graphe. Le résultat est évident pour m = 0 et m = 1. On suppose le résultat
est vrai pour les graphe de taille m, et montrons que ceci est vrai pour un graphe de taille m + 1. Soit donc G un
graphe d’ordre n de taille m + 1 ayant p composantes connexes.
• On suppose que G est un graphe acyclique. Soit uv une arête de G dans la composante C . Si on supprime uv,
la composante C se transforme en deux composantes connexes (sinon on a un cycle dans G). Par la suite,
le graphe G ′ = G − uv est un graphe acyclique d’ordre n, de taille m et ayant p + 1 composantes connexes.
Donc d’après l’hypothèse de récurrence :
ν(G ′ ) = 0 = (m − 1) − n + (p + 1) = m − n + p = ν(G)
• Maintenant, si G contient un cycle W dans la composante connexe C . Soit uv une arête de W , alors si on
supprime l’arête uv, la composante C reste connexe. Donc le graphe G ′ = G − uv est un graphe d’ordre n de
taille m − 1 ayant p composantes connexes. Donc, d’après l’hypothèse de récurrence :
ν(G ′ ) = (m − 1) − n − p ≥ 0
=⇒ ν(G) = m − n − p ≥ 1 > 0
D’où le résultat – car si ν(G) = 0, G ne peut être que acyclique, sinon 0 = ν(G) ≥ 1 .
Example 2.2
Donner le code de Prüfer de l’arbre :
5
4
3 6
Pour faire la réciproque, étant donnée une séquence P = (x 1 , x 2 , . . . , x n−2 ) où les x i ∈ {1, 2, . . . , n}, on construit
l’arbre T dont les sommets sont {1, 2, . . . , n} avec l’algorithme suivant (le décodage) :
H. SABRI 19
Example 2.3
Donner l’arbre dont le code de Prüfer est : P = (2, 3, 3, 3)
Puisqu’il ya une bijection entre les arbres d’ordre n et les suites P de longueur n−2 à coefficients dans {1, 2, . . . , n},
on déduit le théorème de Cayley :
Beaucoup de problèmes sur les graphes nécessitent que l’on parcourt l’ensemble des sommets et des arcs. Par
exemple, pour vérifier que le graphe est connexe, chercher un sommet particulier, construire un arbre couvrant,
trouver un plus court chemin ...etc.
Algorithme 5 : DFS_Component
Entrées : Un graphe G = (V, E )
Output : Les composantes connexes C = (C 1 ,C 2 , . . . ,C k ) de G.
1 VisitedNodes ← ;;
2 k ←0; // k est le nombre des composantes connexes
3 pour chaque u ∈ V faire
4 si u ∉ VisitedNodes alors
5 k ← k + 1;
6 DFS(u);
7 fin
8 fin
9 retourner (C 1 ,C 2 , . . . ,C k );
1 Procedure DFS(u )
2 VisitedNodes ← VisitedNodes ∪ {u};
3 C k ← C k ∪ {u};
4 pour chaque x ∈ Γ(u) faire
5 si x ∉ VisitedNodes alors
6 DFS(x);
7 fin
8 fin
Note : -
Il est possible de d’implémenter la procédure DFS itérativement à l’aide d’une pile LIFO (stack) contenant les
sommets à explorer : on désempile un sommet et on empile ses voisins non encore explorés.
20
H. SABRI 21
Pseudocode :
stack . push ( root )
while stack . isEmpty ( ) = f a l s e do
node = stack . pop ( ) // so mark i t as v i s i t e d
f o r each x in node . childNodes do
i f x i s not v i s i t e d then
stack . push ( x )
...
endfor
endwhile
a a a a a
b c b c b c b c b c
d e d e d e d e d e
f f f f f
g g g g g
a a a a
b c b c b c b c
d e d e d e d e
f f f f
g g g g
L’utilisation d’une file (FIFO) au lieu d’une pile transforme l’algorithme du parcours en profondeur en algo-
rithme de parcours en largeur (BFS). Avec BFS l’exemple précédent devient (en enfile le plus à gauche) :
a a a a a
b c b c b c b c b c
d e d e d e d e d e
f f f f f
g g g g g
a a a a
b c b c b c b c
d e d e d e d e
f f f f
g g g g
22 Chapitre 3. Les algorithmes de base
Exercice 3.1
On sait qu’un graphe orienté G = (V, E ) est fortement connexe si pour chaque paire de sommets u, v ∈ V , il
existe un chemin de u à v et il existe un chemin de v à u. En d’autres termes, nous avons besoin d’une connectivité
dans les deux directions.
Une procédure pour tester si un graphe orienté est fortement connexe ou non peut être conçue avec l’idée
suivante. En partant d’un sommet arbitraire v du graphe G, on exécute l’algorithme BFS ou DFS et l’on note les
sommets visités. Ensuite, on obtient la transposée de G, G T , en inversant la direction des arêtes de G, et l’on
exécute à nouveau l’algorithme BFS ou DFS à partir du sommet v. Si les sommets visités dans les deux cas sont
égaux à V , alors le graphe orienté est fortement connexe. Cette méthode est illustrée dans l’algorithme 6.
Algorithme 6 : Fortement_connexe
Entrées : Un graphe orienté G = (V, E )
Output : true si G est fortement connexe et false sinon
1 X ← ;;
2 Y ← ;;
3 v ← un sommet quelconque de V ;
4 X ← DFS(G, v) ; // Enregistrez les sommets visités dans X
5 G T ← G avec flèches inversées;
6 Y ← DFS(G T , v);
7 si X = Y = V alors
8 retourner TRUE.
9 sinon
10 retourner FALSE.
11 fin
Théorème 3.1
Soit G = (V, E ) un (di)graphe. On note V = {1, 2, . . . , n} et A sa matrice d’adjacence et A k la puissance k-ème
de A. Alors le terme d’indices i , j de A k est le nombre de chemins (chaînes) de longueur k allant de i à j .
Preuve. Par récurrence sur k. Pour k = 1 c’est clair. On suppose le résultat est vrai à l’ordre k et montrons qu’elle
est vrai pour k + 1. Soit S = (s i , j ) = A k . Si on a un chemin de i à j de longueur k + 1, alors on va d’abord de i à un
sommet r avec k pas et puis de r à j . Or d’après l’hypothèse de récurrence on a s i ,r chemins possibles pour aller de
i à r et finalement a r, j pas (1 ou 0) pour aller de r à j . Ainsi, le nombre totale possibles (i.e. tous les sommets r ) est :
n ³ ´
s i ,r a r, j = A k × A
X
r =1 i,j
H. SABRI 23
11 fin
12 fin
13 fin
Example 3.3
Voici une application de l’algorithme de Dijkstra au digraphe suivant. On prend E comme sommet racine.
A 2 D
5 1 2 5
4
G
E B 1 S
4
4
2 1 3 7
C 2 F
1. En effet, passer par une boucle ne ferait qu’augmenter inutilement le poids de ce chemin. De même, si plusieurs arcs joignent deux
sommets, il suffit de conserver l’arc de poids minimal.
24 Chapitre 3. Les algorithmes de base
v E A B C D F G S
T (v) 0 5 4 2 ∞ ∞ ∞ ∞
C (v) (E , E ) (E , A) (E , B ) (E ,C ) (E , D) (E , F ) (E ,G) (E , S)
Maintenant, on choisit (un seul choix) le sommet C , donc X = {E ,C }. Le tableau est mis à jour :
v E A B C D F G S
T (v) 0 5 3 2 ∞ 4 5 ∞
C (v) (E , E ) (E , A) (E ,C , B ) (E ,C ) (E , D) (E ,C , F ) (E ,C ,G) (E , S)
v E A B C D F G S
T (v) 0 4 3 2 ∞ 4 5 ∞
C (v) (E , E ) (E ,C , B, A) (E ,C , B ) (E ,C ) (E , D) (E ,C , F ) (E ,C ,G) (E , S)
v E A B C D F G S
T (v) 0 4 3 2 6 4 5 ∞
C (v) (E , E ) (E ,C , B, A) (E ,C , B ) (E ,C ) (E ,C , B, A, D) (E ,C , F ) (E ,C ,G) (E , S)
v E A B C D F G S
T (v) 0 4 3 2 5 4 5 11
C (v) (E , E ) (E ,C , B, A) (E ,C , B ) (E ,C ) (E ,C , F, D) (E ,C , F ) (E ,C ,G) (E ,C , F, S)
On prend D et on obtient X = {E ,C , B, A, F, D} et :
v E A B C D F G S
T (v) 0 4 3 2 5 4 5 10
C (v) (E , E ) (E ,C , B, A) (E ,C , B ) (E ,C ) (E ,C , F, D) (E ,C , F ) (E ,C ,G) (E ,C , F, D, S)
Finalement, on prend G puis S et on voit que ceci ne change rien. D’où le tableau finale :
v E A B C D F G S
T (v) 0 4 3 2 5 4 5 10
C (v) (E , E ) (E ,C , B, A) (E ,C , B ) (E ,C ) (E ,C , F, D) (E ,C , F ) (E ,C ,G) (E ,C , F, D, S)
Ainsi le chemin minimum pour aller de E à S est de coût 10 et un trajet de coût minimal de E à S est : EC F DS.
H. SABRI 25
On supposera dorénavant que les sommets ont déjà été numérotés de 1 à n de manière compatible avec leurs
rangs, c’est-à-dire que r ( j ) > r (i ) implique j > i (donc 1 = s et n = t ). Enfin, on supposera éliminés les arcs paral-
lèles par l’introduction de tâches fictives de durée nulle.
Pour un sommet i , on note t i le début au plus tôt des tâches correspondant aux arcs i → j et par Ti la fin au
plus tard des tâches correspondant aux arcs j → i .
Définition 3.1
Example 3.4
L’application de l’algorithme du chemin critique au digraphe suivant (trié topologiquement) est :
3, 16 13, 24
D D
3 5 3 5
8 8
A E A E
I I
3 4 5 3 4 5
B G B G
1 2 6 =⇒ 1 2 6
9 20 0, 0 9 9, 9 20 29, 29
C C
F H F H
5 7 6 5 7 6
4 4
16, 23
Les tâches critiques sont B et G. La durée totale minimale du projet est donc 29.
Exercice 3.2
Les tâches (durée et précédences) pour la construction d’un entrepôt sont données dans le tableau suivant :
Programmation linéaire
La programmation linéaire est le processus de minimiser ou maximiser une fonction objective linéaire sou-
mise à un nombre fini de contraintes d’égalités et d’inégalités linéaires.
La programmation linéaire a de nombreuses applications dans le domaine de l’informatique théorique. Elle
peut être utilisée pour résoudre de nombreux problèmes combinatoires variés, tels que la recherche de flot maxi-
mum dans un réseau, la recherche d’un couplage maximal dans un graphe et la coloration d’un graphe parfait.
Notre objectif est de minimiser le nombre total de calories consommées : 600X T + 350X C B + 250X BU R +
500X H B tout en satisfaisant les trois besoins nutritionnels en vitamines. Le programme linéaire résultant
s’écrit :
• Canonique Avec :
• Standard
x1
max c T X + c 0 max c T X + c 0 ¢ .
cT X
¡
min = c1 ··· c n ..
s.t. AX ≤ b (≥ b si min), s.t. AX = b, xn
X ≥0 X ≥0 T
c X + c0 = c1 x1 + c2 x2 + · · · + cn xn + c0
27
28 Chapitre 4. Programmation linéaire
Remarque 9. Un P.L. général peut être formulé selon une forme standard ou canonique par la méthode suivante :
générale =⇒ standard il faut éliminer les contraintes d’inégalité et les variables sans contrainte de positivité.
— Si d iT X ≤ b i est une contrainte d’inégalité, alors créer une nouvelle variable (d’écart) s i et remplacer l’in-
égalité d iT X ≤ b i par d iT X + s i = b i et s i ≥ 0.
Si d iT X ≥ b i , alors on peut écrire d iT X − s i = b i et s i ≥ 0.
— Si une variable x i ≶ 0 est de signe quelconque, alors créez deux nouvelles variables x i+ et x i− et remplacez
x i partout par x i+ − x i− , et ajoutez les contraintes de signe : x i+ ≥ 0, x i− ≥ 0.
générale =⇒ canonique
— Si d iT X = b i est une contrainte d’égalité, alors remplacer cette égalité par une paire d’inégalités :
d iT X ≥ b i et − d iT X ≥ −b i
— Même chose que précédemment si la variable x i ≶ 0.
Il est facile de voir que les problèmes qui en résultent sont équivalents aux problème d’origine. Pour l’algorithme
simplexe, nous utiliserons la forme standard. ¡ ¢
On remarque aussi qu’en
qu’en utilisant
utilisant la
larelation
relationmin
minff(x)
(x)==−−max
max(−− ff (x)
(x) dans
dans laquelle
laquelle ff (x)
(x) représente la fonction-
nelle linéaire à optimiser, on peut toujours se ramener à un problème de minimisation (ou de maximisation).
Example 4.2
max 5x + 4y max 5x 1 + 4x 2
s.t. x ≤ 6 s.t. x1 + e 1 = 6
1 1
Le P.L : 4 x + y ≤ 6 s’écrit sous forme standard : 4 x 1 + x2 + e 2 = 6
3x + 2y ≤ 22 3x 1 + 2x 2 + e 3 = 22
x, y ≥ 0 x1 , x2 , e 1 , e 2 , e 3 ≥ 0
Donc (sous la forme matricielle) on a :
x1 x1
1 0 1 1 0 0 1 0 0 0 x 2 x 2 6 6
T
¡T ¡ ¢ ¢ 1 1
c = c5 =4 5 0 4 0 ; 0 A =
; A
4 = 0 1 1 0 01 ;0X =
1 4 ; e
X =
1 1
e et
bet
= 6
b =
6
3 23 0 2 0 0 1 0 1 e 2 e 2 22 22
e3 e3
0
1 0 0 6 0
1 0 est inversible et B −1 b = 6 . Donc X B =
Dans l’exemple 4.2, la matrice extraite B = 0 6 ≥ 0, par suite
0 0 1 22 6
22
X B est une solution de base admissible. On appelle les variables x j k les variables de base. Les autres variables x l
sont les variables hors-base.
Parfois, il n’est pas évident de trouver une solution de base admissible, comme le montre l’exercice suivant :
H. SABRI 29
Exercice 4.1
Écrire le programme linéaire suivant sous forme standard et montrer qu’on n’a pas une solution de base
admissible. Résoudre le programme linéaire.
Algorithme
Algorithme 10 10 :: Algorithme
Algorithme du
du simplexe
simplexe
Entrées : P .L. standard P
Entrées : Un P.L. standard P (max) avec
Un (max) avec une
une solution
solution de
de base
base réalisable
réalisable
Output : La solution optimale (ou
Output : La solution optimale (ou non)non)
1
1 On
On commence
commence à
à écrire
écrire le
le tableau
tableau initiale
initiale (avec
(avec lesles variables
variables de base x
de base x jj 11 ,, .. .. .. ,, x
x jj m
m)
)
V
VB B x .
x1 . . . xn
1 . . x n b
b
x jj 1
x b 11
b
1
.. ..
x
..
x jj m
A b
bm
..
m m
cc 11 .. .. .. cc nn −c
−c 00
2
2 Si cc jj ≤
Si ≤0 (∀ jj :: x
0 (∀ x jj est
est hors
hors base),
base), alors
alors solution
solution optimale
optimale (STOP)
(STOP) //
// min
min ⇝
⇝ cc jj ≥≥00
// min
©© ªª ©© ªª
3
3 Trouver la colonne s (hors base) tel que c max c
Trouver la colonne s (hors base) tel que c ss = max c jj : c jj >
= : c >0
0 // min ⇝ c ss = min c jj : c jj < 0
⇝ c = min c : c < 0
4
4 Si a
Si a ii ,s ≤ 0 ∀i = 1 . . . m, alors pas de solution optimale (STOP)
,s ≤ 0 ∀i = 1 . . . m, alors pas de solution optimale (STOP)
5
5 Min Ratio
Min Test :: trouver
Ratio Test trouver la ligne rr tel
la ligne tel que
que
b ½ b
½ ¾
b rr = min b ii : a > 0
¾
min
= i =1...m : a ii ,s
,s > 0
a
a r,s
r,s i =1...m a a ii ,s
,s
6
6 Appliquer
Appliquer la
la procédure
procédure de Gauss autour
de Gauss autour de pivot a
de pivot a r,s (a r,s ⇝
r,s (a r,s ⇝ 11 et
et on
on annule
annule les
les coefficients
coefficients situés
situés sous
sous et
et
le pivot
sur le
sur pivot dans
dans la colonne s,
la colonne s, par
par combinaisons
combinaisons de lignes) //
de lignes) // Ne
Ne pas
pas oublier
oublier la la dernière
dernière ligne
ligne
7
7 Remplacer (dans V
Remplacer (dans VBB )) la
la variable
variable de
de base
base (sortante)
(sortante) située
située à
à la ligne rr par
la ligne par la
la variable (entrante) x
variable (entrante) x ss
8
8 Retourner à l’étape 2
Retourner à l’étape 2 //
// l'algorithme termine si le programme linéaire est non dégénéré
l'algorithme termine si le programme linéaire est non dégénéré
Remarque 10.
— La dernière ligne représente l’équation linéaire −z + c 1 x 1 + · · · + c n x n = −c 0 .
— La valeur de la variable de base de VB de la ligne k est égale à la valeur b k (de la ligne k).
— La solution optimale du problème est la valeur finale (dernière cellule) (× − 1).
— Si on n’a pas au départ B = I m (à l’aide des variables d’écart) alors, on ajoute les variables artificielles (et on
applique d’abord la phase I - voir section suivante).
30 Chapitre 4. Programmation linéaire
Exercice 4.2
max 2x 1 + x 2
s.t. x 1 − x 2 ≤ 3,
x 1 + 2x 2 ≤ 6,
−x 1 + 2x 2 ≤ 2,
x1 , x2 ≥ 0
Rajouter les variables d’écart. Puis résoudre le problème par l’algorithme du simplexe.
peut appliquer directement l’algorithme 10 en remplaçant A par A ∗ et b par b ∗ . Cependant, cette méthode n’est
¡ ¢ car il faut trouver une matrice extraite B réalisable correspondante. Pour une matrice A de type m ×n,
pas efficace,
il existe mn matrices extraites à tester !
L’idée est d’ajouter des variables, dites artificielles w 1 , w 2 , . . . , w m , pour faire apparaître une forme simpliciale
du programme linéaire P : (AX = b). Mais, il faut que w 1 = · · · = w m = 0. Donc, il faut minimiser d’abord le pro-
gramme linéaire P 0 suivant :
min W = w1 + · · · + wm
P0 = s.t. (A|I m ) × (x 1 . . . x n w 1 . . . w m )T = b
x1 , . . . , xn , w 1 , . . . , w m ≥ 0
On exprime W à l’aide des autres variables (hors base) et puis on applique l’algorithme du simplexe 10 pour P 0
(phase I). À la fin, si on trouve que les w i = 0, alors les variables de bases x j 1 , . . . , x j m forment une première base
admissible pour démarrer le simplexe pour le programme d’origine P .
H. SABRI 31
Example 4.3
Example 4.3
Soit le programme linéaire P :
Soit le programme linéaire P :
est par suite P n’est pas sous forme simpliciale (il n’ ya pas de sous matrice I 3 ). Donc on peut ajouter 2
est par suite P n’est pas sous forme simpliciale (il n’ ya pas de sous matrice I 3 ). Donc on peut ajouter 2
variables artificielles pour construire le problème initiale P 0 :
variables artificielles pour construire le problème initiale P 0 :
0 x 1
max − w 1 − w 2 = 3x 1 − e 1 − e 2 − 2 0 x
max − w 1 − w 2 = 3x 1 − e 1 − e 2 − 2 0 x 12
0 x 2
s.t. x 1 + x 2 − e 1 +w 1 = 1, 0 e 1
s.t. x 1 + x 2 − e 1 +w 1 = 1, 0 e 1
0 e 2
2x 1 − x 2 − e 2 +w 2 = 1, dont le vecteurX = 0 e 2 est une solution de base réalisable.
2x 1 − x 2 − e 2 +w 2 = 1, dont le vecteurX =
2
e est une solution de base réalisable.
3x 2 + e 3 = 2, 2
1 e 33
w
3x 2 + e 3 = 2,
1 w 1
x1 , x2 , e 1 , e 2 , e 3 , w 1 , w 2 ≥ 0 1
x1 , x2 , e 1 , e 2 , e 3 , w 1 , w 2 ≥ 0 1 w2
1 w2
Ainsi, on commence notre algorithme 10 pour le programme P 0 . Le tableau initial est :
Ainsi, on commence notre algorithme 10 pour le programme P 0 . Le tableau initial est :
x1 x2 e1 e2 e3 w1 w2 b
x1 x2 e1 e2 e3 w1 w2 b
w1 1 1 −1 0 0 1 0 1
w1 1 1 −1 0 0 1 0 1
w2 2 −1 0 −1 0 0 1 1
w2 2 −1 0 −1 0 0 1 1
e3 0 3 0 0 1 0 0 2
e3 0 3 0 0 1 0 0 2
W: 3
0 −1 −1 0 0 0 2
W: 3 0 −1 −1 0 0 0 2
Z: −6 −3 0 0 0 0 0 0
Z: −6 −3 0 0 0 0 0 0
Le pivot c’est a 2,1 donc x 1 est la variable entrante et w 2 est sortante. On obtient après pivotement le tableau :
Le pivot c’est a 2,1 donc x 1 est la variable entrante et w 2 est sortante. On obtient après pivotement le tableau :
x
x 11 x
x 22 ee 11 ee 22 ee 33 w
w 11 w
w 22 b
b
3 1 −1 1
w
w 11 0 3 −1 1 0 1 −1 1
0 2
2 −1 2
2 0 1 2
2 2
2
−1 −1 1 1
L
L2 ←
1
← 21 L
L2
x
x 11 1
1 −1
2 0
0 −1
2 0
0 0
0 2
1 1
2
2 2 2 2 2 2
−
−−−
−−
−−−−
−−
2 −
−−→
− →
ee 33 0 3 0 0 1 0 0 2
L ←L −L
L 1 ←L 11 −L 22 0
3 0 0 1 0 0 2
L 41←L
L 4 −3L 2 3 1 −3 1
4 ←L 4 −3L 2
W ::
W 0 3 −1 1 0 0 −3 1
L
L 55 ←L
←L 55 +6L 0 −1 0 0
+6L 22 2
2 2
2 2
2 2
2
Z
Z :: 0
0 −6
−6 0
0 −3
−3 0
0 0
0 3
3 3
3
1
Le
D’après est a 1,2 (Min le
pivot l’algorithme ratio test
pivot 3 ).
est= a 3,2On obtient
mais alors
on peut :
prendre a 1,2 pour faire sortit w 1 de la base plus rapide-
32 Chapitre 4. Programmation linéaire
ment. On obtient : x1 x2 e1 e2 e3 w1 w2 b
x 1 x2 e−21 e12 e3 w21 w
−12 b1
x2 0 1 −2
3 1
3 0 2
3 −1
3 1
3
x2 0 1 3
−1 3
−1 0 1
3 13 2
3
L 1 ← 23 L 1 x1 1 0 −1
3 −1
3 0 1
3 13 2
3
−−L−1−← −− 2 x1 1 0 0
3−L−1→ 3 3 3 3 3
−L−2− −−2− e3 0 0 2 −1 1 −2 1 1
←L +−12−L→1 e3 0 0 2 −1 1 −2 1 1
1
LL3←L
2 ←L 23+ 2 L11 W: 0 0 0 0 0 0
−3L −1 −1
W: 0 0 0 0 0 0
LL3←L −3L3
4 ←L 43− 2 L11 −1 −1
LL45←L
←L45−+6L
3
2 L11
Z: 0 0 −4 −1 0 4 1 5
L 5 ←L 5 +6L 1 Z: 0 0 −4 −1 0 4 −1 5
On remarque donc que les c j ≤ 0, donc (STOP) la solution est optimale et le max est −5. Ainsi la solution
On remarque donc que les c ≤ 0, donc (STOP) la solution est optimale et le max est −5. Ainsi la solution
optimale pour le programme jP = min 6x 1 + 3x 2 est −(−5) = 5 = 6 × 322 + 3 × 131 .
optimale pour le programme P = min 6x 1 + 3x 2 est −(−5) = 5 = 6 × 3 + 3 × 3 .
4.2 Dualité
4.2 Dualité
Soit P un P.L. sous forme canonique. Le programme dual D de P est définit par :
Soit P un P.L. sous forme canonique. Le programme dual D de P est définit par :
max z = c TT X le dual est min w = b TT Y
=== ===est
=⇒ w
P = max
s.t. zAX
=c X ≤ b le dual
=======⇒ D = mins.t. A TT=Yb Y≥ c
P = s.t. AX
X ≥ 0 ≤ b D = s.t. A Y Y ≥ c0
≥
X ≥ 0 Y ≥ 0X ∈ Rn et Y ∈ Rm pour le dual.
Le programme P est dit primal. On remarque que si A de type m × n, alors
Le programme P est dit primal. On remarque que si A de type m × n, alors X ∈ Rn et Y ∈ Rm pour le dual.
Théorème 4.1 Théorème de dualité
Théorème 4.1 Théorème de dualité
Si un problème primal ou dual admet une solution, alors l’autre problème admet aussi une solution et on a :
Si un problème primal ou dual admet une solution, alors l’autre problème admet aussi une solution et on a :
max z = c TT X = min w = b TT Y
max zAX
s.t. =c X ≤ b = mins.t. w
A TT=Yb Y≥ c
s.t. AXX ≥ 0≤ b s.t. A Y Y ≥ c0
≥
X ≥ 0 Y ≥ 0
Exercice 4.3
Exercice 4.3
Soit le problème suivant de type régime :
Soit le problème suivant de type régime :
min w = 340x 1 + 2400x 2 + 560x 3
min wx=+340x 1 + 2400x 560x 3
≥ 2 +1200
s.t. 1 2x 2 + x 3
D = s.t. x 1 + 2x 2 + x 3 ≥
x 1 + 3x 2 + 2x 3 ≥ 1400 1200
D= xx1 ++3x 2 + 2x 3 ≥ 1400
≥
1 x 2 + 3x 3 1500
x 1 +xx 2, + 3x 3 ≥ 1500
≥
1 x2 , x3 0
x1 , x2 , x3 ≥ 0
Écrire le programme primal P de D. Résoudre le programme P et déduire la valeur minimale de w, a-t-on
Écrire
besoinledeprogramme primal
faire les deux P de
phases duD. ? le programme P et déduire la valeur minimale de w, a-t-on
Résoudre
simplexe
besoin de faire les deux phases du simplexe ?