Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ALGORITHME HONGROIS PROPOSÉ PAR KUHN


Information sur la source

Description

Il s'agit de l'algorithme Hongrois proposé par Kuhn.
Il s'agit d'une matrice carré, là où les valeurs infinies restent inchangées.
L'algorithme procède en trois étapes successives.
1- éliminer le plus petit élément de chacune des colonnes  puis celui de chacune des lignes de la matrice des coûts.
2- Si, cette solution n'est pas optimale, on considère la ligne ayant un nombre minimal de zéros. On encadre l'un des zéros de cette ligne, puis on barre les zéros qui se trouvent sur la même ligne ou la même colonne que le zéro encadré. On procède de même pour toutes les lignes.
3- On marque toutes les lignes qui ne contiennent aucun zéro encadré
On marque les lignes qui ont un zéro encadré dans une colonne marqué
On marque les colonnes qui ont un ou plusieurs zéros barrés dans une ligne marquée.
On répète ces trois marquages successifs jusqu'à ce que l'on ne puisse plus affecter de nouveaux marquages.
On barre ensuite, les lignes non marquées ainsi que les colonnes marquées.
Dans le tableau réduit obtenu, on retranche la valeur de l'élément le plus petit aux colonnes non barrées et on l'ajoute aux lignes barrées.
On poursuit la procédure de traitement sur la matrice résultante en reprenant à la seconde phase jusqu'à l'obtention d'une solution optimale.


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de nosferaltu0 le 14/05/2008 16:10:47

J'aimerais juste avoir un ou deux exemple(s) concret(s) de l'utilisation de l'algorithme.

Merci.

PS : La note que je met ne correspond à rien puisque je n'ai pas regardé les sources.
<a href="http://en.wikipedia.org/wiki/Hungarian_algorithm">Un peu plus d'information sur l'algo<a> (en anglais)

signaler à un administrateur
Commentaire de zizofredj le 15/05/2008 12:46:30

Etant donné n tâches à réaliser sur m  machines et sachant que l'on connaît le coût de réalisation Cij de la tâche ti par la machine mj (pour tous les couples (ti,mj) possibles, si la tâche ti ne peut être effectuée par la machine mj, on pose Cij=?), on cherche une permutation ? de {1,2,.,n} conduisant à un coût total :
somme(Ci,?(i))  minimum. Ceci est obtenu en cherchant une solution à coût nul (un seul zéro dans chaque colonne et dans chaque ligne).
La matrice ci-dessous illustre ce que je viens de dire :
1 2 3 4 5
A 7 3 5 7 10
B 6 ? ? 8 7
C 6 5 1 5 ?
D 11 4 ? 11 15
E ? 4 5 2 10

La solution optimale est alors obtenue grâce aux éléments :
C2,A1= C2,B5= C2,C3= C2,D2= C2,E4=0
Si l'on revient aux données initials, on obtient:
CA1+ CB5+ CC3+ CD2+ CE4=7+7+1+4+2=21

signaler à un administrateur
Commentaire de nosferaltu0 le 15/05/2008 13:34:49

