Você está na página 1de 5

O PROBLEMA DE ATRIBUIÇÃO/DESIGNAÇÃO

O problema de atribuição ou problema de designação pode ser considerado um caso especial do


problema de transportes. Ele se caracteriza pela otimização de um problema de atribuição de tarefas
a serem executadas. Como exemplo, podemos modelar situações em que há a necessidade de
otimizar um quadro de tarefas (n) a serem executadas por algumas máquinas (m), ou, um cenário em
que existam equipes (m) para executarem determinadas tarefas (n). Sendo assim, se m=n o
problema de transporte se transforma num problema de atribuição.

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.

Devem-se observar dois fatores importantes:

A) Como o problema de atribuição é um caso especial de problema de transportes, então


podemos usar o algoritmo do problema de transportes para resolver o problema de
designação. Entretanto, é mais adequado desenvolver um algoritmo simplex especializado
para resolver o problema de designação, utilizaremos o algoritmo húngaro.
B) Todo problema de transportes pode ser transformado em um problema de designação
equivalente. Assim, podemos resolver um problema de transportes transformando esse
problema em um problema de designação e usando um algoritmo especializado para o
problema de designação. Entretanto, essa estratégia não é geralmente usada, porque o
custo computacional de transformação é elevado.

O problema de atribuição assume a seguinte forma:

E na forma matricial, o problema de atribuição assume a seguinte forma:


A Matriz Reduzida.

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:

1) Subtrair de cada elemento da linha, o menor valor encontrado desta linha.


2) Cumprido o passo 1, subtrair de cada elemento da coluna, o menor valor encontrado desta
coluna.

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:

cij = cij – ui + vj = sij >= 0

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 Menor valor da linha


1 3 2 5 4 2
2 0 1 2 3 0
3 4 1 -1 3 -1
4 2 5 3 4 2

1 2 3 4
1 1 0 3 2
2 0 1 2 3
3 5 2 0 4
4 0 3 1 2

0 0 0 2 Menor valor da coluna

Encontramos a matriz reduzida.

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

Assim, uma solução ótima do problema de atribuição/designação assume a seguinte forma:

x12 = x21 = x33 = x44 = 1 Z(x) =2(1) + 0(1) + -1(1) + 4(1)= 5

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.

Considere a seguinte matriz de custos:

1 2 3
1 2 5 7
2 4 2 1
3 2 6 5

E a respectiva matriz reduzida:

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:

a) x11 = 1 x22 = 1 b) x11 = 1 x23 = 1 c) x31 = 1 x22 = 1 d) x31 = 1 x23 = 1

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

k = 2 (número de traços) = número de células independentes.

k = 2 < m = 3, se k = m, a solução ótima foi encontrada.

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

A solução ótima foi encontrada k = m = 3, x12= x23= x31=1, Z(x) = 8.