Vous êtes sur la page 1sur 29

Problème d’affectation

Formulation du problème d’affectation.


Application de la méthode du simplexe.
Méthode hongroise.

Problème d'affectation
Remonte aux origines de la programmation linéaire.
Il s’agit d’un cas particulier du problème de transport et, par
conséquent, du problème de flot à coût minimum.
Le problème consiste à affecter les éléments d’un ensemble à ceux
d’un autre ensemble selon une approche biunivoque (un à un)
de sorte que la somme des coûts des affectations soit minimale.
n n
Min Z=   cij xij où xij = 1 si i est affecté à j
i=1 j=1 0 autrement.
n
 xij = 1  i = 1, 2, …, n cij = coût d’affectation
j=1 de i à j.
n
 xij = 1  j = 1, 2, …, n
i=1
xij = 0 ou 1  i, j 2
Réseau
d’un
problème
générique
d’affectation je tâche
de (reçoit 1 seule unité de flot)
n employés ie employé
à (émet 1 seule unité
n tâches de flot)

3
Remarques :

Les 2 ensembles à jumeler sont de même taille.

Si ce n’est pas le cas, on peut y remédier en ajoutant des


éléments (sommets) fictifs et en définissant cij = 0 i ou j fictif.

Si i ne peut être affecté à j pour quelque raison, alors mettre cij = 


et xij sera 0 dans n’importe quel flot optimal.

Problème d'affectation 4
Exemple :

Supposons que, dans une entreprise, n ouvriers puissent travailler


indifféremment sur n machines, mais avec plus ou moins d'efficacité;
l'efficacité peut se mesurer par le revenu provenant de la vente des
produits fabriqués par les divers ouvriers travaillant sur les différentes
machines.

Répartir les ouvriers sur les machines de la façon la plus efficace est
un problème d'affectation.

Soit n unités à affecter à n tâches; une unité ne peut être affectée qu'à
une tâche et une tâche ne peut employer qu'une unité.

L'unité i exécute la tâche j avec un coût ou un profit cij.

Comment doit-on affecter chaque unité à une seule tâche pour que la
5
rentabilité soit optimale?
Techniques de solution :
Adaptation de la méthode du simplexe

Les propriétés de la matrice des contraintes nous permettent


d’utiliser le simplexe pour résoudre ce problème de programmation
linéaire en nombres entiers.
Inconvénients :

Cela conduit à des tableaux très grands (d’ordre n).

La solution est fortement dégénérée, i.e. elle contient un


nombre de variables positives beaucoup inférieur à 2n – 1,
soit n.
La méthode du simplexe peut s’appliquer mais certaines
itérations n’ont aucune incidence sur la solution réalisable
courante. Seul la base change : une variable hors base est
échangée avec une variable de base dégénérée. 6
Énumération de toutes les solutions possibles.

n=5 120 solutions réalisables.

n = 20 Une calculatrice analysant une affectation par


microseconde travaillant 8 heures par jour et
365 jours par année, exigerait 2500 siècles pour
ce travail.

Technique spéciale tenant compte de la structure particulière


du problème d’affectation.
Méthode hongroise développée par le mathématicien Kuhn.

Kuhn, H. W. "The Hungarian Method for the Assignment Problem ".


Naval Research Logistics Quarterly, Vol. 2, pp. 83-97, 1955.

Problème d'affectation 7
Méthode hongroise (méthode "primale-duale")

Algorithme taillé sur mesure pour le problème d’affectation dont les


grandes lignes sont :

(1) débuter avec une solution réalisable du problème dual;

(2) essayer de déterminer une affectation (une soln réalisable


du primal) tout en respectant les conditions relatives aux
écarts complémentaires;
(3) si une telle affectation est trouvée, l'algorithme termine;
sinon, on modifie la solution réalisable du dual pour se
rapprocher d'une affectation optimale, etc.

Problème d'affectation 8
Théorème : Le problème original est équivalent au sens de l’ensemble
des solutions optimales au problème suivant :
n n
Min Z =   c'ij xij
i=1 j=1
n
 xij = 1  i = 1, 2, …, n
j=1
n
 xij = 1  j = 1, 2, …, n
i=1
xij = 0 ou 1  i, j

où c'ij = cij – ui - vj (ui et vj sont des constantes arbitraires)

On peut diminuer ou augmenter d’une même quantité tous les coûts


d’une même ligne (ou d’une même colonne) sans changer la solution
9
optimale d’un problème d’affectation.
Théorème :

Le dual du problème original possède comme solution réalisable :

ui = min {cij | j = 1, 2, …, n}
vj = min {cij - ui| i = 1, 2, …, n}.

Soit (u, v) une solution réalisable duale, chaque composante du vecteur


de coût relatif est de la forme : cij = cij – ui – vj.

Les conditions d’optimalité du problème d’affectation sont :


