O Método Húngaro: alocação ótima

Prof. Doherty Andrade

📚 O que é o Método Húngaro?

O Método Húngaro é um é um método matemático utilizado para resolver problemas de alocação ou atribuição ótima. Desenvolvido pelo matemático húngaro Harold Kuhn em 1955, o método fornece uma solução eficiente para problemas onde é necessário alocar n tarefas para n agentes (ou recursos) de forma a minimizar o custo total ou maximizar a eficiência. O método é aplicado sobre a matriz custos \(C\).

O método é especialmente útil em situações onde precisamos encontrar a combinação ótima (com o menor custo ou o maior benefício) entre recursos e tarefas, garantindo que cada recurso seja alocado a exatamente uma tarefa e cada tarefa tenha exatamente um recurso alocado.

Vamos tratar aqui apenas do caso de minimização de custos. O caso de maximização quando a matriz custos é \(C\) é modificado para minimizar a matriz custos \(-C\).

Exemplo Prático

Suponha que temos 3 trabalhadores (A, B, C) e 3 tarefas (1, 2, 3). A matriz de custos (em horas) é:

Tarefa 1 Tarefa 2 Tarefa 3
Trabalhador A 10 5 8
Trabalhador B 7 6 9
Trabalhador C 8 7 6

Matriz de custos original:

\[ C = \begin{bmatrix} 10 & 5 & 8 \\ 7 & 6 & 9 \\ 8 & 7 & 6 \end{bmatrix} \]

Onde cada elemento \(c_{ij}\) representa o custo do trabalhador \(i\) realizar a tarefa \(j\).

Aplicando o Método Húngaro, encontraríamos a atribuição ótima que minimiza o tempo total:

Tempo total: 18 horas (menor possível para esta configuração)

O resultado fundamental do Método Húngaro é apresentado a seguir:

Teorema Fundamental

Teorema: Se um número é adicionado ou subtraído de todas as entradas de uma linha ou coluna de uma matriz-custo, então uma alocação ótima para a matriz resultante é também uma alocação ótima para a matriz custo original.

Este teorema justifica o método Húngaro que consiste em transformar uma matriz-custo qualquer em uma matriz com algumas entradas nulas.

Teste de Otimalidade

Considere uma matriz-custo de dimensão n. Trace retas cobrindo linhas e colunas que contenham entradas zero usando o menor número de retas possível.

Se o número mínimo é n, então uma alocação ótima de zeros é possível e está terminado o processo.

Caso contrário, continue com o processo de ajuste.

📌 Significado dos Zeros Estrelados (★)

Zeros Estrelados representam atribuições candidatas na solução atual:

Diferença para zeros primados (P): Zeros primados são candidatos temporários identificados durante o processo de melhoria da solução.

O que é?

O Método Húngaro é um algoritmo de ordem polinomial que resolve o Problema de Alocação em tempo O(n³). Foi desenvolvido por Harold Kuhn em 1955 e aperfeiçoado por James Munkres em 1957.

Problema de Atribuição

Dada uma matriz de custos n×n, encontrar a alocação ótima (um elemento único por linha e coluna) que minimize o custo total.

Princípio Fundamental

O teorema acima garante que podemos subtrair constantes das linhas e colunas sem alterar a solução ótima, permitindo criar zeros para facilitar a atribuição.

Aplicações Práticas

  • Alocação de tarefas a trabalhadores
  • Designação de veículos a rotas
  • Emparelhamento em grafos bipartidos
  • Problemas de agendamento

Complexidade Temporal

O(n³)

n = dimensão da matriz

Complexidade Espacial

O(n²)

Armazenamento da matriz

Ótimo

Sempre

Garante solução ótima

📋 Exemplos Práticos

Clique em um exemplo para carregar a matriz:

Exemplo 1: 3×3 Original
$$\begin{bmatrix}53 & 96 & 37\\47 & 87 & 41\\60 & 92 & 36\end{bmatrix}$$
Matriz 3×3 do exercício
Exemplo 2: 4×4 Original
$$\begin{bmatrix}90 & 75 & 75 & 80\\35 & 85 & 55 & 65\\125 & 95 & 90 & 105\\45 & 110 & 95 & 115\end{bmatrix}$$
Problema balanceado clássico
Exemplo 3: 5×5 com Zeros
$$\begin{bmatrix}60 & 145 & 0 & 75 & 210\\55 & 155 & 0 & 75 & 230\\65 & 115 & 0 & 60 & 200\\50 & 120 & 0 & 60 & 190\\30 & 150 & 0 & 40 & 200\end{bmatrix}$$
Matriz com zeros naturais
Exemplo 4: 3×3 Simples
$$\begin{bmatrix}3 & 1 & 2\\2 & 3 & 1\\1 & 2 & 3\end{bmatrix}$$
Custos pequenos para demonstração
Exemplo 5: 5×5 Aleatório
$$\begin{bmatrix}50 & 60 & 70 & 80 & 90\\35 & 40 & 45 & 50 & 55\\20 & 25 & 30 & 35 & 40\\45 & 50 & 55 & 60 & 65\\30 & 35 & 40 & 45 & 50\end{bmatrix}$$
Padrão de custos crescente
Exemplo 6: Caso Degenerado
$$\begin{bmatrix}10 & 10 & 10 & 10\\10 & 20 & 30 & 40\\20 & 20 & 20 & 20\\30 & 40 & 50 & 60\end{bmatrix}$$
Múltiplos mínimos iguais
: Zero estrelado (atribuição confirmada)
P : Zero primado (candidato temporário)
  Linhas/colunas cobertas
0 : Zero (oportunidade de atribuição)

🔍 Visualização Passo a Passo

Passo 0 / 0

📊 Resultado Final

Nenhuma solução ainda gerada.

📝 Algoritmo Passo a Passo (Método Húngaro)

  1. Redução de Linhas: Subtrair o mínimo de cada linha (teorema garante que não altera a solução ótima)
  2. Redução de Colunas: Subtrair o mínimo de cada coluna
  3. Atribuição Inicial: Estrelar zeros independentes (máximo possível)
  4. Cobertura: Cobrir colunas com zeros estrelados
  5. Teste de Otimalidade: Se n colunas cobertas → SOLUÇÃO ÓTIMA ENCONTRADA
  6. Encontrar Zero Não Coberto: Procurar zero sem linha/coluna coberta
  7. Primar Zero: Marcar zero não coberto como primado
  8. Construir Caminho Alternante: Alternar entre zeros estrelados e primados
  9. Ajustar Matriz: Encontrar menor valor não coberto e aplicar ajuste
  10. Repetir passos 4-9 até teste de otimalidade ser satisfeito