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 atr ibuiçã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 c para realizar a tarefa j . Assim, ij ij associado com o agente i pretendemos encontrar o acoplamento ótimo, um a um, entre as tarefas e os agentes. Devem-se observar dois fatores importantes: im portantes: 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 c ij apenas substituindo os custos por c ij = c ij ui + v j em que ui é o valor mínimo de cada linha e v j é 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 v que fornecem uma situação factível do problema. Deve-se observar também j que esses valores são iguais aos valores das variáveis de folga: c = c + v = sij >= 0 ij ij ui j –
Portanto os elementos da matriz de custo reduzida são elementos dos sij >= 0 . Agora vamos supor que podemos encontrar valores de x factíveis para o problema e que a parcela dos x com valor igual ij ij 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 x ij com valor 1 em cada linha e em cada coluna, e o número total de variáveis com valor x = 1 deve ser exatamente ij 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 v j 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 2 3 4
1
2
3
4
3 0 4 2
2 1 1 5
5 2 -1 3
4 3 3 4
1
2
3
4
1 0 5 0
0 1 2 3
3 2 0 1
2 3 4 2
0
0
0
2
Menor valor da linha 2 0 -1 2
Menor valor da coluna
Encontramos a matriz reduzida. 1
2
3
4
1
1
0
0
2
0
3
5
4
0
1 2 3
3 2
0
1 2
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
2
1
3
0 0
0 0 0
0 0
1
0 0 0
0
1
4
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
3
2 4 2
5 2 6
7 1 5
E a respectiva matriz reduzida:
1 2 3
1
2
3
0 3 0
2 0 3
5 0 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 x com valores iguais a 1. Assim temos as seguintes possibilidades: ij a) x11 = 1 x = 1 c) x 22 = 1 d) x x 22 = 1 b) 11 = 1 x 23 x 31 = 1 x 31 = 1 23 = 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
2
3
0 3 0
2 0 3
5 0 3
A estratégia é subtrair c o para cada elemento não coberto e adicionar c o para cada elemento coberto duas vezes (por dois traços). c o = 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 c o das células não cobertas (x 12, x13, x32 e x33) e adicionar c o a célula coberta duas vezes (x21). Uma nova matriz reduzida é encontrada. 1
2
3
0 5
0
3
2
0
3
0
0 1
1
1
A solução ótima foi encontrada k = m = 3, 12= x23=xx31=1, Z(x) = 8.