Donc si je comprend bien en mettant des ? dans la diagonale on retombe sur le problème du voyageur de commerce.(VDC ou TSP http://en.wikipedia.org/wiki/Travelling_salesman_problem)

Merci.

signaler à un administrateur
Commentaire de zizofredj le 20/05/2008 13:00:06

Salut,
Désolé mais des il y a des caractères non reconnus par l'éditeur texte ce qui justifie les ? mal placés. Voilà donc le texte intégrale.
Etant donné n tâches à réaliser sur m  machines et sachant que l'on connaît le coût de réalisation Cij de la tâche ti par la machine mj (pour tous les couples (ti,mj) possibles, si la tâche ti ne peut être effectuée par la machine mj, on pose Cij=infini), on cherche une permutation 's' de {1,2,.,n} conduisant à un coût total :
somme(Ci,s(i))  minimum. Ceci est obtenu en cherchant une solution à coût nul (un seul zéro dans chaque colonne et dans chaque ligne).
si on pose I=infini
La matrice ci-dessous illustre ce que je viens de dire :
1 2 3 4 5
A 7 3 5 7 10
B 6 I I 8 7
C 6 5 1 5 I
D 11 4 I 11 15
E I 4 5 2 10

La solution optimale est alors obtenue grâce aux éléments :
C2,A1= C2,B5= C2,C3= C2,D2= C2,E4=0
Si l'on revient aux données initials, on obtient:
CA1+ CB5+ CC3+ CD2+ CE4=7+7+1+4+2=21
Bon un problème d'affectation est un cas particulier du problème de transport sans capacité.

signaler à un administrateur
Commentaire de nosferaltu0 le 20/05/2008 17:18:14

les ? n'empèchait pas la comprension, ce n'etait qu'un nom de variable. Je trouve que l'utilisation de la lettre C et l'appellation de la fonction cout C sans paranthèse est plus génante pour la comprehension.

signaler à un administrateur
Commentaire de zaidimakram le 30/07/2008 10:54:42

salut
j'ai une matrice non carré de ce type:
10
2 12 10 16 4 18 8 18 18 12
6 36 30 48 12 54 24 54 54 36
l'algoritme ne fonctionne pas pourrai je connaitre la cause. il m'afficehe des valeur -842150451
-842150451 de ce types comment je pourrai le faire fonctionner.
merci

signaler à un administrateur
Commentaire de nosferaltu0 le 30/07/2008 11:01:37

Déjà avant de regarder plus en détail si ta matrice n'est pas carré il faut que tu la transforme en matrice carré en mettant à l'infini les cases rajoutées. Sinon ça ne peut pas marcher puisque l'algorithme à besoin d'une matrice carré.

signaler à un administrateur
Commentaire de susane le 19/01/2009 11:51:08

merci pour cet algorithme, c'est intéréssant ce que vous avez fait.
j'ai voulu voir ce que ça mais eu un problème en l'éxécutant en borland c++, il m'affiche toujours "erreur!!! impossible d\'ouvrir le fichier voulu", quand j'ai lu attentivement la code source j'ai réaliser qu'il y a un problème dans l'ouverture de fichier ftp, comment faire pour que ça marche?
merci :)

signaler à un administrateur
Commentaire de zizofredj le 02/02/2009 16:59:33

il suffit de placer votre instance dans le même dossier où se trouve votre code.
et dans le fichier affec.cpp écrire le nom de votre instance dans la ligne
#define data "instance.txt"//instance

signaler à un administrateur
Commentaire de llphenix le 21/03/2009 15:47:30

bon jour .
svp je veut savoir pk votre pgm ne marche pas correctement quand j'ai mis une matrice carré :
  1 2 3 4 5 6 7
A 1000 4 1 3 7 1000 2
B 1 6 4 3 1000 2 4
C 6 1 4 6 3 12 1000
D 10 1000 3 4 7 8 3
E 3 7 1000 2 16 3 8
F 14 9 4 1000 3 7 6
G 5 3 9 10 4 1000 3





signaler à un administrateur
Commentaire de zizofredj le 28/03/2009 11:49:44

mettez seulement des chiffres et à priori ça ira

signaler à un administrateur
Commentaire de nalox le 23/06/2009 00:35:06

Bonjour,

J'ai essayé d'exécuter le programme avec la matrice suivante :

10
4  9 90  8 65  7 18  3  42 19
4  8  5 76  5  2 15  4   7 15
54  8  4  9  9  9  2  8   9 65
6  1  3  1  2  7 12  9  44 17
65 98  5  4 11  8 13 17  32  9
16 15 10 25 30  7 12 18  32 18
87 56  6 76 25 11  9 14  22 19
9 10 16 17 75 16  8 11   9  4
61 18 11 23 45 34  7 12  20 18
90 81 23  6  7  4  8 10   4  7

ca cycle indéfiniment....vous connaissez la raison?
merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.