xij = 1  le coût réduit cij = 0.

Définition : Dans la matrice des coûts du problème d’affectation, la


case (i, j) est admissible si cij = cij – ui – vj = 0
10
sinon elle est inadmissible.
Pour essayer de trouver un flot x = (xij) satisfaisant les conditions
d’optimalité, il s’agit de créer un graphe biparti ayant 2n + 2 sommets :
arcs admissibles
Sources Destinations

1 1

capacité 1
capacité 1 2 2
capacité 1
1 .
s . t

. .

capacité 1 . .
. . capacité 1

n n

Un arc (i, j) intermédiaire entre les sources et les destinations existe


11
si cij = 0 et il a une capacité infinie.
La recherche d’une affectation x consiste à trouver un flot maximum
de s à t dans le réseau précédent en utilisant l’algorithme de Ford &
Fulkerson.

Si le flot maximum est égale à n,


alors le flot dans les arcs entre les sources et les destinations est
une affectation optimale
sinon il n’y a pas suffisamment d’arcs intermédiaires ou de cases
admissibles.

Afin d’augmenter le flot entre s et t, il faut créer des arcs additionnels


entre les sources qui sont marquées et les destinations qui ne sont pas
marquées :
posons  = min {cij | i marqué, j non marqué}.

Note :  > 0 car les cases considérées dans la minimisation sont


Problème d'affectation 12
inadmissibles.
Création d’une nouvelle solution réalisable du dual :

ui = ui -  si i est non marqué


ui si i est marqué.

vj = vj +  si j est non marqué


vj si j est marqué.

La solution duale (u, v) nous permet alors de calculer la nouvelle


matrice de coût réduite :
c"ij = cij – ui – vj = c'ij  .

Ainsi, le nouveau coût relatif est égale à l’ancien   ou zéro, selon


le statut des sommets i et j.

Problème d'affectation 13
Description de la méthode hongroise sous une forme qui permet de
faire tous les calculs dans la matrice des données du problème :

1. Soustraire l'élément minimum de la rangée i de chaque élément


de la rangée i, pour tout i = 1, 2, ..., n.

2. Soustraire l'élément minimum de la colonne j de chaque élément


de la colonne j, pour tout j = 1, 2, ..., n.

3. Examiner les rangées à partir de la première. S'il existe une


rangée ne contenant qu'un seul zéro non marqué, alors marquer
ce zéro en l’encadrant pour dénoter une affectation. Éliminer les
autres zéros de la même colonne en les marquant (cases grises).

Répéter ce processus jusqu'à ce que toutes les rangées ne


contiennent aucun zéro non marqué ou au moins deux zéros
non marqués.
Problème d'affectation 14
4. Examiner les colonnes à partir de la première. S'il existe une
colonne avec un seul zéro non marqué, alors marquer ce zéro
en l’encadrant pour dénoter une affectation. Éliminer les autres
zéros non marqués de la même rangée en les marquant (cases
grises). Répéter ce processus jusqu'à ce que toutes les colonnes
ne contiennent aucun zéro non marqué ou au moins deux zéros
non marqués.
5. Répéter les étapes 3 et 4 successivement jusqu'à ce qu'une des
trois conditions soit obtenue.
(a) Chaque rangée possède une affectation; alors cette
affectation est optimale. L'algorithme prend fin.
(b) Il y a au moins deux zéros non marqués dans chaque
rangée et chaque colonne; alors faire une affectation
arbitraire à un de ces zéros en l’encadrant et éliminer
tous les autres zéros de la même rangée et de la même
colonne en les marquant (cases grises) puis aller à 3.
(c) Il n'y a aucun zéro non marqué et une affectation
15
complète n'a pas été faite; alors passer à l'étape 6.
6. Cocher () toutes les rangées pour lesquelles des affectations
n'ont pas été faites.
7. Cocher () toutes les colonnes pas encore cochées et qui ont un
zéro dans des rangées cochées.
8. Cocher () toutes les rangées pas encore cochées et qui ont des
affectations dans des colonnes cochées.
9. Répéter les étapes 7 et 8 jusqu'à ce qu'il ne soit plus possible de
cocher.
10. Tracer une ligne à travers toutes les rangées non cochées et
toutes les colonnes cochées.
11. Parmi tous les éléments de la matrice qui ne sont pas couverts par
une ligne, choisir l'élément le plus petit et le soustraire de chaque
élément non couvert et l'ajouter à chaque élément doublement
couvert (par une ligne verticale et horizontale).
Retourner à l'étape 3.
Problème d'affectation 16
Exemple :

Soit le problème d’affectation avec la matrice de coûts suivante :


9 12 9 6 9 6 9 10

7 8 5 4 3 8 15 5

6 3 16 18 3 19 6 8

6 1 17 6 5 11 7 9

5 0 13 4 5 6 1 2

12 13 4 12 3 1 12 14

