Vous êtes sur la page 1sur 48

RECHERCHE

OPERATIONELLE
CHAPITRE 7: Affectation Optimale
(Méthode Hongroise)
Présenté par :

Faicel
Faicel Zahir
Zahir Oussama
Oussama Bahi
Bahi Oussama
Oussama Zouiti
Zouiti Rachid
Rachid Tahiri
Tahiri Rachid
Rachid Aniba
Aniba
0620778112
0620778112 0707220798
0707220798 0636838111
0636838111 0766843980
0766843980 0694189094
0694189094
Introduction Générale

Définition et Historique

Problématique

Applications de cours

Algorithme de la méthode + Langage C

Travaux dirigés

Conclusion
INTRODUCTION GENERALE
Plus court chemin dans un graphe FORD, MOORE DIJSKTRA

Gestion de projet PERT

Chemin passant par tous les sommets DEMOUCRON


MULTIPLICATION LATINE

Parcours passant par chaque point LES GRAPHES EULERIENS


une seule fois et qui revient au point (METHODE D’EULER)
de départ

Transférer une quantité maximale


depuis une source vers une
Méthode Ford-Fulkerson
destination sans dépasser les
capacités des arcs
DEFINITION ET HISTORIQUE
L’objectif de ce cours est d’explorer une des plusieurs méthodes de la recherche opérationnelle
appelée méthode Hongroise ou Algorithme de Kuhn, expliquée par Harold Kuhn en 1955
(The Hungarian method for the assignment problem).

 Né le 29 Juin 1925 – Décédé le 2 Juin 2014 (âgé 88 ans)


 Mathématicien Américain
 Professeur de mathématiques à l'Université de Princeton
 Développeur des 2 méthodes Kuhn Poker et La Méthode Hongroise
pour les problèmes d'affectation

 La méthode hongroise permet de résoudre des problèmes d’affectation, qui consistent à trouver
la meilleure façon de relier un ensemble donné de tâches (conception, fabrication, etc..) à un
ensemble de ressources (main d’œuvre, machines, outils, processeurs, etc.) Pour but de
minimiser un coût ou maximiser une satisfaction selon le type d’affectation imposé.
P RO BL ÉMATI Q U E

Nous gérons une entreprise de n salariés qui interviennent chez m clients.


Tous nos salariés sont qualifiés pour fournir le même niveau de qualité de prestation
chez les clients.
Notre souci est plutôt centré sur les coûts des déplacements de nos salariés vers les
clients.
Par conséquent, nous optons pour des affectations dont les déplacements des salariés
de leur domicile vers les locaux des clients coûtent le moins cher possible.
Alors comment peut-on affecter à chaque salarié le client exacte en minimisant les
coûts le maximum possible ?
C'est à cette problématique par exemple que l'algorithme Hongrois répond.
Autrement dit, Nous fournissons les affectations Salarié/Client pour but de minimiser la somme des coûts
des déplacements de nos salariés.
Afin d'avoir une idée générale sur le problème d'affectation, la figure suivante illustre ce principe pour 3
salariés et 3 clients :

AFFECTATION INITIALE AFFECTATION OPTIMALE

1 30 1 1 1
SALARIE

10

SALARIE
10 40

CLIENTS

CLIENTS
5 20 CIBLE 5
2 2 2 2
32
12 18
S

S
3 3 18
3 3
19
D'une manière équivalente on peut représenter chaque affectation salarié/client sous
forme de matrice qu’on va appeller la matrice des coûts :
CLIENTS CLIENTS

1 2 3 1 2 3
1 30 40 10 1 30 40 10

SALARIE
SALARIE

2 5 20 32 CIBLE
2 5 20 32

3 12 18 19 3 12 18 19

S
S

AFFECTATION OPTIMALE

 Le minimum coût qu’on peut payer


est 10+5+18= 33
APPLICATIONS DE COURS

Avant de commencer on doit mentioner qu’il existe 2


types de problèmes d’affectation:
1- Problème d’affectation équilibrée :

 C’est quand le nombre des lignes n et les colonnes m s’égalent, dans


ce cas on peut appliquer la méthode sans modifier la matrice.
M1 M2 M3 M4

