Beruflich Dokumente
Kultur Dokumente
Em geral, no problema de atribuição temos m agentes e n tarefas. Pretende-se designar uma tarefa
para cada agente, minimizando o custo cij associado com o agente i para realizar a tarefa j. Assim,
pretendemos encontrar o acoplamento ótimo, um a um, entre as tarefas e os agentes.
A solução ótima pode ser encontrada manipulando a chamada matriz reduzida. A matriz de
coeficientes de custo reduzida é obtida da matriz original de coeficientes de custo cij apenas
substituindo os custos por cij = cij – ui + vj em que ui é o valor mínimo de cada linha e vj é o valor
mínimo de cada coluna j. Assim a matriz de custo reduzida é obtida em um processo de dois passos:
A matriz reduzida tem pelo menos um elemento igual à zero em cada linha e coluna e todos os
outros elementos são não negativos porque foram escolhidos os valores mínimos nas operações de
subtração. Deve-se observar que esses valores mínimos escolhidos podem ser considerados como
sendo os valores ui e vj que fornecem uma situação factível do problema. Deve-se observar também
que esses valores são iguais aos valores das variáveis de folga:
Portanto os elementos da matriz de custo reduzida são elementos dos sij >= 0. Agora vamos supor
que podemos encontrar valores de xij factíveis para o problema e que a parcela dos xij com valor igual
a 1 estão associados a elementos da matriz reduzida com valores iguais a zero. Nesse contexto, os
valores identificados representam uma solução ótima do problema de designação. Revisando a
estrutura do problema de designação verificamos que devemos ter exatamente um xij com valor 1
em cada linha e em cada coluna, e o número total de variáveis com valor xij = 1 deve ser exatamente
igual a m.
Portanto, uma estratégia para encontrar uma solução ótima consiste em modificar a matriz reduzida
de forma a encontrar m células da matriz com valores iguais a zero e localizadas de tal forma que
exista pelo menos uma célula desse tipo em cada linha e coluna da matriz. Essas operações podem
ser efetuadas usando a observação realizada anteriormente que permite encontra ui e vj de uma
solução factível.
O Algoritmo Húngaro
Passo Inicial: Para cada linha da matriz de custo, subtrair de cada elemento da linha, o
menor valor encontrado desta linha. Feito isso, para cada coluna da matriz de custo, subtrair
de cada elemento da coluna, o menor valor encontrado desta coluna. Se a solução ótima não
for encontrada, seguir para o passo principal.
Passo Principal:
1) Identificar o número mínimo de linhas (através das linhas e colunas da matriz reduzida)
necessárias para cobrir todos os elementos da matriz reduzida com valor igual à zero. Se
o número mínimo de linhas encontradas é igual a m então é possível identificar a solução
ótima da matriz reduzida. Em caso contrário, ir para o passo 2.
2) Selecionar o elemento de menor valor e não coberto da matriz. Substituir esse valor de
cada elemento não coberto e também adicionar esse valor a cada elemento não coberto
e também adicionar esse valor a cada elemento que está coberto por duas linhas (os
elementos que estão cobertos apenas por uma linha permanecem inalterados). Voltar ao
passo 1.
Exemplo:
Dada a matriz de custos abaixo, encontrar uma solução ótima, utilizando o método húngaro.
Passo Inicial: Encontrar a matriz reduzida subtraindo de cada linha o menor valor desta linha,
produzindo pelo menos um valor igual à zero nesta linha. Em seguida, subtrair de cada coluna o
menor valor desta coluna, produzindo pelo menos um valor igual a zero em cada coluna.
1 2 3 4
1 1 0 3 2
2 0 1 2 3
3 5 2 0 4
4 0 3 1 2
1 2 3 4
1 1 0 3 0
2 0 1 2 1
3 5 2 0 2
4 0 3 1 0
Vamos verificar se é possível, a partir dessa matriz reduzida, encontrar m = 4 células com valor zero,
de forma que exista uma célula desse tipo em cada linha e coluna da matriz.
Lembrando que precisamos atribuir uma tarefa para cada agente, não podendo uma tarefa ser
executada por mais de um agente ou o contrário, um agente executar mais de uma tarefa.
A leitura que fazemos da matriz reduzida encontrada é que, no caso da tarefa 1 (coluna 1) ela seria
executada pelos agentes 2 e 4 (linha 2 e linha 4), e assim por diante.
Vamos verificar então, se é possível atribuirmos uma tarefa para cada agente?
Devemos voltar nosso olhar primeiramente para as colunas que possuem apenas um zero, neste
caso, coluna 2 e 3. A tarefa 2 (coluna 2) será executada pelo agente 1 (linha 1), e a tarefa 3 será pelo
agente 3. Agora devemos verificar as linhas, agente 2 executará a tarefa 1 e agente 4 executará a
tarefa 4.
Conseguimos encontrar uma solução, de maneira que cada tarefa seja executada apenas por um
agente. Nosso quadro ótimo é o seguinte, vamos colocar 1 em cada xij da solução encontrada e zero
para as demais.
1 2 3 4
1 0 1 0 0
2 1 0 0 0
3 0 0 1 0
4 0 0 0 1
Geralmente o número de células com valor igual a zero é maior que m células com valores iguais à
zero com um elemento em cada linha e coluna. Assim, deve-se desenvolver uma estratégia adicional
para contornar esse problema. O exemplo a seguir mostra este problema.
1 2 3
1 2 5 7
2 4 2 1
3 2 6 5
1 2 3
1 0 2 5
2 3 0 0
3 0 3 3
Na matriz reduzida não é possível encontrar 3 células com valor corrente igual a zero, de forma que
se encontre um elemento por coluna ou por linha. Deve-se observar que podemos escolher apenas
duas variáveis xij com valores iguais a 1. Assim temos as seguintes possibilidades:
Portanto, o número máximo de células independentes é igual a 2, Deve-se observar também que o
número mínimo de linha (horizontal e vertical) necessários para cobrir todas a células com valores
iguais a zero, também é igual a 2. Temos que cobrir (traçar uma linha) os zeros, de modo que, todos
os zeros da matriz estejam cobertos.
Voltando a matriz reduzida encontrada, como não foi possível encontrar uma solução ótima,
devemos seguir para o passo principal do algoritmo húngaro.
1 2 3
1 0 2 5
2 3 0 0
3 0 3 3
A estratégia é subtrair co para cada elemento não coberto e adicionar co para cada elemento coberto
duas vezes (por dois traços).
co = min {2,5,3,3} = 2
Iremos subtrair co das células não cobertas (x12, x13, x32 e x33) e adicionar co a célula coberta duas
vezes (x21). Uma nova matriz reduzida é encontrada.
1 2 3
1 0 0 3
2 5 0 0
3 0 1 1