3 12 3 7 13 6 8 3

13 4 1 5 5 5 4 9

Problème d'affectation 17
En appliquant les étapes 1 et 2, on obtient :

3 6 3 0 3 0 2 4

4 5 2 1 0 5 11 2

3 0 13 15 0 16 2 5

5 0 16 5 4 10 5 8

5 0 13 4 5 6 0 2

11 12 3 11 2 0 10 13

0 9 0 4 10 3 4 0

12 3 0 4 4 4 2 8

Problème d'affectation 18
En appliquant l’étape 3, on obtient :
3 6 3 0 3 0 2 4

4 5 2 1 0 5 11 2

3 0 13 15 0 16 2 5

5 0 16 5 4 10 5 8

5 0 13 4 5 6 0 2

11 12 3 11 2 0 10 13

0 9 0 4 10 3 4 0

12 3 0 4 4 4 2 8

Problème d'affectation 19
En appliquant l’étape 4, on obtient :

3 6 3 0 3 0 2 4

4 5 2 1 0 5 11 2

3 0 13 15 0 16 2 5

5 0 16 5 4 10 5 8

5 0 13 4 5 6 0 2

11 12 3 11 2 0 10 13

0 9 0 4 10 3 4 0

12 3 0 4 4 4 2 8

Problème d'affectation 20
Aucun zéro non marqué et une affectation complète n’a pas été faite;
passer aux étapes 6 à 9.
 
3 6 3 0 3 0 2 4

4 5 2 1 0 5 11 2

3 0 13 15 0 16 2 5

5 0 16 5 4 10 5 8

5 0 13 4 5 6 0 2

11 12 3 11 2 0 10 13

0 9 0 4 10 3 4 0

12 3 0 4 4 4 2 8

Problème d'affectation 21
Appliquons maintenant l’étape 10.
 
3 6 3 0 3 0 2 4

4 5 2 1 0 5 11 2

3 0 13 15 0 16 2 5

5 0 16 5 4 10 5 8

5 0 13 4 5 6 0 2

11 12 3 11 2 0 10 13

0 9 0 4 10 3 4 0

12 3 0 4 4 4 2 8

Problème d'affectation 22
Appliquons l’étape 11. Le plus petit élément est 1.
3 7 3 0 4 0 2 4

3 5 1 0 0 4 10 1

2 0 12 14 0 15 1 4

4 0 15 4 4 9 4 7

5 1 13 4 6 6 0 2

11 13 3 11 3 0 10 13

0 10 0 4 11 3 4 0

12 4 0 4 5 4 2 8

Problème d'affectation 23
Retournons aux étapes 3 et 4.
3 7 3 0 4 0 2 4

3 5 1 0 0 4 10 1

2 0 12 14 0 15 1 4

4 0 15 4 4 9 4 7

5 1 13 4 6 6 0 2

11 13 3 11 3 0 10 13

0 10 0 4 11 3 4 0

12 4 0 4 5 4 2 8

Problème d'affectation 24
Aucun zéro non marqué et une affectation complète n’a pas été faite;
passer aux étapes 6 à 9.
   
3 7 3 0 4 0 2 4

3 5 1 0 0 4 10 1

2 0 12 14 0 15 1 4

4 0 15 4 4 9 4 7

5 1 13 4 6 6 0 2

11 13 3 11 3 0 10 13

0 10 0 4 11 3 4 0

12 4 0 4 5 4 2 8

25
Appliquons l’étape 10.
   
3 7 3 0 4 0 2 4

3 5 1 0 0 4 10 1

2 0 12 14 0 15 1 4

4 0 15 4 4 9 4 7

5 1 13 4 6 6 0 2

11 13 3 11 3 0 10 13

0 10 0 4 11 3 4 0

12 4 0 4 5 4 2 8

26
Appliquons l’étape 11. Le plus petit élément est 1.
2 7 2 0 4 0 1 3

2 5 0 0 0 4 9 0

1 0 11 14 0 15 0 3

3 0 14 4 4 9 3 6

5 2 13 5 7 7 0 2

10 13 2 11 3 0 9 12

0 11 0 5 12 4 4 0

12 5 0 5 6 5 2 8

Problème d'affectation 27
On retourne aux étapes 3 et 4.
2 7 2 0 4 0 1 3

2 5 0 0 0 4 9 0

1 0 11 14 0 15 0 3

3 0 14 4 4 9 3 6

5 2 13 5 7 7 0 2

10 13 2 11 3 0 9 12

0 11 0 5 12 4 4 0

12 5 0 5 6 5 2 8

Problème d'affectation 28
Chaque rangée possède une affectation; elle est donc optimale.

L'algorithme est terminé et nous avons:

x14 = x28 = x35 = x42 = x57 = x66 = x71 = x83 = 1; 0 ailleurs.

Problème d'affectation 29