N1
MATRICE 4X4
N2
4 LIGNES
N3 4 COLONNES
N4
2- Problème d’affectation non équilibrée :
 C’est quand le nombre des lignes n diffère du nombre des colonnes m , dans ce
cas on doit rendre notre matrice équilibrée et puis appliquer notre méthode.
 On peut rendre la matrice équilibrée simplement en ajoutant des tâches
fictives qui égalent à 0 soit sur les lignes ou les colonnes selon la nécessité.
M M M M M M M M M5
1 2 3 4 1 2 3 4
0
N1 DEVIENT N1 0
5x4
5 LIGNES N2 N2 0
4 COLONNES N3 N3 0
N4
N5 N4
N5 0 5x5
5 LIGNES
M M M M M5 5 COLONNES
M M M M M5 1 2 3 4
1 2 3 4 N1
4x5
4 LIGNES N1 DEVIENT
N2
5 COLONNES
N2 N3
N3 N4
N5 0 0 0 0 0
N4
APPLICATION 1:
Prenons par exemple une situation où on cherche a affecter 4 tâches à 4 ouvriers,
chacune des tâches à son propre coût selon l’ouvrier qui va l’effectuer.

On pose la matrice ci-dessous:


TACHES
T1 T2 T3 T4
Alors comment peut-on
O1 8 4 3 2
OUVRIERS

affecter ces tâches à ces


O2 5 6 8 5 ouvriers avec un coût optimal ?
O3 2 5 4 9
O4 7 4 1 4
Première étape: Dégager les 0 des lignes et des colonnes
1- On dégage le minimum nombre de chaque ligne
2- On soustrait chaque élément de la ligne qui le correspond
3- On refait la même chose pour les colonnes

T1 T2
T1 T2 T3 T3 T4T4
O1 86 12
6 41 13 1 02 0 2
On obtient la matrice suivante : O2 0050 01
60 383 3 050 0 5
O3 020 25
32 42 2 97 7 2
O4 7
66 4322 10 0 43 3 1
0 1 0 0
Deuxième étape: Encadrer et barrer les 0

 On choisit la ligne avec le moins T1 T2 T3 T4


possible des 0
O1 6 1 1 0
 Si on a plusieurs choix des 0 à la
ligne on prend le plus haut et si on O2 0 0 3 0
a plusieurs choix des 0 sur la
même ligne on prend le plus à O3 0 2 2 7
gauche
O4 6 2 0 3
Premièrement, on encadre le premier 0 qu’on a choisi puis on barre tous
les 0 qui sont dans la même ligne et la même colonne avec le 0 choisi.

Cela nous donne:

T1 T2 T3 T4
O1 6 1 1 0
O2 0 0 3 0
O3 0 2 2 7
O4 6 2 0 3
Après on va choisir la 3ème ligne qui obtient un seul 0, on va cadrer le 0 de cette
ligne puis barrer le 0 en haut qui se trouve en même colonne et ainsi de suite

T1 T2 T3 T4
O1 6 1 1 0
O2 0 0 3 0
O3 0 2 2 7
O4 6 2 0 3
C’est ce qu’on appelle une solution trivial,
T1 T2 T3 T4
c’est à dire qu’on a obtenu un 0 cadré sur
chaque ligne et chaque colonne
O1 6 1 1 02
Pour trouver l’affectation minimale, on
O2 0 06 3 0 retourne vers la matrice originale et on
dégage les valeurs des 0.
O3 10 2 2 7
Et on déduit que: 2+6+2+1=11
O4 6 2 02 3
11 est le coût d’affectation minimale
Le 1er cas n’est pas assez complexe,
mais qu’est ce qu’on peut faire si on
obtient une ligne sans 0 encadrés ?

On va traiter ce cas dans


l’application suivante.
APPLICATION 2:
Prenons par exemple une situation où on cherche a affecter 5 tâches à 5 ouvriers,
chacune des tâches à son propre coût selon l’ouvrier qui va l’effectuer.

On pose la matrice ci-dessous: TACHES


7 2 1 9 4

OUVRIERS
9 6 9 5 5
8 8 3 1 8
7 9 4 2 2
4 3 7 4 8
On effectue la première étape qu’on a appliqué dans l’application 1 qui consiste de trouver le
minimum nombre de chaque ligne et puis le soustraire à la ligne associé. Et puis on refait la
même chose pour les colonnes

