Justificação do método húngaro (Kuhn-Munkres)

14

Escrevi uma implementação do algoritmo Kuhn-Munkres para o problema de correspondência perfeita bipartida de peso mínimo com base nas notas de aula encontradas aqui e ali na web. Funciona muito bem, mesmo em milhares de vértices. E eu concordo que a teoria por trás disso é verdadeiramente bela. E ainda me pergunto por que tive que me esforçar tanto. Acho que essas notas de aula não explicam por que não podemos simplesmente pegar o programa linear primitivo e passá-lo para o método simplex. É claro que suspeito que seja uma questão de desempenho previsível, mas como não o vi explicitamente declarado, não tenho muita certeza. Os pontos extremos do politopo do primal estão em 0-1, portanto parece que podemos alimentá-lo diretamente para uma implementação simplex sem sequer formular o dual. Ou estou sendo simplista?

Kaveh
fonte

Respostas:

16

(Movido de um comentário.)

É claro que você pode resolver qualquer LP usando um solucionador de LP de uso geral, mas algoritmos especializados geralmente têm um desempenho muito melhor.

Não se trata apenas de garantias teóricas de desempenho assintótico, mas também de desempenho prático do mundo real. Algoritmos como o método húngaro podem ser extremamente simplificados e são relativamente fáceis de implementar de maneira correta e eficiente.

Você também pode evitar problemas com o uso de números racionais exatos versus números de ponto flutuante; tudo pode ser feito facilmente com números inteiros.

Jukka Suomela
fonte
14

Embora essa resposta esteja correta em um sentido geral, também é útil tentar entender especificamente o que dá errado ao aplicar o simplex primitivo ao problema de atribuição. Considere um problema de atribuição de NxN com a matriz de custos quadrados c_ij. O LP correspondente possui N ^ 2 variáveis ​​x_ij para resolver. Pensando neles x_ij como uma matriz quadrada X, uma solução viável requer que X seja uma matriz de permutação, imposta por restrições 2N-1 em nosso LP (pode parecer à primeira vista que existem restrições 2N, uma para cada linha e uma para cada coluna, mas elas não são todas independentes e descartamos uma delas). As restrições de LP formam assim uma matriz (2N-1) x (N ^ 2) A.

Agora, uma solução básica é formada ao escolher um conjunto de variáveis ​​básicas (2N-1). No entanto, para que essa solução básica também seja viável, apenas N dessas variáveis ​​pode ter valor 1, e as outras (N-1) são 0. Portanto, toda solução viável é degenerada. O problema com essa degenerescência é que qualquer uma das variáveis ​​básicas (N-1) 0 é trocável por uma das variáveis ​​não básicas (N ^ 2-2N + 1), o chamado "pivô degenerado", sem efeito no valor da função objetivo [você está apenas trocando uma variável 0 por outra]. Quando N é grande, o algoritmo simplex primitivo perde muito tempo criando pivôs degenerados que não melhoram a solução. Esse é o cerne do motivo pelo qual o algoritmo simplista simples e ingênuo não é usado diretamente para resolver o problema de atribuição.

BobC
fonte