Justification de la méthode hongroise (Kuhn-Munkres)


14

J'ai écrit une implémentation de l'algorithme de Kuhn-Munkres pour le problème de correspondance parfaite bipartite de poids minimum basé sur des notes de cours que j'ai trouvées ici et là sur le web. Cela fonctionne vraiment bien, même sur des milliers de sommets. Et je suis d'accord que la théorie derrière elle est vraiment belle. Et pourtant, je me demande encore pourquoi j'ai dû aller aussi loin. Je trouve que ces notes de cours n'expliquent pas pourquoi nous ne pouvons pas simplement prendre le programme linéaire primal et le passer à la méthode simplex. Bien sûr, je soupçonne que c'est une question de performances prévisibles, mais comme je ne l'ai pas vu explicitement déclaré, je ne suis pas trop sûr. Il est prouvé que les points extrêmes du polytope du primal sont en 0-1, il semble donc que nous pouvons le nourrir directement dans une implémentation simplex sans même formuler le dual. Ou suis-je simpliste?

Réponses:


16

(Déplacé d'un commentaire.)

Bien sûr, vous pouvez résoudre n'importe quel LP en utilisant un solveur LP à usage général, mais les algorithmes spécialisés ont généralement de bien meilleures performances.

Il ne s'agit pas seulement de garanties de performances asymptotiques théoriques, il s'agit également de performances pratiques dans le monde réel. Des algorithmes tels que la méthode hongroise peuvent être extrêmement rationalisés et ils sont relativement faciles à mettre en œuvre correctement et efficacement.

Vous pouvez également souvent éviter des problèmes tels que l'utilisation de nombres rationnels exacts par rapport aux nombres à virgule flottante; tout peut être fait facilement avec des entiers.


14

Bien que cette réponse soit correcte dans un sens général, il est également utile d'essayer de comprendre spécifiquement ce qui ne va pas lors de l'application du simplexe primal au problème d'affectation. Considérons un problème d'affectation NxN avec la matrice de coût carré c_ij. Le LP correspondant a N ^ 2 variables x_ij à résoudre. En considérant ces x_ij comme une matrice carrée X, une solution réalisable nécessite que X soit une matrice de permutation, qui est imposée par des contraintes 2N-1 dans notre LP (il peut sembler à première vue qu'il existe 2N contraintes, une pour chaque ligne et un pour chaque colonne, mais ils ne sont pas tous indépendants et nous en supprimons un). Les contraintes LP forment ainsi une matrice (2N-1) x (N ^ 2) A.

Maintenant, une solution de base est formée en choisissant un ensemble de (2N-1) variables de base. Cependant, pour que cette solution de base soit également réalisable, seules N de ces variables peuvent avoir la valeur 1, et les autres (N-1) sont 0. Ainsi, chaque solution réalisable est dégénérée. Le problème avec cette dégénérescence est que toutes les (N-1) variables de base qui sont 0 peuvent être échangées avec n'importe laquelle des variables (N ^ 2-2N + 1) non basiques, un soi-disant "pivot dégénéré", sans effet sur la valeur de la fonction objectif [vous échangez simplement une variable 0 pour une autre]. Lorsque N est grand, l'algorithme du simplexe primitif perd beaucoup de temps à faire des pivots dégénérés qui n'améliorent pas la solution. C'est le nœud de la raison pour laquelle l'algorithme du simplexe primitif naïf n'est pas utilisé directement pour résoudre le problème d'affectation.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.