7
6
5 2
1 1
0 89 34 1
9
4
3 6
1 9
4 05 05 5
On obtient la matrice suivante :
7
8
6 7
8 2
3 10 87 1
7
5
4 9
7 4
2 02 02 2
4
1
0 3
0 7
4 14 58 3

1 0 0 0 0
On applique la deuxième étape qui consiste d’encadrer et barrer les 0 du tableau:

 On choisit la ligne avec le moins 5 1 0 8 3


possible des 0
3 1 4 0 0
 Si on a plusieurs choix des 0 à la
ligne on prend le plus haut et si on 6 7 2 0 7
a plusieurs choix des 0 sur la
même ligne on prend le plus à 4 7 2 0 0
gauche
0 0 4 1 5
On constate que dans la quatrième ligne on a que des 0 barrés et pas de zero
encadrés ça veut dire qu’un des ouvrier n’a été affecté une tâche.
Alors on doit passer à la troisième étape pour résoudre ce problème.
Troisième étape: Marquage et Traçage des lignes et colonnes
 La troisième étape consiste d’un ensemble de sous étapes qu’on va appliquer ci-
dessous:

X X
1- On marque en x toutes les lignes sans 0 encadrés
2- On marque toute colonne ayant un 0 barré sur une X
ligne marqué.
3- On marque chaque ligne ayant un 0 encadré par X
une colonne marqué X
4- On trace une ligne sur les lignes non marqués et
les colonnes marqués pour déduire la matrice (3*3)
 On déduit que 1 est le nombre le plus petit
de la matrice (3*3) déduite.

 Alors on soustrait tous les éléments de la 5 1 0 9 4


matrice (3*3) par ce 1 et on ajoute 1 aux
valeurs où les deux lignes s’intersectent 9 4
2 0 3 0 0
2 0 3
On obtient la matrice suivante :
5 5 66 11 0 7
3 3 66 11 0 0
0 0 4 22 6 6
On refait la 2 ème étape qui consiste à barrer et encadrer des 0

5 1 0
1 9 4
2 60 3 0 0
5 6 1 01 7
3 6 1 0 02

40 0 4 2 6
On constate que toutes les lignes et colonnes se contiennent d’un 0 encadré ce qui veut
dire qu’on peut calculer l’affectation minimale en retournant vers la matrice originale
Le coût d’affectation minimale est: 1+6+1+2+4=14
APPLICATION 3: Cas d’affectation maximale
 Le but est de maximiser le coût total des affectations afin de réaliser
toutes les tâches et savoir les taux maximales qu’on doit pas dépasser

1 2 3 4 5
A 24 16 22 30 8
B 14 18 34 28 20
C 18 12 24 14 14
D 14 16 28 16 20
E 18 18 26 20 12
1ère étape:

On choisi le plus grand nombre de la matrice (dans ce cas c’est 34)


et puis on le soustrait de chaque élément de la matrice

1 2 3 4 5

A 10 18 12 4 26
B 20 16 0 6 24
C 16 22 10 20 20
D 20 18 6 18 14
E 16 16 8 14 22
2ème étape:

Après la soustraction du coût maximale de tous les éléments de


matrice, on va effectuer la soustraction des lignes et des colonnes
qu’on a appliqué dans les applications précédentes de l’affectation
minimale.
11 22 33 44 55
A
A 60 14
6 8 0 22
14
B
B 20
14 16
8 0 6 14
6
C
C 60 12
4 0 10 10
2
D
D 14
8 04 12
0 12 80
E
E 82 80 0 6 14
6
3ème étape:

On encadre et barre les zéros de la matrice

1 2 3 4 5
A 0 6 8 0
30 14
B 14 8 0
34 6 6
C 0
18 4 0 10 2
D 8 4 0 12 0
20

E 2 0
18 0 6 6

Le coût d’affectation maximale est:30+34+18+20+18= 120


ALGORITHME DE LA METHODE
HONGROISE
Application de l’Algorithme
L’algorithme fonctionne en se basant sur 2 phases:

Phase 1: la réduction des lignes et colonnes 92 11


4 14
7 11
42 0
7
7
 Étape 1: 60 15
