Soluções Heurísticas Simples e Híbrida para o Problema do Caixeiro Viajante: Um Estudo Comparativo Marco Antonio Barbosa 1, Renata Neuland 2, Rodrigo Antoniazzi 3 1 Departamento de Informática. Universidade Tecnológica Federal do Paraná (UTFPR) Via do Conhecimento, km 1-85.503-390 - Pato Branco, PR Brazil 2 Instituto de Informática Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15.064 91.501-970 Porto Alegre RS Brazil 3 Ciência da Computação. Universidade de Cruz Alta (UNICRUZ) Parada Benito 98.020-290 - Cruz Alta, RS - Brazil mbarbosa@utfpr.edu.br, rcneuland@inf.ufrgs.br, rodrigoantoniazzi@yahoo.com.br Abstract. The Traveling Salesman Problem (TSP) historically has been studied due to its relation to several problems of logistics and routing of great practical interest for different fields. As the TSP belongs to the class of NP- Hard problems, the exact solution obtained by a brute force algorithm, it is obtained only in non polynomial time. In this work two metaheuristics: GRASP and Genetic Algorithms are used to solve the Symmetric Traveling Salesman Problem and both are confronted with a hybrid metaheuristic. Resumo. O Problema do Caixeiro Viajante (PCV) é historicamente estudado por se relacionar a diversos problemas de logística e roteamento, de grande interesse prático para os mais diversos setores. Por pertencer à classe de problemas NP-Difíceis sua solução exata, dada por algoritmos de força bruta, somente é obtida em tempo não polinomial. Neste trabalho duas metaheurísticas simples: GRASP e Algoritmos Genéticos são utilizadas na solução do Problema do Caixeiro Viajante Simétrico e ambas são confrontadas com uma meta-heurística híbrida. 1. Introdução Muitos problemas, com grande interesse prático, podem demandar um tempo de execução muito elevado quando se busca uma solução ótima. Em muitos casos, a melhor solução sequer será encontrada em função do elevado tempo de processamento necessário para encontrá-la. Entretanto, muitos destes problemas são de grande interesse prático e não podem ser desconsiderados pelo fato de não se conseguir encontrar a solução ótima [Cormen 2001]. A dificuldade de se obter uma solução ótima para estes problemas (ou seja, encontrar dentro do conjunto de soluções possíveis aquela solução que é a melhor), se dá em função do seu espaço de soluções possíveis ser exponencial. Tal problema caracteriza-se como um problema de otimização combinatória e, dentre as categorias de problemas conhecidas: decisão, localização e otimização, caracteriza-se como a categoria mais difícil de encontrar uma solução [Garey e Johnson 1979].
O Problema do Caixeiro Viajante (PCV) [Lawer 1995] é um dos mais antigos problemas de otimização inserido na classe dos problemas NP-Difíceis, os quais [Toscani e Veloso 2002] definem como aqueles que demandam um tempo de execução de ordem fatorial para que sejam resolvidos de forma exata por meio de algoritmos determinísticos. Os autores ressaltam que para uma dada entrada de tamanho n suficientemente grande o tempo de execução para a resolução desse problema torna-se proibitivo, não sendo possível encontrar uma solução de forma satisfatória em tempo aceitável. Uma alternativa de se buscar uma solução viável em tempo polinomial para problemas intratáveis são os métodos heurísticos [Glover e Kochenberger 2002]. Estes métodos atualmente são mais comumente denominados meta-heurísticas. Tais métodos caracterizam-se por fornecer uma solução viável em um tempo aceitável, porém, sem dar quaisquer garantias da qualidade da resposta obtida. São exemplos de metaheurísticas GRASP, Simulated Annealing, Busca Tabu, Colônia de Formigas, Algoritmos Genéticos, dentre outras. Em [Glover e Kochenberger 2002], [Blum e Roli 2003], [Goldbarg e Luna 2005] e [Linden 2008] podem-se encontrar mais exemplos de meta-heurísticas. Este artigo reporta uma série de experimentos computacionais realizados como tentativa de solução ao Problema do Caixeiro Viajante Simétrico. Foram utilizadas as meta-heurísticas GRASP e Algoritmos Genéticos (AG). Uma terceira meta-heurística implementada consiste em uma meta-heurística híbrida que constitui-se na união da meta-heurísticas GRASP e AG. Na heurística híbrida o GRASP é utilizado para gerar uma solução viável e o AG é utilizado como uma heurística de refinamento sobre esta solução viável, na tentativa de fazer um melhoramento desta solução. O objetivo destes experimentos é traçar uma relação de custo x benefício, ou seja, analisar se a qualidade dos resultados obtidos pela meta-heurística híbrida justifica a sua implementação ou soluções mais simples, como as meta-heurísticas utilizadas separadamente, são tão eficientes quanto a híbrida não justificando, portanto, apostar em uma solução algorítmica de implementação mais complexa e elaborada. Para a obtenção desses resultados, as meta-heurísticas foram implementadas e testes foram executados a fim de criar um parecer avaliativo sobre o desempenho de cada meta-heurística separadamente e da união de ambas (meta-heurística híbrida) sobre as instâncias escolhidas do PCV. As instâncias utilizadas são encontradas na biblioteca TSPLIB. O artigo está estruturado como segue. Na Seção 2 encontram-se conceitos básicos sobre o PCV e as meta-heurísticas GRASP e AG. A Seção 3 detalha a implementação dos métodos. Na Seção 4 apresentam-se os testes, resultados e as respectivas análises. Por fim, na Seção 5 são apresentadas algumas conclusões e direções futuras de trabalho. 2. Conceitos Básicos 2.1. O Problema do Caixeiro Viajante (PCV) O Problema do Caixeiro Viajante tem uma formulação bastante simples: o caixeiro viajante deve percorrer cada cidade em seu território exatamente uma única vez e
retornar a cidade de origem tendo percorrido todo o espaço de cidades do território cobrindo a menor distância [Michalewicz e Fogel 2004]. O PCV é definido em [Papadimitriou 1994] da seguinte forma: se tem n cidades 1,...,n e uma distância inteira não negativa dist(i,j) entre duas cidades i e j, considerando-se que i e j sejam todas as cidades possíveis de serem ligadas umas com as outras. Se a distância de i a j for igual à distância de j até i, ou seja, dist(i,j) = dist(j,i) o problema caracteriza-se como o Problema do Caixeiro Viajante Simétrico. A Figura 1 ilustra um exemplo do problema para uma instância com 20 cidades. Embora as distâncias não estejam rotuladas na figura assume-se que as distâncias são simétricas. Uma variação a este problema é assumir que as distâncias são assimétricas, isto é dist(i,j) dist(j,i). Estas duas classes de problemas apresentam diferentes obstáculos na busca por caminhos de custo mínimo. O espaço de busca para o PCV pode ser visto como um conjunto de permutações das n cidades. Cada permutação das n cidades caracteriza-se como uma lista ordenada que define a sequência das cidades a serem visitadas. A solução ótima é uma permutação que corresponda a um tour (ou passeio) de caminho mínimo. Cada tour pode ser representado de 2n maneiras diferentes (para um modelo simétrico). Considerando-se que há n! formas de permutar n números, o tamanho do espaço de busca é então S = n!/(2n) = (n 1)!/2. Para se avaliar a taxa de crescimento desta expressão, para um PCV de 10 cidades há 181.000 caminhos possíveis, para um PCV de 20 cidades há aproximadamente cerca de 10.000.000.000.000.000 caminhos possíveis [Michalewicz e Fogel 2004]. 2.2. A Meta-heurística GRASP Figura 1. Instância do PCV para 20 cidades O Procedimento de busca adaptativa gulosa e randômica, mais comumente chamada de meta-heurística GRASP [Feo e Resende 1995], atua como um método guloso aprimorado. O método utiliza a aleatoriedade como tentativa de fuga de soluções ótimas locais. O método armazena a melhor solução encontrada e continua gerando novas soluções até que uma condição de parada seja satisfeita, durante as iterações a melhor
solução geral passa a ser a solução final. O método consiste de duas fases: uma fase de construção e uma fase de busca local. Na fase de construção, a solução é construída elemento a elemento de forma iterativa. A cada iteração, baseando-se no último elemento escolhido, é criada uma lista dos possíveis candidatos a fazer parte dessa solução, essa lista é chamada de lista restrita de candidatos (LRC). Essa lista é composta por uma porcentagem, escolhida pelo desenvolvedor, das melhores opções a serem escolhidas naquele momento, a cada iteração a lista de candidatos deve ser refeita. Os critérios que definem quais candidatos podem fazer parte LRC podem mudar a cada iteração da fase de construção, por isso essa meta-heurística é dita adaptativa. Ao contrário do método guloso tradicional, que escolheria o ótimo local a cada iteração, no GRASP o próximo elemento da solução é escolhido de forma aleatória dentre as opções da LRC. Na fase de busca local, soluções da vizinhança são comparadas com o objetivo de melhorar ao máximo a solução final. O algoritmo abstrato abaixo ilustra de forma sucinta o funcionamento da metaheurística GRASP. Procedimento: GRASP(P,i) Entrada: uma instância do problema e o número de iterações Saída: uma solução (sub-ótima) 01. enquanto (critério de parada não for satisfeito) faça 02. FaseConstrução(solução); 03. BuscaLocal(solução, N(solução)); 04. AtualizaSolução(MelhorSoluçãoEncontrada, solução); 05. fim_enquanto 06. S MelhorSoluçãoEncontrada; 07. retorne(s); 08. fim. Algoritmo 1. Método GRASP 2.3. A Meta-heurística Algoritmos Genéticos Os Algoritmos Genéticos (AG) constituem-se em uma meta-heurística que representa uma metáfora ao processo de evolução natural da biologia. Inicialmente apresentado por [Holland 1975]. Os AG são utilizados atualmente na solução de problemas nas mais diversas áreas, tais como a biologia, engenharias, matemática aplicada, ciência da computação, dentre outras. Nos Algoritmos Genéticos cada indivíduo (cromossomo) está associado a uma solução do problema e cada gene está associado a uma componente da solução. Essa meta-heurística usa um método semelhante à evolução natural das espécies onde os indivíduos mais aptos sobrevivem. A adaptação ocorre por reprodução. Os indivíduos modificam-se e adaptam-se ao meio conforme vão se reproduzindo. Em uma população, alguns organismos possuem características genéticas mais favoráveis à sobrevivência. São indivíduos mais aptos que tendem a ter filhos ainda mais aptos, melhorando, desta forma, a população. Para detalhamento desta meta-heurística, referencia-se [Goldbarg e Luna 2005], [Linden 2008] e [Goldberg 1989].
Nos algoritmos genéticos a população inicial é geralmente escolhida de forma aleatória, também chamada de população no tempo 0 (t 0 ). Essa população passa pelo processo de reprodução gerando assim a população no tempo 1 (t 1 ). Esse procedimento de reprodução é a principal etapa dos AGs. Esta etapa caracteriza-se como um processo iterativo onde os indivíduos mais aptos são selecionados como pais, produzindo uma nova geração de indivíduos (filhos). A nova população será classificada e avaliada. Se os novos indivíduos forem considerados aptos poderão se reproduzir e continuar o ciclo. O algoritmo abstrato a seguir ilustra de forma esquemática o princípio de funcionamento dos Algoritmos Genéticos. Procedimento: Algoritmo Genético 01. t 0; 02. gere a população inicial P(t); 03. avalie P(t); 04. enquanto (os critérios de parada não estiverem satisfeitos) faça 05. t t+1; 06. gere P(t) a partir de P(t-1); 07. avalie P(t); 08. defina a população sobrevivente; 09. fim_enquanto 10. fim. Algoritmo 2. Método Algoritmos Genéticos 3. Implementação das Meta-Heurísticas Para a realização dos experimentos reportados neste artigo foram implementados três algoritmos na linguagem Java. Um algoritmo para a meta-heurística GRASP, um algoritmo para a meta-heurística AG e um algoritmo para a meta-heurística híbrida. Para testar as meta-heurísticas foram utilizadas as instâncias: gr17, gr21, gr24, gr48, gr120, si175, com número de nós (cidades) 17, 21, 24, 48, 120 e 175 respectivamente. Estas instâncias são encontradas na biblioteca TSPLIB 1. 3.1. Algoritmo GRASP A meta-heurística GRASP foi implementada segundo os passos a seguir: Passo 1: Seleciona-se o primeiro candidato a fazer parte da solução; Passo 2: Com base no último candidato agregado à solução uma lista de candidatos é criada, de acordo com o percentual pré-definido na configuração inicial do algoritmo; Passo 3: Um candidato é selecionado da lista de forma aleatória e adicionado à solução; Passo 4: Verifica-se o critério de parada. Caso o critério não seja satisfeito o algoritmo repete os passos a partir do passo 2; Passo 5: Busca-se dentre as soluções encontradas aquela que melhor se apresenta como solução para o problema. Para a criação da lista de candidatos é feita uma busca sobre os caminhos ainda não visitados. Os candidatos são dispostos em ordem crescente em relação à distância 1 disponível em http://comopt.ifi.uni-heidelberg.de/software/tsplib95/
entre eles e o último candidato agregado à solução. De acordo com o percentual definido na configuração inicial, os n primeiros candidatos são dispostos na lista de candidatos. Desta lista, um candidato é escolhido de forma aleatória e adicionado à solução. Para cada candidato adicionado à solução a lista deve ser refeita. A Figura 2 apresenta a interface da solução GRASP implementada neste trabalho. Para a utilização do método o usuário necessita definir alguns parâmetros de configuração. O usuário deve definir a instância a ser avaliada, o nó a ser utilizado como ponto de início da tour ou definir que o ponto de início seja obtido de forma aleatória. O usuário define o número de iterações do método (que servirá como critério de parada do método) e, por fim, o usuário deverá definir o percentual da lista de candidatos que será considerada a cada iteração. Os resultados fornecidos pelo sistema são: a melhor solução encontrada, o peso dessa solução, o caminho percorrido e o tempo de início e término da execução do método. Figura 2. Interface do método GRASP 3.2. Algoritmo Genético A Figura 3 apresenta a interface para o método AG. Para a configuração inicial do método o usuário deve: definir a instância a ser utilizada, os percentuais de mutação, cruzamento e elitismo, bem como o tamanho da população inicial e o número de iterações (usado como critério de parada). Da mesma forma que no método GRASP são apresentados como resultado a melhor solução encontrada, o peso dessa solução, o caminho percorrido e os tempos de início e término de execução do método. Figura 3. Interface do método Algoritmos Genéticos A meta-heurística AG foi implementada de acordo com a sequência de passos listadas a seguir:
Passo 1: Criação de cromossomos feita de forma aleatória (população inicial); Passo 2: Avaliar os cromossomos da população; Passo 3: Executar a função de elitismo; Passo 4: Executar a função de crossover/cruzamento (1 ponto); Passo 5: Executar a função de mutação (2-troca); Passo 6: Unir os cromossomos criados em uma nova população; Passo 7: Avaliar o critério de parada. Caso o critério de parada não seja satisfeito, repetir os passos a partir do passo 2. A função de avaliação dos cromossomos da população caracteriza-se como a soma das distâncias entre os genes que compõe o cromossomo. A função de elitismo funciona como um repositório de bons indivíduos. A cada população criada, um percentual pré-determinado (geralmente 1%) dos indivíduos que a compõe, são escolhidos através de elitismo. O elitismo caracteriza-se por uma lista composta pelos melhores indivíduos gerados por todas as populações, fazendo com que os melhores indivíduos nunca se percam completamente. O uso do elitismo em taxas muito altas pode acarretar uma convergência acelerada sobre uma solução. A função de crossover (ou também denominada de função de cruzamento) é usada nesta implementação com 1 ponto. Isso significa que os cromossomos pais são divididos em um único ponto e os filhos são originados através da união das partes de dois cromossomos diferentes. A escolha dos pais é feita de forma aleatória. Os indivíduos que passam pelo processo de mutação sofrem uma troca entre genes. Dois genes são escolhidos aleatoriamente e trocados de posição, um pelo outro. 3.3. A Meta-heurística Híbrida A meta-heurística híbrida foi construída a partir da união dos algoritmos GRASP e AG. Na abordagem híbrida, o GRASP é utilizado para a obtenção da população inicial e o AG é responsável pelo refinamento (melhoria) das soluções encontradas. O algoritmo híbrido é descrito como: Passo 1: Seleciona-se o primeiro candidato a fazer parte da solução; Passo 2: Com base no último candidato agregado à solução, uma lista de candidatos é criada de acordo com o percentual pré-definido na configuração inicial do método. Neste trabalho optou-se por utilizar 30% como valor padrão; Passo 3: Um candidato é selecionado da lista de forma aleatória e agregado à solução; Passo 4: verifica se a solução está completa, caso não esteja repete-se a partir do passo 2. Passo 5: Verifica-se se já foram criadas soluções suficientes para representar a população inicial. Caso o critério não seja satisfeito o algoritmo repete os passos a partir do passo 1; Passo 7: Avaliar os cromossomos da atual população. A avaliação foi feita de acordo com o valor dos caminhos que cada cromossomo representa; Passo 8: Executar a função de elitismo. Neste momento da execução um percentual, neste caso 1%, da população que obteve uma avaliação melhor no passo anterior, é preservada para a próxima população;
Passo 9: Executar a função de crossover/cruzamento. Nesta implementação o crossover utilizado foi o de 1 ponto. Os dois cromossomos escolhidos como pais são divididos, uma única vez, ao meio para formar dois filhos. Apenas parte da população passa por este passo, sendo que fica a critério do usuário escolher o percentual da população a ser selecionada; Passo 10: Executar a função de mutação. O método de mutação utilizado é conhecido como 2-troca. Neste caso, dois genes do cromossomo são escolhidos e trocam de lugares. Assim como no passo 8 apenas parte da população passa por este processo, sendo que fica a critério do usuário escolher um percentual; Passo 11: Unir os cromossomos criados e/ou transformados no decorrer dos passos anteriormente descritos, em uma nova população; Passo 12: Avaliar o critério de parada. Caso o critério de parada não seja satisfeito, repetir os passos a partir do passo 7. Passo 13: Busca-se dentre as soluções encontradas aquela que melhor se encaixa como solução para o problema. 4. Experimentos e Resultados Os experimentos realizados neste trabalho foram implementados em um computador dual core 2.0 GHz, com 4Gb de memória RAM. Cada parametrização foi testada com 100 execuções de cada algoritmo. O gráfico da Figura 4 representa os melhores resultados obtidos para cada instância testada. 41114 41169 28309 27799 21407 14974 5559 4541 56365046 2565 2085 2707 2707 2085 2146 2085 2707 1290 1289 1272 12347 11552 6942 gr17 gr21 gr24 gr48 gr120 si175 GRASP AG Híbrida melhor Figura 4. Gráfico de resultados
Após observar os resultados dos testes pode-se construir um parecer avaliativo sobre os métodos testados. A Tabela 1 representa esse parecer de forma mais objetiva. Tabela 1. Conclusões sobre os testes GRASP AG Híbrido Complexidade de implementação Pouca Média alta Melhoria de soluções Pouca Alta Alta Tempo de execução Baixo Alto Alto Sobre o quesito complexidade de implementação, o método GRASP foi o que apresentou menor complexidade uma vez que é o método de codificação mais simplificada. O AG tem uma complexidade mais alta na implementação, em razão de ser um método composto por vários passos característicos, que representam metáforas de situações relacionadas à evolução das espécies. Em relação à melhoria de soluções, todos os métodos apresentaram soluções viáveis em tempo aceitável, entretanto o GRASP teve uma melhoria menos significativa em relação aos outros métodos testados. Comparando os métodos em relação a tempo de execução, o GRASP obteve maior sucesso neste quesito. Sendo que apresenta resultados em tempos significativamente melhores que os outros métodos testados. Em suma, a escolha de qual meta-heurística utilizar vai depender quase que exclusivamente do tipo de problema a resolver. Caso para um dado problema o tempo de resposta seja prioridade sem importar quão boa seja a qualidade solução obtida, dos métodos testados, o GRASP é a melhor opção. Caso contrário, se a qualidade da solução é mais importante que o tempo de resposta e complexidade na implementação do método, os métodos AG e híbrido são recomendados. Porém, nota-se que a proximidade das respostas entre os métodos AG e híbrido indicam que não se justifica a hibridização destas duas meta-heurísticas. 5. Conclusão e Trabalhos Futuros Muitos problemas práticos, encontrados no cotidiano possuem solução computacional de tempo exponencial, ou seja, demandam grande tempo de processamento para entrada de dados suficientemente grandes. Tais problemas são conhecidos como problemas de otimização. Um importante problema computacional encontrado nesta categoria é o Problema do Caixeiro Viajante. Este artigo reporta experimentos computacionais aplicados à solução do Problema do Caixeiro Viajante. Foram implementados duas meta-heurísticas simples: GRASP e Algoritmos Genéticos e uma terceira meta-heurística híbrida que caracterizase pela união de ambas. Os experimentos realizados visaram traçar uma relação de custo x benefício entre a complexidade de implementação dos métodos, o tempo de execução dos métodos e a qualidade das soluções obtidas. Uma análise sucinta aponta que se o objetivo é buscar uma solução rápida, independente da qualidade desta solução a meta-heurística é bem indicada. Por outro lado, se o interesse é na qualidade da resposta pode-se observar que a meta-heurística Algoritmos Genéticos é a mais indicada. Como conclusão pode-se observar que a
hibridização destas heurísticas não é indicada por não se obter ganho na qualidade das soluções e por corresponder a maior complexidade de implementação. Como trabalho futuro o objetivo é investigar a qualidade da solução obtida pelo Algoritmo Genético modificado, conforme apresentado em [Kanoh 1996] conhecido como Algoritmos Genéticos com infecção viral. Referências Blum, C. Roli, A. Metaheuristics in Combinatorial Optimazation: Overview and Conceptual Comparison. ACM Computing Surveys, Vol. 35, Set 2003. Cormen, Thomas H. et al. Introduction to Algorithms. McGraw-Hilll. New York, 2001. Feo, T.A.; Resende, M.G.C. Greedy randomized adaptive search procedures. Journal of Global Optmization. 6, 109-133, 1995. Garey, M. R. and Johnson, D. S. Computers and Intractability A Guide to the Theory of NP-Completeness. Series of Books in the Mathematical Sciences, 1979. Glover, F and Kochenberger, G. Handbook of Metaheuristics. International Series in Operations Research & Management Science, vol. 57. Kluwer Academic Publishers, Norwell, MA. 2002. Goldberg, D.E. Genetic Algorithms in Search, Optmization and Machine Learning. Addison-Wesley, Berkeley, 1989. Goldbarg, Marco C; Luna, Henrique P. L. Otimização combinatória e programação linear: modelos e algoritmos. 2ª Ed. Rio de Janeiro: Ed. Campus, 2005. Holland, J.H., Adaptation in Natural and Artificial Systems. Ann. Arbor: University of Michigan Press, 1975. Kanoh, H.; Hasegawa, K.; Kato, N. Solving Constraint Satisfaction Problems by a Genetic Algorithm Adopting Viral Infection. In: INTERNATIONAL JOINT SYMPOSIA ON INTELLIGENCE AND SYSTEMS, 1996. Proceedings. Washington: IEEE Computer Society, 1996, p.67-73. Lawler, E. L. et al. The Traveling Salesman Problem - A Guided Tour of Combinatorial Otmization. [S.l.]: John Wiley and Sons, 1995. Linden, R. Algoritmos Genéticos. 2. ed. Rio de Janeiro: Brasport, 2008. v. 1. 428 p. Michalewicz, Zbigniew; Fogel, David. B. How to Solve It: Modern Heuristics. Second edition. Springer Verlag. Berlin, 2004. Papadimitriou, Christos M. Computational complexity. Estados Unidos da América, Addison-Wesley Publishing Company Inc., 1994. Toscani, L. V; Veloso, Paulo A. S. Complexidade de Algoritmos. Porto Alegre: Instituto de Informática da UFRGS: Editora Sagra Luzzatto, 2002.