Introdução
Alocação de Tarefas
Método Húngaro
Introdução
Alocação de Tarefas
Método Húngaro
Roteiro
Método Húngaro
1. Introdução
Prof. Dr. Leandro Balby Marinho
2. Problema de Alocação de Tarefas
2. Método Húngaro
Análise e Técnicas de Algoritmos
Prof. Dr. Leandro Balby Marinho
Introdução
1 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Introdução
Prof. Dr. Leandro Balby Marinho
Introdução
2 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Roteiro
1. Introdução
I
Adequado a problemas de otimização Combinatória.
I
Resolve o problema da alocação em tempo polinomial (normalmente
O(n3 )).
I
Origem: E. Egerváry e D. König (1931)
I
Criador: H. Kuhn (1955)
2. Problema de Alocação de Tarefas
2. Método Húngaro
Prof. Dr. Leandro Balby Marinho
2 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
3 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Problema de Alocação de Tarefas
Introdução
Alocação de Tarefas
Método Húngaro
Roteiro
I
Alocar n agentes para n tarefas tal que o custo total de alocação
seja o menor possı́vel.
I
Instâncias do problema podem ser especificadas por uma matriz de
custo C ∈ Rn×n :


c1,1 c1,2 · · · c1,n
c2,1 c2,2 · · · c2,n 


C = .
..
.. 
..
 ..
.
. 
.
cn,1 cn,2 · · · cn,n
1. Introdução
2. Problema de Alocação de Tarefas
2. Método Húngaro
onde ci,j representa o custo de alocar o agente i para realizar a
tarefa j.
Prof. Dr. Leandro Balby Marinho
Introdução
3 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Teorema da Alocação Ótima
Prof. Dr. Leandro Balby Marinho
Introdução
4 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 1
Uma solução ótima para a matriz abaixo seria: c1,2 , c2,1 e c3,3

900
C =  350
1250
Teorema 1
Se um número real é somado ou subtraı́do de todas as entradas de uma
linha ou coluna, então uma alocação ótima para a matriz resultante é
também uma alocação ótima para a matriz original.
Ao diminuir as linhas e colunas, estamos comparando-as com
valores relativos.
Subtraindo a menor entrada de cada

150
C = 0
350

750 750
850 550
950 900
linha temos:

0
0
500 200
50
0
Note que a solução ótima continua a mesma e é representada pelas
entradas com custo 0.
Prof. Dr. Leandro Balby Marinho
4 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
5 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Teorema de König
Introdução
Alocação de Tarefas
Método Húngaro
Algoritmo
1. Para cada linha, subtraia o mı́nimo da linha.
Teorema 2
2. Para cada coluna, subtraia o mı́nimo da coluna.
Se o número mı́nimo de traços que atravessam todos os zeros for n,
temos uma alocação possı́vel para cada linha/coluna.

150
0
500
C = 0
350 50
Prof. Dr. Leandro Balby Marinho
Introdução
3. Use o mı́nimo de traços possı́veis para cobrir todos os zeros da
matriz. Não há receita de bolo para isso – basicamente tentativa e
erro. Se você usou k traços:
I

0
200
0
6 / 26
I
UFCG CEEI
Alocação de Tarefas
Método Húngaro
Exemplo 1 cont.
Prof. Dr. Leandro Balby Marinho
Introdução
7 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 1 cont.
Passo 1: Para cada linha, subtraia o

900
C =  350
1250
Passo 2: Para cada coluna, subtraia

150
C = 0
350
mı́nimo da linha.

750 750
850 550
950 900

150
0
500
C = 0
350 50
Prof. Dr. Leandro Balby Marinho
Se j = n, temos uma solução ótima. Escolha um 0 por linha e
coluna.
Se j 6= n, determine a menor entrada que não tenha sido
riscada. Subtraia essa entrada de todas as entradas não
riscadas e a some a todas as entradas com 2 riscos (Volta ao
passo 3).
Como o mı́nimo de cada coluna é 0, a matriz permanece a mesma nesse
passo.

0
200
0
8 / 26
o mı́nimo da coluna.

0
0
500 200
50
0

150
0
500
C = 0
350 50
UFCG CEEI
Prof. Dr. Leandro Balby Marinho

0
200
0
9 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Exemplo 1 cont.
Introdução
Alocação de Tarefas
Método Húngaro
Exemplo 1 cont.
Solução: Escolha um 0 por linha e coluna


150
0
0
500 200
C = 0
350 50
0
Passo 3: Cubra cada 0 com o mı́nimo de traços

150
0
500
C = 0
350 50

0
200
0

900
C =  350
1250
Como n = 3 traços, temos uma solução ótima.

150
0
500
C = 0
350 50

0
200
0

750 750
850 550
950 900
Total = 750 + 350 + 900 = 2000
Prof. Dr. Leandro Balby Marinho
10 / 26
Introdução
UFCG CEEI
Alocação de Tarefas
Método Húngaro
Exemplo 2
Prof. Dr. Leandro Balby Marinho
Introdução
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 2 cont.
Passo 1: Para cada linha, subtraia o