9 13
7 13
75 10
4
Soustraire la valeur minimale de chaque ligne 6
des valeurs de la ligne correspondante
12
6 13
7 0
6 20
8 2
8 6
 Étape 2:
Si on arrive pas à trouver des 0 dans toutes les
11
2 0
9 10
1 12
31 0
9
lignes et les colonnes de la matrice, on doit 9
soustraire la valeur minimale de chaque colonne
des valeurs de la colonne correspondante 70 12
5 14
7 10
31 14
7 7

0 0 0 2 0
Phase 2: Optimisation du problème

 Étape 1:
Tracer un nombre minimum de lignes pour couvrir tous
les zéros de la matrice
2 4 7 2 0
 On a 2 procédures pour suivre l’étape 1:
a- Balayage des lignes
b- Balayage des colonnes 0 9 7 5 4
Commençons par la procédure a:
6 7 0 0 2
 À partir de la première rangée des lignes, poser
les questions suivantes:
Est ce qu’il y’a exactement un seul 0 dans cette ligne ? 2 0 1 1 0
Si Oui, marquez un carré autour de cette entrée zero et
tracez une ligne vertical passant de lui même. 0 5 7 1 7
Sinon sautez cette ligne

Après avoir balayé la dernière ligne, vérifiez si tous les


zéros sont recouverts par des lignes
Si Oui, Passez à l’étape 2
Sinon, effectuez un balayage de colonnes.
On peut remarquer que les zéros de la 3 ème
ligne ne sont pas recouverts par des lignes

Alors, Commençons la procédure b:

On va poser les mêmes questions, mais cette


fois on va traiter les colonnes et quand on
trouve un zéro on doit tracer une ligne
horizontale.

 Étape 2:

 Vérifiez si le nombre de carrés marqués


est égal au nombre de lignes

Si Oui, Passez à l’étape 4


Sinon, Passez à l’étape 3 4 carrés # 5 lignes
Condition non vérifiée
 Étape 3:

 Identifier la valeur minimale des valeurs de 6 1


cellules non supprimés (égale à 1 dans ce cas)
6 4
o Ajouter la valeur minimale des cellules non
supprimés aux point d’intersections de la
7 8 3
matrice actuelle

o Soustraire la valeur minimale des cellules de 0 0


toutes les valeurs de cellules non supprimés
6 0
o Toutes les autre entrées restent les mêmes
2 4 6 1 0

0 9 6 4 4

On obtient la matrice suivante: 7 8 0 0 3

2 0 0 0 0

0 5 6 0 7
 Étape 4:

 Revenir à l’étape 1 et appliquer les 2 procédures 2 4 6 1 0


a et b, ça va nous donner :
0 9 6 4 4

7 8 0 0 3
5 carrés = 5 lignes
 Condition vérifiée
2 0 0 0 0

0 5 6 0 7
2 4 6 1 0
7

06 9 6 4 4

On obtient la matrice suivante: 7 8 06 0 3

2 0
9
0 0 0

0 5 6 0
10 7

Le coût d’affectation minimale : 7+6+6+9+10= 38


COMPILATION ET
EXÉCUTION EN LANGAGE C
Travaux Dirigés
Exercice 1:
Corrigé:

Alison Brad Charleen Dylan


Console 0 325 0 5
Téléphone 115 0 0 0
Baladeur 205 0 175 10
Photo 0 105 95 105

165+220+320+100=835dh
Exercice 2:
Exercice 3:

Dans une entreprise, 7 ouvriers puissants travailler indifféremment sur 6 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 travaillent sur
les différentes machines.
L’affectation pour chaque liaison sont donnés par le tableau ci-dessous.
Comment organiser l’affectation de façon à en maximiser le revenu ?

1 2 3 4 5
A 9 12 9 6 9
B 7 8 5 4 3
C 6 3 16 18 3
D 6 1 17 6 5
Corrigé:

1 2 3 4 5
A 3 0 3 6 3
B 0 1 4 5 6
C 12 15 2 0 15
D 11 16 0 11 12
E 0 0 0 0 0

L’Affectation optimale est :


12+7+18+17+0 = 54.
Après l’application de méthode de hongroise en trouve que le revenu Maximal égale 54.
CONCLUSION
MERCI POUR VOTRE
ATTENTION