IMPLEMENTAÇÃO COMPUTACIONAL DO MÉTODO HÚNGARO PARA RESOLUÇÃO DE PROBLEMAS DE ATRIBUIÇÃO
VICENTE, S. A. S.
Universidade Presbiteriana Mackenzie
Rua da Consolação, 930 prédio 6 Escola de Engenharia tel. +55-11-2114-8269
Consolação 01302-907 - São Paulo- Brasil
JOSEPH, M. A..
Universidade Presbiteriana Mackenzie Rua Joaquim de Almeida, 371
tel. +55-11-2275-3935
Mirandópolis - 04050-011 - São Paulo- Brasil
TSAN HU, O. R.
Universidade Presbiteriana Mackenzie
Rua da Consolação, 930 prédio 4 Escola de Engenharia tel. +55-11-2114-8269
Consolação 01302-907 - São Paulo- Brasil
[email protected] RESUMO
Os Problemas de Atribuição são uma variação dos Problemas de Transporte, que é um problema de grande representatividade dentro dos problemas de otimização combinatória. Modelos matemáticos foram estudados para resolução deste tipo de problema com a função de encontrar a melhor solução possível, de forma a otimizá-lo. O objetivo deste trabalho é estudar o Problema de Atribuição, o qual consiste em otimizar um sistema, com a tarefa de minimizar os custos, considerando a atribuição de n tarefas a m agentes, de forma que a atribuição de cada tarefa a um agente possui um custo especifico. Para encontrar uma solução ótima para este problema será estudado o método húngaro.
Palavras-chave: Problemas de Atribuição.
Modelos Matemáticos. Minimizar Custos.
1 INTRODUÇÃO
Otimização consiste em maximizar ou minimizar a função de problemas, buscando a melhor solução dentre as possíveis.
Hoje existe uma preocupação muito grande em fábricas e em empresas para obter a melhor maneira de gerenciar e coordenar as atividades nos locais. É necessário analisar detalhadamente cada
setor, cargos e funcionários e introduzir técnicas, como Kaisen, Kanban, Sistema Lean e 6 ó, a fim
de otimizar e resolver da melhor forma
determinados problemas em uma empresa,
possibilitando manter o ambiente em equilíbrio e atingir os objetivos propostos. Porém, essas técnicas não são suficientes para resolver problemas mais específicos como os problemas de otimização.
Um exemplo desse tipo de problema e que é o foco desse trabalho é o Problema de Atribuição, o qual tem como objetivo otimizar a atribuição de tarefas em máquinas. Este problema é muito importante, pois pode ser utilizado como aplicação de muitos outros problemas de otimização, como o problema quadrático de atribuição, explicado mais à frente, além de ter grande importância prática, como por exemplo, distribuição de pacientes em viagens de assistência médica.(1999 apud SENNE, LORENA e SALOMÃO, 2007). A maioria desses problemas de otimização são intratáveis por natureza ou são grandes o suficiente para tornar inviável o uso de algoritmos exatos. Nesses casos métodos heurísticos têm sido utilizados para procurar a melhor solução e em um tempo computacional razoável. Alguns dos principais métodos heurísticos são: Algoritmo
Genético, Busca Tabu e GRASP. O objetivo deste trabalho, como foi dito anteriormente, é estudar o Problema de Atribuição e resolvê-lo a partir do método húngaro. Este é um método simples de resolução, mas que encontra a solução ótima.
3 PROBLEMA DE TRANSPORTE
O Problema de Transporte consiste na
distribuição, de variados produtos, do seu ponto de origem, ou seja, o seu ponto de produção, ao seu destino, os mercados consumidores, de maneira que o custo final do transporte seja mínimo. Considera-se que m é o número de origens e n o de destinos, que para transportar um item da origem i para o destino j existe um custo cije que xij é a quantidade do produto a ser deslocado da origem i para o destino j. Deve-se levar em conta também a demanda do produto no destino j, que é representada por bj, e ai, que é a oferta do produto na origem i. (ARENALES et al., 2007).
A Ilustração 1 representa o modelo de um problema de transporte.
Ilustração 1. Rede de transporte.
Fonte: adaptado de Arenales et al (2007, p.21). 3.1 MÉTODO HÚNGARO
O Método Húngaro é um método de otimização usado para a resolução de diversos problemas práticos de alocação de tarefas. Para que se possa utilizar este método é necessário que se construa uma matriz, a qual deve conter os custos resultantes da designação de uma tarefa a um agente. O método é usado para minimizar ou maximizar o valor final do problema, este pode ser para determinar a menor distância percorrida numa viagem, ou o menor investimento num projeto, ou como um exemplo de problema de maximização, a melhor maneira de distribuição de funcionários em cargos a partir de seus rendimentos.
Essa matriz, definida como matriz-custo deve ser quadrada, ou seja, n x n, como mostra a Ilustração
2, sendo Cij o custo de atribuir a tarefa i para o agente j. c11c12 ... c1i ... c1n c21c22 ... c2i ... c2n C = ... cj1 cj2 ... cji ... cjn ... cn1cn2... cni ... cnn n x n Ilustração 2. Matriz-custo n x n.
Fonte: Rodrigues, Vieira e Agustini (2005).
O custo total de todas as tarefas atribuídas às instalações será o custo da alocação. O objetivo é encontrar o melhor resultado, máximo ou mínimo, chamado de alocação ótima de tarefas.
Abaixo segue as etapas para a aplicação do algoritmo. (ROGRIGUES, VIEIRA e AGUSTINI, 2005).
Etapa 0: Construir a matriz com os custos relacionados a atribuição de cada uma das n tarefas a cada uma das m máquinas. Caso n seja diferente de m, deve-se criar uma linha ou coluna fantasma de forma que o número de colunas seja igual o número de linhas.
Etapa 1: Buscar o valor mínimo de cada linha e subtraí-lo de todos os valores da mesma linha; Etapa 2: Encontrar o valor mínimo de cada coluna e subtraí-lo de todos os valores da mesma coluna; Etapa 3: Riscar com o menor número possível de traços os valores 0 das linhas e colunas da matriz. A quantidade de traços utilizados será menor ou igual a n.
Etapa 4: Se a quantidade mínima de traços para cobrir os zeros for igual a n, a solução ótima foi encontrada, caso contrário, seguir para a etapa 5. Etapa 5: Identificar o menor número que não tenha sido riscado, subtraí-lo de todos os demais que não tenham sido riscados e somá-lo com os que foram
riscados tanto verticalmente quanto
horizontalmente. Retornar à etapa 3.
Para utilização do Método Húngaro é fundamental que três restrições sejam garantidas, a primeira é que a matriz-custo deve ser quadrada. Para problemas que não respeitem está restrição deve-se criar um agente ou uma tarefa fictícia que não influencie na solução final. Outra restrição é que o problema deve ser de minimização, caso não seja, para fazer a transformação de maximização para minimização é preciso multiplicar as entradas da
matriz por (-1). A terceira restrição é no caso de utilização de softwares, que os números sejam inteiros, para que arredondamentos não interfiram no resultado. Em casos que essa restrição não seja satisfeita, deve-se multiplicar os valores da matriz por uma potência de 10. (ROGRIGUES, VIEIRA e AGUSTINI, 2005).
4 DESENVOLVIMENTO DO ALGORITMO
Para o desenvolvimento do algoritmo foi criado um problema fictício. O problema consiste em um investidor que possui quatro imóveis para alugar. Ele recebeu propostas de cinco locatários. O investidor deve designar os quatro imóveis de forma a maximizar o total a ser recebido. A Tabela 1 representa os valores que os locatários propuseram.
Tabela 1. Valores (R$) propostos para o aluguel.
1 2 3 4 1 2250 975 3150 2025 2 2625 1125 3450 2325 3 2025 1275 3000 2100 4 2100 1050 2850 1950 5 2550 750 3000 2400 L o c a tá r io Casa
Fonte: Autoria própria.
Primeiramente, como o problema é de
maximização deve-se multiplicar os valores por -1
para que se transforme em problema de
minimização. Uma outra restrição que não é atendida é a matriz não ser quadrada, devendo, portanto, criar uma casa fantasma com valores zeros designados a ela de forma a não interferir no resultado (Etapa 0). A Tabela 2 representa essas duas mudanças na matriz.
Tabela 2. Matriz para que seja aplicado o Método Húngaro. 1 2 3 4 5 1 -2250 -975 -3150 -2025 0 2 -2625 -1125 -3450 -2325 0 3 -2025 -1275 -3000 -2100 0 4 -2100 -1050 -2850 -1950 0 5 -2550 -750 -3000 -2400 0 L o c a tá r io Casa
Fonte: Autoria própria. Aplicando o Método Húngaro no problema:
Etapa 1:
a) A Tabela 3 representa o menor valor de cada linha.
Tabela3. Menores custos em cada linha (Case 2).
1 2 3 4 5 1 -2250 -975 -3150 -2025 0 2 -2625 -1125 -3450 -2325 0 3 -2025 -1275 -3000 -2100 0 4 -2100 -1050 -2850 -1950 0 5 -2550 -750 -3000 -2400 0 L o c a tá r io Casa
Fonte: Autoria própria.
b) A Tabela 4 representa a subtração dos menores valores de cada linha dos valores de cada uma das respectivas linhas.
Tabela 4. Valores resultantes da subtração dos menores custos de cada linha dos custos da respectiva linha (Case 2).
1 2 3 4 5 1 900 2175 0 1125 3150 2 825 2325 0 1125 3450 3 975 1725 0 900 3000 4 750 1800 0 900 2850 5 450 2250 0 600 3000 Casa L o c a tá r io
Fonte: Autoria própria.
Etapa 2:
a) A Tabela 5 representa o menor valor de cada coluna.
Tabela 5. Menores custos em cada coluna (Case 2). 1 2 3 4 5 1 900 2175 0 1125 3150 2 825 2325 0 1125 3450 3 975 1725 0 900 3000 4 750 1800 0 900 2850 5 450 2250 0 600 3000 L o c a tá ri o Casa F onte: Autoria própria.
b) A Tabela 6 representa a subtração dos menores valores de cada coluna dos valores de cada uma das respectivas colunas.
Tabela 6. Valores resultantes da subtração dos menores custos de cada coluna dos custos da respectiva coluna (Case 2).
1 2 3 4 5 1 450 450 0 525 300 2 375 600 0 525 600 3 525 0 0 300 150 4 300 75 0 300 0 5 0 525 0 0 150 L o c a tá r io Casa F onte: Autoria própria.
Etapa 3: A Tabela 7 representa o número mínimo
de linhas que cortam os zeros.
Tabela 7. Número mínimo de linhas para cortar os zeros (Case 2).
1 2 3 4 5 1 450 450 0 525 300 2 375 600 0 525 600 3 525 0 0 300 150 4 300 75 0 300 0 5 0 525 0 0 150 Casa L o c a tá r io
Fonte: Autoria própria.
Etapa 4: Como o menor número de linhas
encontrado para cortar os zeros é 4, que é menor que 5 ( valor de n), deve-se seguir para a etapa 5.
Etapa 5: O menor número não riscado é 300. A
Tabela 8 mostra a matriz resultante a partir da soma de 300 aos números cortados tanto verticalmente quanto horizontalmente e a subtração de 300 dos números não cortados pelas linhas.
Tabela 8 Resultado obtido pela subtração e soma do valor 300 (Case 2). 1 2 3 4 5 1 150 150 0 225 0 2 75 300 0 225 300 3 525 0 300 300 150 4 300 75 300 300 0 5 0 525 300 0 150 Casa L o c a tá r io
Fonte: Autoria própria.
Etapa 3: A Tabela 9 representa o número mínimo
de linhas que cortam os zeros.
Tabela 9. Número mínimo de linhas para cortar os zeros (Case 2). 1 2 3 4 5 1 150 150 0 225 0 2 75 300 0 225 300 3 525 0 300 300 150 4 300 75 300 300 0 5 0 525 300 0 150 Casa L o c a tá r io
Fonte: Autoria própria.
Etapa 4: Como o menor número de linhas
encontrado para cortar os zeros é 4, ainda menor que cinco deve-se seguir novamente para o passo 5.
Etapa 5: O menor número não riscado é 75. A
Tabela 10 mostra a matriz resultante a partir da soma de 75 aos números cortados tanto verticalmente quanto horizontalmente e a subtração de 75 dos números não cortados pelas linhas.
Tabela 10. Resultado obtido pela subtração e soma do valor 75 (Case 2). 1 2 3 4 5 1 75 75 0 150 0 2 0 225 0 150 300 3 525 0 375 300 225 4 225 0 300 225 0 5 0 525 375 0 225 Casa L o c a tá r io
Fonte: Autoria própria.
Etapa 3: A Tabela 11 representa o número
mínimo de linhas que cortam os zeros.
Tabela 11. Número mínimo de linhas para cortar os zeros do segundo ciclo das etapas (Case 2).
1 2 3 4 5 1 75 75 0 150 0 2 0 225 0 150 300 3 525 0 375 300 225 4 225 0 300 225 0 5 0 525 375 0 225 L o c a tá r io Casa
Fonte: Autoria própria.
Etapa 4: Como o menor número de linhas
encontrado para cortar os zeros é 5, a solução ótima foi encontrada. A Tabela 12 mostra a solução.
Tabela 12. Solução do problema (Case 2).
1 2 3 4 5 1 75 75 0 150 0 2 0 225 0 150 300 3 525 0 375 300 225 4 225 0 300 225 0 5 0 525 375 0 225 Casa L o c a tá r io
Fonte: Autoria própria.
Os zeros resultantes representam a melhor solução para o investidor. Interpretando a Tabela 12, tem-se que a casa 4 deve tem-ser designada para o locatário 5, a casa 1 poderia ser designada para o locatário 2 ou 5, como o 5 deve alugar a 4, a casa 1 deve ser atribuída ao locatário 2. Este poderia alugar a casa 1 e 3, como deve ser a 1, a casa 3 deve ser alugada pelo locatário 1. A casa 2 deve ser alugada pelo locatário 3 e ao locatário 4 não será alugada nenhuma casa, uma vez que a casa cinco é fantasma. Esses resultados aparecem na Tabela 21 em vermelho. O resultado final é um recebimento de aluguel máximo de R$ 9450,00. A Ilustração 4 mostra o resultado obtido.
Casa Locatário 1 2 2 3 3 1 4 5 custo total = 9450
Quadro 1. Solução Ótima (Case 2). Fonte: Autoria própria.
5.IMPLEMENTAÇÃO COMPUTACIONAL
O algoritmo utilizado para a implementação foi uma variação do método húngaro, desenvolvido por James Munkres na década de 1950. O método húngaro foi desenvolvido em uma época em que existiam poucos computadores disponíveis, e o algoritmo era calculado manualmente (PILGRIM, 2009).
O protótipo foi desenvolvido em MS Excel, rodando Visual Basic. Esta planilha foi escolhida devido à facilidade de uso e por ser um aplicativo amplamente utilizado.
O tamanho da matriz de custo foi limitado a 200 linhas por 200 colunas, no entanto este tamanho pode ser ampliado facilmente.
O algoritmo apresentado por Pilgrim (2009) foi traduzido para Visual Basic e sofreu algumas alterações para melhor adequação e implantação de algumas melhorias. As Etapas 0 e 1 são calculadas na própria planilha MS Excel e as demais são calculadas em Visual Basic, rodando no MS Excel, sendo que a resposta é apresentada na própria planilha de entrada de dados.
Um incremento ao algoritmo é a possibilidade do usuário poder escolher se quer encontrar a maximização ou a minimização dos resultados da matriz de custo. No caso de se desejar calcular a maximização, todos os elementos da matriz de custo são convertidos para o seu negativo antes de se executar a Etapa 1 do algoritmo.
Outro incremento foi ajustar automaticamente o tamanho da matriz, no caso da quantidade de linhas serem diferentes da quantidade de colunas. Neste caso são acrescentadas linhas ou colunas com valores zero para formar uma matriz quadrada.
Na tela de entrada estão as seguintes informações, as quais são mostradas na Ilustração 3.
! Nome dos parâmetros de custo
! Tamanho da matriz em linhas e em
colunas
! Opção de maximizar ou de minimizar
! A matriz de custo ! O botão de inicio
Ilustração 3. Entrada de dados na planilha. Fonte: Cópia da tela do autor.
Após os parâmetros serem definidos, o botão start deve ser apertado de forma a rodar o programa. A solução final do problema é mostrada na matriz com números em vermelho e é dado o valo final do problema no campo valor total, como é mostrado na Ilustração 6 que segue.
Foi utilizado mais um problema fictício para validar a implementação, o qual consiste em maximizar o rendimento de trabalhadores numa fábrica.
Ilustração 4. Matriz Solução. Fonte: Cópia da tela do autor.
6 CONCLUSÃO
Cada vez mais a otimização nos processos faz parte do dia a dia das pessoas e os estudos em métodos de solução de problemas aumentam, devido sua importância.
A determinação das melhores alocações em diversos problemas como, atribuição de tarefas em máquinas em fábricas e determinação de funcionários em postos de trabalho, é de grande significância no planejamento estratégico de empresas em geral. Decidir em que máquina será alocada cada tarefa, buscando sempre o menor
custo, ou o maior rendimento de sua equipe de trabalho, ou qual a melhor forma de aumentar seu ganho nas suas locações ou vendas, é de extrema importância estratégica.
A implementação computacional foi um ganho enorme para o trabalho uma vez que tornou possível resolver problemas com um número de variáveis pequeno num tempo praticamente inexistente. Para problemas maiores, que o processo manual seria praticamente impossível, consegue-se soluções num tempo muito reduzido. Dessa forma, o programa pode ser utilizado para resolver diversos problemas de designação, de diferentes tamanhos, conseguindo chegar na resposta ótima.
8. REFERÊNCIAS BIBLIOGRÁFICAS
ARENALES, M. et al. Pesquisa Operacional para cursos de engenharia. Rio de Janeiro: Elsevier, 2007.
LORENA, L. A. N. Heurísticas Modernas para Problemas de Otimização Combinatória.
Disponível em: <
http://www.lac.inpe.br/~lorena/modHeur.pdf >.
Acesso em: 05 out. 2008. MOURA, A.;
SCARAFICCI, R.; SILVEIRA, R.; SANTOS, V. Técnicas metaheurísticas aplicadas à construção de grades horárias escolares. In: Simpósio Brasileiro de Pesquisa Operacional (SBPO), 36., 2004, São João del Rei. Anais... São João del Rei: ABREPO, 2008. p. 1319-1330.
NARCISO, M. G.; LORENA, L. A. N. Algoritmo genético construtivo aplicado ao problema generalizado de atribuição. In: Simpósio Brasileiro de Pesquisa Operacional (SBPO), 31., 1999, Juiz de Fora. Anais... Juiz de Fora: ABREPO, 1999. p. 244-256.
PILGRIM, R. A. Munkres' Assignment Algorithm Modified for Rectangular Matrices. Disponivel em:
<http://216.249.163.93/bob.pilgrim/445/munkres. html>. Acesso em: 03/03/2009.
RODRIGUES, L. B.; VIEIRA, F. B. P.;
AGUSTINI, E. O método húngaro de otimização para o problema da alocação de tarefas. Universidade Federal de Uberlândia, FAMAT em revista, número 4, abril de 2005. Disponível em: <http://www.famat.ufu.br/revista/revistaabril2005/ artigos/ArtigoLaisFlavianoEdson.pdf>. Acesso em: 20 set. 2008.