Solucionador de Problemas de Atribuição

Resolva problemas de atribuição utilizando o algoritmo húngaro. Implementa o algoritmo húngaro (Kuhn-Munkres) para encontrar a atribuição ótima um-para-um…

Implementa o algoritmo húngaro (Kuhn-Munkres) para encontrar a atribuição ótima um-para-um entre trabalhadores e tarefas, minimizando ou maximizando o custo total com complexidade de tempo O(n3).

O que é o problema de atribuição?

O problema de atribuição é um problema fundamental de otimização combinatória: dados n agentes e n tarefas com uma matriz de custos C, encontrar uma atribuição um-para-um que minimize o custo total.

O algoritmo húngaro (método Kuhn-Munkres, 1955) resolve em O(n³). Reduz iterativamente a matriz por subtração de linhas e colunas, depois encontra a atribuição ótima por caminhos aumentantes.

Para matrizes retangulares, linhas ou colunas fictícias com custo 0 são adicionadas. Agentes ou tarefas não atribuídos são reportados separadamente.

Formula: Minimizar Σ C[i][σ(i)] para todo i sujeito a σ ser uma permutação (mapeamento um-para-um) Passos do método húngaro: 1. Subtrair os mínimos das linhas 2. Subtrair os mínimos das colunas 3. Cobrir os zeros com o mínimo de linhas 4. Ajustar a matriz e repetir até o ótimo

Exemplo de cálculo

Matriz de custos: [[9,2,7],[6,4,3],[5,8,1]]. Redução por linhas → [[7,0,5],[3,1,0],[4,7,0]]. Redução por colunas → [[4,0,5],[0,1,0],[1,7,0]]. Os zeros permitem uma tarefa por agente: Agente 1→Tarefa 2 (custo 2), Agente 2→Tarefa 1 (custo 6), Agente 3→Tarefa 3 (custo 1). Custo total = 9 — menor que o pareamento tentador Agente 2→Tarefa 3, Agente 3→Tarefa 1 (10).

Quando usar esta calculadora

Erros comuns a evitar

Como interpretar os resultados

Normas e referências relacionadas

Perguntas frequentes

Pode maximizar?

Sim. Negar todos os custos ou subtrair do máximo, depois resolver a minimização. A atribuição ótima é a mesma.

E se o número de trabalhadores e tarefas for diferente?

O algoritmo preenche a dimensão menor com entradas fictícias (custo 0). Atribuições fictícias indicam trabalhadores ou tarefas não atribuídos.

O problema de atribuição pode lidar com restrições do mundo real, como habilidades ou disponibilidade dos trabalhadores?

Não diretamente na formulação básica. No entanto, você pode codificar atribuições inviáveis definindo seu custo como um número muito grande (p. ex., 999999), impedindo efetivamente que o algoritmo as selecione. Para restrições complexas, considere solvers de programação linear inteira.