P - Educnet

publicité
Conception de réseaux
Frédéric Meunier
14 décembre 2016
Ecole des Ponts, France
Préliminaire sur les graphes
Un arbre est un graphe connexe sans cycle.
Propriété : si un arbre a n sommets, il a alors n − 1 arêtes.
Propriété : Soit G un graphe connexe. S’il a au moins autant
d’arêtes que de sommets, alors il a un cycle.
ARBRE COUVRANT DE POIDS
MIN
Un problème de réseau
n villages
distances entre village i et village j
A
B
C
D
E
F
G
A B C D E F G
0 3 8 9 10 5 5
3 0 9 9 12 5 4
8 9 0 2 10 9 9
9 9 2 0 11 9 8
10 12 10 11 0 11 11
5 5 9 9 11 0 1
5 4 9 8 11 1 0
Trouver le réseau routier de distance totale minimale qui relie
tous les villages, sachant qu’un tronçon relie toujours deux
villages (pas d’embranchement sur les routes).
Modélisation
• Graphe complet Kn = (V , E).
• Fonction de poids w : E → R+ .
• Chercher F ⊆ E tel que
P
e∈F w (e) soit minimum et tel
que le graphe (V , F ) soit connexe.
On peut supposer que T := (V , F ) est un arbre.
(car les poids sont ≥ 0.)
Arbre couvrant de poids minimal
Problème précédent = problème d’arbre couvrant de poids
minimal.
Arbre couvrant de G = (V , E) : c’est un arbre T = (V , F ) avec
F ⊆ E.
Problème
PROBLÈME DE L’ARBRE COUVRANT DE POIDS MINIMAL
Données. Graphe G = (V , E), fonction de poids w : E → R.
Tâche. Trouver un arbre couvrant de plus petit poids.
Polynomialité
Théorème
Il existe un algorithme polynomial qui résout le problème de
l’arbre couvrant de poids minimal.
Algorithme de Kruskal
Algorithme de Kruskal résout simplement ce problème.
• Trier les arêtes par poids croissant : e1 , . . . , em .
• Poser F := {e1 }, i := 1.
• Répéter
Faire i := i + 1. Si F ∪ {ei } ne
contient pas de cycle, faire
F := F ∪ {ei }.
Preuve de l’optimalité
Forêt F = (V , F ) est bonne s’il existe un arbre couvrant
T = (V , F 0 ) de poids minimal avec F ⊆ F 0 .
Théorème
Soit F = (V , F ) une bonne forêt, soit une coupe δ(X ) (avec
X ⊆ V ) disjointe de F et soit e une arête de poids minimal
dans δ(X ). Alors (V , F ∪ {e}) est encore une bonne forêt.
Algorithme de Kruskal ajoute à chaque itération l’arête de plus
petit poids dans la coupe δ(K ), où K est l’une des deux
composantes connexes de F = (V , F ) incidentes à ei .
Illustration
e
1
2
arêtes d’une bonne forêt
4
X
Algorithme glouton
Un tel algorithme est glouton.
A chaque étape : meilleur choix local.
Ici, cela donne l’optimum.
C’est un résultat remarquable : pour la plupart des problèmes,
l’algorithme glouton ne donne pas l’optimum.
ARBRES DE STEINER DE
POIDS MINIMUM
Problème
PROBLÈME DE L’ARBRE DE STEINER DE POIDS
MINIMUM
Données. Graphe G = (V , E), fonction de poids w : E → R+
et ensemble de sommets S ⊆ V , appelés terminaux.
Tâche. Trouver un arbre de plus petit poids couvrant S.
Arbre couvrant S : arbre T = (V 0 , F ), avec S ⊆ V 0 ⊆ V et
F ⊆ E.
Applications
Les applications de ce problème sont nombreuses :
• conception de réseau gazier,
• conception de réseau routier,
• conception de réseau informatique.
Complexité
Théorème
Le problème de l’arbre de Steiner est NP-difficile, même si tous
les poids sont égaux à 1.
Formulation linéaire
Proposition
Soit r un sommet arbitraire, r ∈ S. Résoudre le problème de
l’arbre de Steiner de coût minimum, c’est résoudre
X
Min
w (e)xe
e∈E
s.c.
X
xe ≥ 1
∀X ⊆ V \ {r } tel que X ∩ S 6= ∅
e∈δ(X )
xe ∈ {0, 1}
∀e ∈ E
Formulation linéaire
En notant
C = {X ⊆ V \ {r } : X ∩ S 6= ∅},
le programme linéaire est donc
X
Min
w (e)xe
s.c.
e∈E
X
xe ≥ 1
X ∈C
e∈δ(X )
xe ∈ {0, 1}
e ∈ E.
(P)
Le problème précédent a deux caractéristiques qui le rende
difficile à résoudre.
• il est en nombres entiers.
• il a un nombre exponentiel de contraintes.
Adaptation du branch-and-bound pour gérer un nombre
exponentiel de contraintes : branch-and-cut.
Séparer les contraintes
Idée principale : on suppose que l’on dispose d’un algorithme
A qui résout
SEPARATION DES CONTRAINTES POUR ARBRE DE
STEINER
Données. Vecteur x ∈ RE+ .
Tâche.
Renvoie ‘oui’ si x satisfait toutes les contraintes
P
0
Pe∈δ(X ) xe ≥ 1 pour X ∈ C. Si non, renvoie X ∈ C tel que
e∈δ(X 0 ) xe < 1.
Branch-and-cut
On fait un branch-and-bound. Pour résoudre la relaxation
linéaire de (P) :
On choisit C 0 ⊆ C.
1. On résout
P
min Pe∈E w (e)xe
0
s.c.
e∈δ(X ) xe ≥ 1 X ∈ C
0 ≤ xe ≤ 1
e∈E
Cela donne une solution x̄.
2. On applique A sur x̄.
• Si ‘oui’, alors on continue le branch-and-bound (on a résolu
la relaxation linéaire de (P)).
• Si non, on retourne en 1. en ajoutant le X 0 obtenu par A à
C0.
Séparation pour l’arbre de Steiner
L’algorithme A de séparation des contraintes pour l’arbre de
Steiner existe :
Mettre x̄e comme capacité de e, pour e ∈ E.
A r fixé : calculer pour tout s dans S \ {r } une r-s coupe de
capacité minimum.
Si l’une de ces coupes δ(X 0 ) a une capacité < 1, alors
P
X 0 ∈ C et e∈δ(X 0 ) x̄e < 1.
Recherche locale
Recherche locale classique pour le problème de l’arbre de
Steiner :
Pour tout V 0 ⊆ V tel que S ⊆ V 0 , on calcule par Kruskal l’arbre
couvrant V 0 de poids mininimum n’utilisant que les sommets de
V 0 : donne le coût de V 0 .
Alors V 0 est voisin de V 00 si l’on est dans une des ces situations
1. V 00 := V 0 \ {v 0 } pour un v 0 ∈ V 0 , (drop)
2. V 00 := V 0 ∪ {v 00 } pour un v 00 ∈ V \ V 0 (add) ou
3. V 00 := V 0 \ {v 0 } ∪ {v 00 } (swap).
Téléchargement