Vous êtes sur la page 1sur 27

METHODE

HONGROISE
RAPPORT DU PROJET

BELAOUCHI LAMYAE
RABHI WIAM
EL BOUYAHYAUI MOHAMED
NEQROUZ MOSTAFA
OMARI HATIM
DOUKALI BOUTHAYNA
CHOUKRI MOHAMED

Encadré par:
Mr MBARKI ABDERRAHIM
| INTRODUCTION

Dans le cadre de notre première année du cycle


igenieurs en ingenierie des Data Sciences & Cloud
Computing à l’ENSAO, nous avons eu pour tâche la
réalisation d'un projet informatique.
Notre objectif était de réaliser un programme de la
méthode hongroise en utilisant le langage C.
Dans ce dossier nous allons tout d’abord exposer le but
de cet algorithme, puis ses phases et leurs buts.

METHODE HONGROISE 2
| SOMMAIRE

Première partie : Analyse de la méthode hongroise


1. Les données : variables
2. Le but : résultat

Deuxième partie : Guide d’exécution de programme


1. Présentation générale
2. Déroulement du programme

Troisième partie : Explication de chaque partie de programme


1. Première phase : fonctions utilisées
2. Deuxième phase : fonctions utilisées
3. Troisième phase : fonctions utilisées
4. Quatrième phase : fonctions utilisées

Conclusion

METHODE HONGROISE 3
PREMIERE PARTIE : ANALYSE DE LA METHODE
HONGROISE :
L'algorithme hongrois ou méthode hongroise, aussi appelé algorithme de König,
est un algorithme de recherche opérationnelle, c’est une méthode de chapitre
théorie des graphes qui résout le problème d'affectation.
On représente les données nécessaires pour l'algorithme dans une matrice, et on
suit des instructions précise pour avoir le résultat.
1. Les données : variables :
En se basant sur le cours on a comme données a entrer dans le programme est
une matrice de taille carrée. Et chaque case ; il y a plusieurs instructions qui se
déroulent. Donc on a déclaré une structure, qui englobe toutes les informations
d’une case, dont il y a quatre attributs :
Cout : de type entier et la valeur initiale de la case.
Normal : de type entier remplis par 0 si la case ne contient pas de 0 sinon 1.
Encadre : de type entier remplis par 1 si la case contient de 0 encadre sinon 0.
Barre : de type entier remplis par 1 si la case contient de 0 barre sinon 0.
Et on déclare une autre structure qui englobe les informations de matrice et ses
attributs sont :
o_lign : de type entier indique le nombre de zéro dans la ligne i
oenca_lign : de type entier indique le nombre de zéro encadrée dans la ligne i
obarre_lign: de type entier indique le nombre de zéro barrrée dans la ligne i
o_col : de type entier indique le nombre de zéro dans la colonne i
oenca_col : de type entier indique le nombre de zéro encadrée dans la colonne
i
obarre_col : de type entier indique le nombre de zéro barrrée dans la colonne i
lign_mark : de type entier inique si la ligne i est marquée d'un astèrisque
col_mark : de type entier inique si la colonne i est marquée d'un astèrisque

METHODE HONGROISE 4
Après on déclare une structure qui a comme attributs :
n : la taille de la matrice carrée.
**cout_affec : une matrice carrée de la première structure.
*etat : un pointeur de la deuxième structure.
Pour faciliter l’insertion des données de la matrice on a choisi de créer un
’’fichier.txt’’, dont le quel on tape les couts de la matrice et sa taille, et qu’on
l’appelle dans notre programme.

2. Le but : résultat :

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 à un
ensemble de ressources (machines-outils, processeurs, etc.).
Donc dans notre programme on retournera a la fin la solution optimale à l’aide
d’une fonction.

METHODE HONGROISE 5
DEUXIEME PARTIE : GUIDE D’EXECUTION DE
PROGRAMME :
1.Présentation générale :
Pour que le programme s’exécute correctement il faut mettre le
‘’fichier.txt’’ (les données) et le ‘’fichier.c’’ (le programme) dans le même
dossier. Et il faut nommer le ‘’fichier.txt’’ dans notre cas ‘’instance’’
d’extension ‘’.txt’’.
2.Déroulement du programme :
Au début, on insère nos données dans le ‘’fichier.txt’’ puis on les appelle dans
notre programme en appelant le fichier comportant les données dans le
programme. Les données s’insèrent automatiquement dans la matrice déclaré dans
le programme. Puis, chaque phase appelle la matrice, qu’on est entrain de traiter,
comme argument d’une fonction. Et après le traitement de chaque phase on aura
une résultat :
Phase 1 : pour cette phase on a besoin de la matrice comme argument ; et
retourne à la fin la matrice après le retrait le min des colonnes et des lignes.
Phase 2 : pour cette phase on a besoin la matrice résultante après le traitement
de la phase 1 comme argument ; et retourne à la fin la matrice avec les zéros soit
barre soit encadre.
Phase 3 : pour cette phase on a besoin comme argument la matrice après le
traitement de la phase 2 ; et retourne à la fin l’état du tableau, ça veut dire modifie
dans le pointeur de structure etat tab les ligne marquées et les colonnes marquées.
Phase 4 : pour cette phase on a besoin la matrice résultante après le traitement
de la phase 3 comme argument et la retourner a la fin de la fonction apres avoir
prendre le plus petit nombre, et retrancher ce nombre à la partie du matrice non
traversée par les traits et ajouter ce nombre aux éléments se trouvant à
l'intersection de 2 traits.

