Contenus
ToggleStepping Stone
Le problème résolu par l’algorithme du Stepping stone est le suivant :
Prenons un exemple pour montrer le déroulement de l’algorithme. Soient quatre origines et cinq demandeurs avec les coûts et quantité suivant le tableau :
cij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
7
|
12
|
1
|
5
|
6
|
12
|
O2
|
15
|
3
|
12
|
6
|
14
|
11
|
O3
|
8
|
16
|
10
|
12
|
7
|
14
|
O4
|
18
|
8
|
17
|
11
|
16
|
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Il est possible d’effectuer l’algorithme à l’aide de deux tableaux (un pour les coûts, un pour les flots). Il est aussi possible d’afficher les deux valeurs dans la même case puisque seul le flot va varier.
Stepping stone – Étape 1 : obtention d’une solution de base
Par coin Nord-Ouest
Le principe est simple :
2. Ajustez les valeurs d’offre et de demande dans l’allocation des lignes et des colonnes respectives
3. Si l’approvisionnement de la première rangée est épuisé, descendez à la première cellule de la rangée suivante
4. Si la demande pour la première cellule est satisfaite, déplacez-vous horizontalement vers la cellule suivante
5. Si pour une cellule l’offre est égale la demande, l’allocation suivante peut être faite dans la cellule soit dans la ligne ou la colonne suivante
6. Continuez la procédure jusqu’à ce que la quantité totale disponible soit entièrement allouée aux cellules, selon les besoins.
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
10
|
2
|
–
|
–
|
–
|
12
|
O2
|
–
|
9
|
2
|
–
|
–
|
11
|
O3
|
–
|
– | 13 |
1
|
–
|
14
|
O4
|
–
|
–
|
–
|
4
|
4
|
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Le coût total de la solution de base est : 10*7+2*12+9*3+2*12+13*10+12+4*11+4*16 = 395.
Dans de nombreux cas il n’est pas possible de satisfaire la demande, cette méthode bien que rapide ne donne une solution réalisable que peu réaliste. Ici on ne représente pas les coûts mais les flots fij de l’offre i vers la demande j.
Par la méthode des minimums
2. Si le coût minimum n’est pas unique, vous êtes libre de choisir n’importe quelle cellule.
3. Choisissez autant que possible la valeur du xij correspondant, en fonction des contraintes de capacité et d’exigence.
4. Répétez les étapes 1 à 3 jusqu’à ce que toutes les restrictions soient satisfaites.
Par la méthode de Vogel (ou Balas-Hammer)
Cette méthode fait appel à la différence de transport entre les deux meilleurs choix pour l’offre et la demande. La solution de base est souvent très proche de la solution optimale.
1. Déterminez un coût de pénalité pour chaque ligne (colonne) en soustrayant le coût de cellule unitaire le plus bas dans la rangée (colonne) du coût de cellule unitaire le plus bas dans la même rangée (colonne).
3.
- S’il reste exactement une ligne ou une colonne avec une offre ou une demande de zéro, arrêtez.
- S’il reste une ligne (colonne) avec une offre positive (demande), déterminez les variables de base dans la ligne (colonne) en utilisant la méthode des minimums. Arrêtez.
- Si toutes les lignes et colonnes qui n’ont pas été barrées ont une offre ou demande (restant) de zéro, utilisez la méthode des minimum. Arrêtez.
Dans tous les autres cas, passez à l’étape 1.
La première itération de la méthode donne : DO1 = 4, DO2 = 3, DO3 = 1, DO4 = 3, DD1 = 1, DD2 = 5, DD3 = 9, DD4 = 1, DD5 = 2. La colonne D3 possède la plus grande différence de coût, le plus petit coût est 1, on sature donc l’intersection O1 avec D3 avec le flot min(12, 15). L’offre O1 est donc saturée.
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
X
|
X
|
12
|
X
|
X
|
12
|
O2
|
–
|
–
|
–
|
–
|
–
|
11
|
O3
|
–
|
– | – |
–
|
–
|
14
|
O4
|
–
|
–
|
–
|
–
|
–
|
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Pour le nouveau calcul de différence de coût, nous ne tiendrons plus compte des valeurs de la ligne O1. Nous obtenons après 5 itérations à la configuration suivante :
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
–
|
–
|
12
|
–
|
–
|
12
|
O2
|
–
|
11
|
–
|
–
|
–
|
11
|
O3
|
10 | – | – |
–
|
4
|
14
|
O4
|
–
|
–
|
3
|
5
|
–
|
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Stepping stone – Étape 2 : calcul des potentiels
Une fois que l’on possède une solution de base, l’idée est de modifier la solution pour qu’elle soit meilleure. C’est-à-dire qu’il faut modifier les flots. Pour cela, nous allons choisir un flot baissant le plus le coût total de transport. La première étape pour déterminer ce flot consiste à calculer les potentiels. Les potentiels se calculent UNIQUEMENT sur les cases ayant un flot non nul !
Nous pouvons ensuite calculer d’autres potentiels. Les potentiels sont calculés de proche en proche. Dans notre cas, nous avons calculé le potentiel de la ligne 1 à partir de c12, il est donc possible de calculer le potentiel de la colonne 1 ou de la colonne 2.
Reprenons l’exemple : pour la colonne 1, pD1 = c11 + PO1 = 7. Pour la ligne 2, pD2 = c12 + PO1 = 12. De même pour les autres lignes et colonnes : pO2 = pD2 – c22 = 12 -3 = 9; pD3 = 21; p03 = 11; PD4 = 23: PO4 = 12; PD5 = 28.
Stepping stone – Étape 3 : calcul de la variation de coût unitaire
Nous obtenons le tableau suivant :
vij
|
D1
|
D2
|
D3
|
D4
|
D5
|
pO
|
O1
|
–
|
–
|
-20
|
-18
|
-19
|
0
|
O2
|
17
|
– |
–
|
-8
|
-5
|
9
|
O3
|
12 | 15 | – |
–
|
-10
|
11
|
O4
|
23
|
8
|
8
|
–
|
–
|
12
|
pD
|
7
|
12
|
21
|
23
|
28
|
Stepping stone – Étape 4 : calcul de la quantité maximale du flot
Par exemple pour la case 01-D3, nous prenons le circuit suivant f13 -> f12 -> f22 -> f23 -> f13 avec le flot minimal de 2. Nous obtenons le tableau suivant :
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
pO
|
O1
|
–
|
–
|
2 |
1
|
1
|
0
|
O2
|
– | – |
–
|
1
|
1
|
9
|
O3
|
– | – | – |
–
|
1
|
11
|
O4
|
–
|
–
|
–
|
–
|
–
|
12
|
pD
|
7
|
12
|
21
|
23
|
28
|
En multipliant fij*vij, nous connaissons la variation du coût totale par la modification par le flot fij. Nous choisissons la case ayant le plus grand fij*vij, ici la case O1-D3
Stepping stone – Étape 5 : mise à jour du tableau
Le calcul de mise à jour des flots se fait par la règle du « + – » sans compter le retour à la case d’origine. Ainsi dans le circuit : f13 += 2, f12 -=2, f22 += 2 et f23 -= 2. Le tableau est le suivant :
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
10
|
2-2 = –
|
0+2 = 2 |
–
|
–
|
12
|
O2
|
– | 9+2 = 11 |
2-2 = –
|
–
|
–
|
11
|
O3
|
– | – | 13 |
1
|
–
|
14
|
O4
|
–
|
–
|
–
|
4 | 4 |
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Le coût total de la solution de base est : 10*7+2*12+9*3+2*12+13*10+12+4*11+4*16 = 395. Le coût de cette solution est : 10*7+11*3+2*1+13*10+12+4*11+4*16 = 355. Soit la solution de base moins f13*v13 = 2*20 = 40.
Dans notre exemple, nous avons au final le tableau suivant :
fij
|
D1
|
D2
|
D3
|
D4
|
D5
|
offre
|
O1
|
–
|
–
|
12 |
–
|
–
|
12
|
O2
|
– | 11 |
–
|
–
|
–
|
11
|
O3
|
10 | – | – |
–
|
4
|
14
|
O4
|
–
|
–
|
3
|
5 | – |
8
|
demande
|
10
|
11
|
15
|
5
|
4
|
Avec un coût total de : 10*8+11*3+12*1+3*17+5*11+4*7 = 259.
Aparté
Nous parlons de flot car le problème est résolu comme un problème de min cost flow (flot maximum au coût minimum) dans un graphe biparti complet – un ensemble de sources reliés à un ensemble de puits (d’où la règle du « + – » puisque l’on va une fois dans le sens du flot puis à contresens dans le circuit choisi).