4
C = 2
3
Considere a matriz abaixo:
Jogador 1
Jogador 2
Jogador 3
Pos 1
4
2
3
Pos 2
2
2
1
Pos 3
4
3
5

2
C = 0
2
Se você fosse um técnico de um time com salários atrasados e quisesse
sabotar o time. Como escalar um time para que ele tenha a maior chance
de perder?
Prof. Dr. Leandro Balby Marinho
11 / 26
12 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
mı́nimo da linha.

2 4
2 3
1 5
0
0
0

2
1
4
13 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Exemplo 2 cont.
Alocação de Tarefas
Método Húngaro
Exemplo 2 cont.
Passo 2: Para cada coluna, subtraia

2
C = 0
2

2
C = 0
2
Passo 3: Cubra cada 0 com o mı́nimo de traços.
o mı́nimo da coluna.

0 2
0 1
0 4
0
0
0
Prof. Dr. Leandro Balby Marinho
Introdução
Introdução

2
C = 0
2
Alocação de Tarefas

2
1
4
Como n = 2 traços, subtraia a menor entrada não riscada de todas as
outras.


1 0 0
C = 0 1 0
1 0 2

1
0
3
14 / 26
0
0
0
UFCG CEEI
Método Húngaro
Exemplo 2 cont.
Prof. Dr. Leandro Balby Marinho
Introdução
15 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 2 cont.
Solução: Escolha um 0 por linha e coluna.
Repete Passo 3: Cubra cada 0 com o mı́nimo de traços.

1
C = 0
1

1
C = 0
1
0
1
0

0
0
2
0
1
0

0
0
2

1
C = 0
1
0
1
0

0
0
2

4
C = 2
3
2
2
1

4
3
5
Total = 4 + 2 + 1 = 7
Prof. Dr. Leandro Balby Marinho
16 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
17 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Problemas de Maximização
Introdução
Alocação de Tarefas
Método Húngaro
Exemplo 3
Considere a matriz abaixo:
I
I
Da forma como foi apresentado, o método húngaro resolve
apenas problemas de minimização.
Jogador 1
Jogador 2
Jogador 3
Como resolver problemas de maximização sem alterar o
algoritmo?
Introdução
18 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 3 cont.
Pos 3
4
3
5
Prof. Dr. Leandro Balby Marinho
Introdução
19 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Exemplo 3 cont.
Passo 0: Multiplica a matriz por −1.

4
C = 2
3
2
2
1

−4 −2
C = −2 −2
−3 −1
Prof. Dr. Leandro Balby Marinho
Pos 2
2
2
1
Se você fosse um técnico de um time e soubesse a qualidade de cada
jogador em cada posição. Como escalar um time para que ele seja o mais
forte possı́vel?
Multiplicar por −1 a matriz de custo.
Prof. Dr. Leandro Balby Marinho
Pos 1
4
2
3
Passo 1: Para cada linha, subtraia o

−4
C = −2
−3

4
3
5

0
C = 1
2

−4
−4
−5
20 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
mı́nimo da linha.

−2 −4
−2 −4
−1 −5
2
1
4

0
0
0
21 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Exemplo 3 cont.
Alocação de Tarefas
Método Húngaro
Exemplo 3 cont.
Passo 2: Para cada coluna, subtraia

0
C = 1
2

0
C = 1
2
Passo 3: Cubra cada 0 com o mı́nimo de traços.
o mı́nimo da coluna.

2 0
1 0
4 0
1
0
3
Prof. Dr. Leandro Balby Marinho
Introdução
Introdução

0
C = 1
2
Alocação de Tarefas

0
0
0
Como n = 3 traços, temos uma solução ótima.


0 1 0
C = 1 0 0
2 3 0

0
0
0
22 / 26
1
0
3
UFCG CEEI
Método Húngaro
Exemplo 3 cont.
Prof. Dr. Leandro Balby Marinho
Introdução
23 / 26
Alocação de Tarefas
UFCG CEEI
Método Húngaro
Matriz Não-Quadrada
Solução: Escolha um 0 por linha e coluna.


0 1 0
C = 1 0 0
2 3 0

4
C = 2
3
2
2
1

4
3
5
I
Quando houver mais agentes (ou vice-versa) que tarefas ainda
podemos aplicar o método húngaro.
I
Nesse caso, adicione tarefas (ou agentes) fictÃcias de custo 0
de modo que a matriz de custo seja quadrada.
Total = 4 + 2 + 5 = 11
Prof. Dr. Leandro Balby Marinho
24 / 26
UFCG CEEI
Prof. Dr. Leandro Balby Marinho
25 / 26
UFCG CEEI
Introdução
Alocação de Tarefas
Método Húngaro
Referências
Slides Prof. Tiago Massoni e Prof. Rohit Gheyi.
Prof. Dr. Leandro Balby Marinho
26 / 26
UFCG CEEI
Download

Método Húngaro