METHODE HONGROISE 6
TROISIEME PARTIE : EXPLICATION DE CHAQUE PARTIE
DE PROGRAMME :
Avant le lancement du traitement on a déclaré les structures :

METHODE HONGROISE 7
• Apres on doit initialiser la matrice à créer et le tableau de l‘état des
lignes et des colonnes :

• A l’aide de cette partie qui se trouve au-dessous on a pu mentionner


que la matrice initial ne comporte aucun zéro encadre ni barre et aussi
que tous les cases comportent des nombre normales aucune ligne
marquée ni colonne

METHODE HONGROISE 8
• Cette fonction ouvre et lit le ‘’fichier.txt’’ comportant les données de
la matrice et sa taille. Et crée une matrice, laquelle on va la traiter en la
modifiant, et alloue une espace mémoire pour ranger les données reçut
par le ‘’fichier.txt’’. Et a la fin retourne la matrice.

METHODE HONGROISE 9
• Cette fonction crée et alloue de la mémoire pour une matrice
initiale remplis par les données reçut du ‘’fichier.txt’’, qu’on ne va pas la
modifier car on est censé savoir les couts initiaux de chaque case pour
déduire la solution finale de l’algorithme. Et a la fin retourne la matrice
initiale.

METHODE HONGROISE 10
1. Première phase : fonctions utilisées

• Cette fonction retourne le min d’une colonne apres avoir la matrice


initiale comme argument de la fonction.

• Cette fonction modifie la colonne en retranchant du cout min d'une


colonne donnée et prend comme argument la matrice initiale.

METHODE HONGROISE 11
• cette fonction retourne la matrice aprés retrait du cout min de
toutes les colonnes de la matrice initiale et prend comme arguments la
taille de la matrice initiale et la matrice.

• Cette fonction retourne le min d’une ligne après avoir la matrice


initiale comme argument de la fonction et la ligne.
METHODE HONGROISE 12
• Cette fonction modifie la ligne en retranchant du cout min d'une ligne
donnée et prend comme argument la matrice initiale.

• Cette fonction retourne la matrice aprés retrait du cout min de toutes les colonnes
de la matrice initiale et prend comme arguments la taille de la matrice
METHODE HONGROISE 13
• cette fonction lance les traitement de la matrice pour la premiere phase
et affiche la matrice aprés modification de toutes les colonnes en lançant les
traitement pour les modifications nécessaires pour les lignes de la matrice
initiale, et prend comme arguments la taille de la matrice initiale et la matrice
et la structure probleme aui regroupe tab etat et la matrice qu’on modifie.

METHODE HONGROISE 14
2. Deuxième phase : fonctions utilisées

• Cette fonction retourne la ligne de nombre minimum des zéros.

• Cette fonction recherche le nombre des zéros dans chaque ligne et colonne.
METHODE HONGROISE 15
• Cette fonction sert à calculer le nombre de 0 encadré dans chaque
colonne et ligne, après le traitement de la phase 3 ; c’est-à-dire après
l’encadrement et le barrage des zéros. En considérant juste les zéros
encadrés comme étant des zéros. Et modifie aussi l’état du matrice.

METHODE HONGROISE 16
METHODE HONGROISE 17
• Modifier l’etat de tableau, en modifiant le nombre des zeros de
chaque ligne et de chaque colonne. Et sert aussi a encadrer les zeros et
les barrees et ajoute les modification concernant le nombre de zeros
encadre et bares dans l’etat de la matrice.

• Cette fonction sert a verifier si la matrice avant la phase 3 on a n zeros


si oui retourne 1 et passe directement a la solution finale , sinon retourne
0 et passe a la phase 4 pour contunier le traitement.

METHODE HONGROISE 18
• Cette fonction sert a verifier si la matrice apres la phase 3 on a n
zeros si oui retourne 1 et passe directement a la solution finale , sinon
retourne 0 et passe a la phase 4 pour contunier le traitement.

METHODE HONGROISE 19
3. Troisième phase : fonctions utilisées

METHODE HONGROISE 20
4. Quatrième phase : fonctions utilisées

• Cette fonction retourne le nombre min des colonnes et lignes


non barrées

METHODE HONGROISE 21
• Cette fonction va retrancher la val de min aux col non
barrées et l’ajouter au intersections des lignes barrées avec
colonnes barrees.

METHODE HONGROISE 22
• Cette fonction calcule la solution optimale finie si la matrice s’est traite
par les fonction de la phase 3.

METHODE HONGROISE 23
• Cette fonction calcule la solution optimale finie si la matrice ne
contient pas des lignes marqué.

METHODE HONGROISE 24
• Cette fonction appelle toutes les fonctions des phases
précédentes, afin de faciliter l’appelle des fonction dans la fonction
main.

METHODE HONGROISE 25
Pour le programme principal on aura la stucture suivante :

• Pour la fonction main ; on l’utilise pour appeler les autres


fonctions. Premièrement, on declare les variables qu’on a besoin pour les
traitements. Puis on insere les donnes de la matrice dans la matrice du
probleme a l’aide de la fonction lecture() appelante au fichier.txt externe
on initialise la matrice initiale a l’aide de la fonction mat_ini. On affiche la
matrice initiale, on utilise les fonctions utilisees pour la phase 1, et on
affiche la matrice aprés retranchement des min de chaque colonne et
chaque ligne.
METHODE HONGROISE 26
CONCLUSION

Dans ce programme on a fait exécuter l’algorithme de König


qui fixe le problème d’affectation.
En choisissant pour chaque phase un programme contenant
plusieurs fonctions.
Et a la fin, on les est tous appeler dans la fonction principale.

METHODE HONGROISE 27

Vous aimerez peut-être aussi