La description suivante est valable dans le cas idéal comme dans le cas général.
A partir de G, le graphe équivalent au mapping M équivalent à la superposition de
S sur S
′, on construit un flot initial F
0valide. On rappelle qu’un flot valide respecte
les contraintes de capacité des arcs et les contraintes de flot qui sont que le flot entrant
en un noeud est égal au flot sortant du noeud. Pour construire un tel flot valide, étant
donné les contraintes de G, nous commençons par la fin du circuit et nous le remontons
par étapes :
– On initialise fa= 0 pour tout arc a∈ E.
– On applique le flotfa=N
′(avecN
′le nombre de sommetss
′k) à l’arc retour.
– On applique fa = 1 a tous les arcs collecteurs (i.e. qui relient un sommet s
′kau
collecteurc)
– On choisit à partir de chaque s
′kle sj qui a le moins de flot sortant parmi les sj
connectés àskpar un arca(sj, s
′k). Si il y a plusieurs sommets ayant le minimum de
flot sortant, on choisira celui qui a le moins de connexions avec less
′k
qui n’ont pas
encore été visités à cette étape (dont le flot entrant est encore nul). On applique à
l’arc reliant le sommetsj choisi et le sommet sk le flot fa = 1et on met à jour la
somme des flots sortants ensj.
– On calcule en chaque sj la somme des flots sortants, et on applique cette valeur de
flot à l’arc source correspondant (i.e. l’arc (s, sj)) en vérifiant que le flot en cet arc
est valide.
– Pour tout arc (s, sj) présentant un flot non valide (le flot dépasse la capacité), on
corrige la situation en itérant l’opération suivante jusqu’à validité : on cherche un
s
′k
relié às
jtel qu’un flot non nul circule entre ces deux sommets. On annule alors
ce flot et on cherche un remplaçantsj
2connecté àsk par un arc dont le flot est nul,
et tel que :
f
a(s,sj2)< C
a(s,sj2)et on ajoutera une unité au flot de cet arc. Si on est bloqué à un moment, c’est qu’on
a sans doute sous-estimé le nombre de divisions maximalesN
div. On note alors le flot
f de l’arc bloqué, et on s’en sert pour mettre à jour Ndiv et les capacités maximales
des arcs sources.
Une fois ce flot construit, on initialise le potentielπ
ià la valeur0en tout sommet et on
calcule pour tout arc a ∈ E son type de conformité (voir diagramme), et son indice de
conformité δa , ainsi que la couleur correspondante.
Après cette étape d’initialisation, l’algorithme se déroule comme suit :
1. Vérifier en parcourant tous les arcs qu’il en existe encore au moins un qui a un
indice de conformité non nul. Si il n’en existe pas, le flot F est optimal, arrêt de
l’algorithme. Sinon, il existe encore des arcs non conformes, on poursuit
l’algo-rithme.
2. Sélectionner l’arca
0= (xi
1, xi
2) qui a l’indice le plus élevé.
3. Chercher l’existence d’un cycle µ passant par a
0, ne contenant pas d’arc incolore,
avec tous les arcs noirs orientés dans le même sens, tous les arcs verts dans le sens
contraire. Puisque a
0est non conforme, il est d’une couleur noire ou verte, qu’on
noterac . Pour trouver le cycle, on part du sommet arrivée dea
0et on se propage
sur tous les sommets en passant par les arcs qui vérifient les conditions. Dans
le détail, étant donnée la forme de notre graphe, le cycle passera nécessairement
par s et c, et par un unique sj et un unique s
′k