• Nenhum resultado encontrado

RESOLUC ¸ ˜ OES DO PROBLEMA DO CAIXEIRO VIAJANTE APLICANDO ALGORITMOS DE APROXIMAC ¸ ˜ AO, RANDOMIZAC ¸ ˜ AO E HEUR´ ISTICAS DA INTELIGˆ ENCIA

N/A
N/A
Protected

Academic year: 2022

Share "RESOLUC ¸ ˜ OES DO PROBLEMA DO CAIXEIRO VIAJANTE APLICANDO ALGORITMOS DE APROXIMAC ¸ ˜ AO, RANDOMIZAC ¸ ˜ AO E HEUR´ ISTICAS DA INTELIGˆ ENCIA"

Copied!
133
0
0

Texto

(1)

UNIVERSIDADE PRESBITERIANA MACKENZIE PROGRAMA DE P ´ OS-GRADUAC ¸ ˜ AO EM

ENGENHARIA EL´ ETRICA

Fabio Razzo Galuppo

fabiogaluppo@acm.org

http://member.acm.org/∼fabiogaluppo

RESOLUC ¸ ˜ OES DO PROBLEMA DO CAIXEIRO VIAJANTE APLICANDO ALGORITMOS DE APROXIMAC ¸ ˜ AO, RANDOMIZAC ¸ ˜ AO E HEUR´ ISTICAS DA INTELIGˆ ENCIA

ARTIFICIAL COM COMPUTAC ˜ AO PARALELA

Disserta¸c˜ao apresentada ao Programa de P´os-Gradua¸c˜ao em Engenharia El´etrica da Universidade Presbiteriana Mackenzie, para a obten¸c˜ao do t´ıtulo de Mestre em Engenharia El´etrica.

Orientador: Prof. Dr. Nizam Omar

S˜ao Paulo 2013

(2)

AGRADECIMENTOS

Desejo agradecer minha fam´ılia pelo apoio dado at´e o momento: Anna Maria Razzo Galuppo (m˜ae), Fernando Razzo Galuppo (irm˜ao) e Janete Teodoro Leite (esposa). Em especial, a Francisco Galuppo (pai, in memoriam), por ter me incentivado e inspirado no belo caminho da Computa¸c˜ao e da Matem´atica.

A Universidade Presbiteriana Mackenzie, por ter concedido uma bolsa CAPES-PROSUP, o que permitiu a conclus˜ao do curso, a pesquisa e a elabora¸c˜ao dessa disserta¸c˜ao.

Aos professores do Programa de P´os-Gradua¸c˜ao Stricto Sensu da Engenharia El´etrica.

Em especial, ao meu orientador Prof. Dr. Nizam Omar, pelo excelente direcionamento, orienta¸c˜ao e intera¸c˜ao no programa.

Aos meus amigos, Luis F´abio Mandina Pereira - simplesmente por ser um segundo irm˜ao e amigo de longa data, e Rog´erio Wagner - por ser outro grande amigo e ter me incentivado a procurar um programa de Mestrado em Ciˆencia da Computa¸c˜ao. Gostaria de estender estes agradecimentos aos meus amigos e colegas do Mestrado da UPM, dos grupos de usu´arios (em especial, do C/C++ Brasil) e da BM&F Bovespa, seria uma lista extensa se eu colocasse o nome de todos eles, por´em o mais importante ´e que eles sabe quem s˜ao.

A todos os Cientistas da Computa¸c˜ao e Engenheiros de Software que se dedicam e contribuem com a expans˜ao dessas ´areas. Aos grandes personagens da Computa¸c˜ao e da Matem´atica. Em especial, aBjarne Stroustrup, pela linguagem de programa¸c˜ao C++. A Alexander Stepanov, pela Standard Template Library (STL) do C++. ADon Syme, pela linguagem de programa¸c˜ao F#. AMartin Odersky, pela linguagem de programa¸c˜ao Scala.

ADonald Knuth, pela obra The Art of Computer Programming. ARobert Sedgewick por disseminar a disciplina de Algoritmos de uma maneira acess´ıvel. AJohn McCarthy,Alan Turing e Alonzo Church pelas contribui¸c˜oes e obras ligadas a Inteligˆencia Artificial e a Programa¸c˜ao Funcional.

Ao Coursera, Udacity, Museu da Matem´atica e toda institui¸c˜ao e profissionais que trabalham em prol da dissemina¸c˜ao do ensino, principalmente da Computa¸c˜ao e da Ma- tem´atica.

(3)
(4)

“The more you know, the more you learn; the more you learn, the more you can do; the more you can do, the more the opportunity...”

Dr. Richard W. Hamming

(5)

RESUMO

Esta obra tem como essˆencia a aplica¸c˜ao das t´ecnicas denominadas coletivamente de me- taheur´ıstica paralela no contexto do Problema do Caixeiro Viajante (PCV), um dos pro- blemas de otimiza¸c˜ao combinat´oria mais importantes. A abordagem desta obra cont´em uma proposta composicional que permite a cria¸c˜ao depipelines para endere¸car o problema.

Estas t´ecnicas extra´ıdas da Computa¸c˜ao Paralela associadas aos algoritmos de busca da Inteligˆencia Artificial possibilitam grandes oportunidades para a explora¸c˜ao do espa¸co de estados do problema em quest˜ao. Usando as combina¸c˜oes propostas, boas solu¸c˜oes ou, at´e mesmo ´otimas solu¸c˜oes, emergir˜ao dentro de um tempo de processamento sa- tisfat´orio, possibilitando suas aplica¸c˜oes na resolu¸c˜ao de problemas reais semelhantes. ´E fundamental revisitar as solu¸c˜oes existentes e fornecer para a ind´ustria as melhores op¸c˜oes para resolu¸c˜ao do PCV utilizando as capacidades computacionais contemporˆaneas e as variedades de equipamentos dispon´ıveis. Nesta obra, est˜ao inclu´ıdos a implementa¸c˜ao, a an´alise e a medi¸c˜ao de algoritmos aplicados ao contexto referenciado.

Palavras-chave: computa¸c˜ao paralela, computa¸c˜ao concorrente, algoritmos, desempenho e otimiza¸c˜ao de algoritmos, metaheur´ıstica, metaheur´ıstica paralela, inteligˆencia artificial, problema do caixeiro viajante e otimiza¸c˜ao combinat´oria.

(6)

ABSTRACT

This work has as its essence the application of techniques collectively called parallel me- taheuristic in the context of a Travelling Salesman Problem (TSP), one of the most important problems in combinatorial optimization. The approach of this work contains a compositional proposal that allows the creation of pipelines to address the problem.

These techniques extracted from the Parallel Computing associated with the search algo- rithms of Artificial Intelligence allow great opportunities for exploring the state space of the problem in question. Using the proposed combinations, good solutions or even opti- mal solutions will emerge within a satisfactory processing time, allowing its application in real-world problems. It is essential to revisit the existing solutions and provide the best alternatives for the industry to solve the TSP using contemporary computing capabilities and varieties of available equipments. In this work, are included the implementation, analysis and measurement algorithms applied to the referenced context.

Palavras-chave: parallel computing, concurrent computing, algorithms, performance and algorithms optimization, metaheuristic, parallel metaheuristic, artificial intelligence, travelling salesman problem, and combinatory optimization.

(7)

Sum´ ario

1 INTRODUC¸ ˜AO 1

1.1 O Problema do Caixeiro Viajante . . . 1

1.2 Motiva¸c˜ao para a Pesquisa . . . 2

1.3 Estado da Arte na Solu¸c˜ao do Problema . . . 2

1.4 Proposta de Pesquisa . . . 3

1.5 Objetivos da Pesquisa . . . 3

1.6 Metodologia . . . 4

1.7 Pr´oximos Cap´ıtulos . . . 6

2 O PROBLEMA DO CAIXEIRO VIAJANTE 7 3 RESOLUC¸ ˜AO DE SISTEMAS COMPLEXOS 16 3.1 Resolu¸c˜ao Metaheur´ıstica por Simulated Annealing (SA) . . . 19

3.2 Resolu¸c˜ao Metaheur´ıstica por Algoritmo Gen´etico (GA) . . . 22

3.3 Resolu¸c˜ao Metaheur´ıstica por Otimiza¸c˜ao por Colˆonia de Formigas (ACO) 25 3.4 Resolu¸c˜ao Heur´ıstica por Busca Local 2-OPT . . . 28

4 DESEMPENHO E ALGORITMOS PARALELOS 29 4.1 Fork/Join para distribuir, explorar e selecionar . . . 32

5 MODELO COMPOSICIONAL PARA RESOLUC¸ ˜AO DO PCV 35 6 SOLUC¸ ˜OES PROPOSTAS 43 6.1 Resolu¸c˜ao Metaheur´ıstica por Simulated Annealing (SA) e 2-OPT com Computa¸c˜ao Paralela . . . 43

6.2 Resolu¸c˜ao Metaheur´ıstica por Algoritmo Gen´etico (GA) e 2-OPT com Computa¸c˜ao Paralela . . . 46

6.3 Resolu¸c˜ao Metaheur´ıstica por Otimiza¸c˜ao por Colˆonia de Formigas (ACO) e 2-OPT com Computa¸c˜ao Paralela . . . 48

6.4 Considera¸c˜oes sobre o Modelo Composicional . . . 49

7 RESULTADOS OBTIDOS 51 7.1 Resultados obtidos com o Pipeline 1 (SA) . . . 51

7.2 Comportamento monotonicamente decrescente . . . 57

7.3 Resultados obtidos em uma distribui¸c˜ao aleat´oria com 250 cidades . . . 59

(8)

7.4 Resultados obtidos com o Pipeline 2 (GA) . . . 62 7.5 Resultados obtidos com o Pipeline 3 (ACO) . . . 65 8 CONCLUS ˜AO E TRABALHOS FUTUROS 69

REFERˆENCIAS BIBLIOGR ´AFICAS 76

ANEXOS 77

(9)

1 INTRODUC ¸ ˜ AO

As t´ecnicas de Computa¸c˜ao Paralela associadas aos algoritmos de busca da Inteligˆencia Artificial que exploram um espa¸co de estados atrav´es da aplica¸c˜ao de metaheur´ıstica permitem a gera¸c˜ao de uma maior quantidade de solu¸c˜oes candidatas na resolu¸c˜ao de problemas com dimens˜oes consideradas intrat´aveis. Problemas da classe NP, como o Problema do Caixeiro Viajante, possui esta caracter´ıstica. Usando estas combina¸c˜oes, de uma maneira composicional, uma boa solu¸c˜ao ou, em alguns casos, uma ´otima solu¸c˜ao emergir´a dentro de um tempo de processamento satisfat´orio para aplica¸c˜oes na solu¸c˜ao de problemas reais e complexos.

1.1 O Problema do Caixeiro Viajante

O Problema do Caixeiro Viajante (PCV) ´e um dos mais cl´assicos e desafiadores problemas computacionais de roteamento envolvendo um grafo com pesos. Ele conta com um grande n´umero de aplica¸c˜oes pr´aticas em diversos segmentos da ind´ustria, tais como, log´ıstica, gen´etica, manufatura, telecomunica¸c˜ao e neurociˆencia. Ele tem inspirado pesquisas e estudos por matem´aticos, cientistas da computa¸c˜ao, engenheiros, qu´ımicos, f´ısicos, psic´ologos, educadores, pesquisadores n˜ao profissionais, entre outros (APPLE- GATE, 2007).

O PCV consiste na determina¸c˜ao do menor ciclo ou circuito para um conjunto de cidades a serem visitadas obrigatoriamente. Isto significa, que a partir de uma determi- nada cidade inicial (ou v´ertice do grafo), todas as cidades (os outros v´ertices deste grafo) ser˜ao visitadas uma ´unica vez, exceto a cidade de origem, por sua vez, tamb´em ´e a cidade de destino, denotando assim, um ciclo. O custo de viagem entre um par de cidades ´e o peso associado as arestas que conectam o grafo. Neste caso, o objetivo ´e encontrar o caminho menos custoso para visitar todas as cidades, ao final, retornando a sua origem. O PCV busca pelo circuito hamiltoniano com o peso (custo ou comprimento) total m´ınimo (COOK, 2011).

Apesar da compreens˜ao do PCV ser simples, ele ´e um dos problemas mais comple- xos (GAREY, 1979a) e intesivamente investigados em Matem´atica Computacional. Sua simplicidade e intratabilidade tornam o PCV um modelo ideal para o desenvolvimento

(10)

de id´eias e t´ecnicas para a investiga¸c˜ao de problemas computacionais em geral (APPLE- GATE, 2007).

1.2 Motiva¸ c˜ ao para a Pesquisa

A aplica¸c˜ao dos algoritmos da Inteligˆencia Artificial (IA) para resolu¸c˜ao de proble- mas complexos podem e devem ser expandidos atrav´es das capacidades da Computa¸c˜ao Paralela e os recursos computacionais existentes. Existe um grande n´umero de problemas complexos que n˜ao possuem uma solu¸c˜ao exata ou ´otima devido as suas dimens˜oes e re- quisitos. Esta classe de problemas intrat´aveis, denominados polinˆomiais n˜ao-determin´ısco (NP), s˜ao modelos computacionais interessantes a serem investigados. Dentre eles, o Pro- blema do Caixeiro Viajante (PCV), ao qual ´e um problema de roteamento onde existem, e provavelmente sempre existir˜ao, instˆancias em aberto. Ele oferece uma ´otima funda¸c˜ao para explora¸c˜ao e aplica¸c˜ao dos algoritmos de IA em paralelo.

1.3 Estado da Arte na Solu¸ c˜ ao do Problema

O Problema de Caixeiro Viajante (PCV), por se tratar de uma referˆencia amplamente investigada da classe dos problemas decid´ıveis e intrat´aveis, conta com diversas solu¸c˜oes envolvendo a uni˜ao entre heur´ısticas e paralelismo. As pesquisas mais recentes envolvendo os tipos de proposta alinhadas com esta obra, abordam a solu¸c˜ao do PCV diretamente ou indiretamente. Elas consistem em: acelera¸c˜ao atrav´es de busca local utilizando GPUs (ROCKI, 2012), aplica¸c˜ao de Simulated Annealing (SA) em paralelo utilizando busca independente ou colaborativa (CZECH, 2010), acelera¸c˜ao em paralelismo de dados para casos de Otimiza¸c˜ao por Colˆonia de Formigas (ACO) (CECILIA, 2013) e paralelismo com Algoritmos Gen´etico (AG) (GOMEZ, 2009). No entanto, estas abordagens buscam uma boa solu¸c˜ao dentro de um tempo de processamento satisfat´orio e exploram paralelismo para atingir maiores desempenhos e/ou um n´umero maior de solu¸c˜oes candidatas.

Uma outra abordagem, que n˜ao ´e o foco principal desta obra, ´e a busca das solu¸c˜oes

´

otimas do PCV (TSP@GATECH, 2007). No entanto, estas solu¸c˜oes podem demorar anos para serem encontradas.

(11)

1.4 Proposta de Pesquisa

A proposta de pesquisa desta obra est´a alinhada com os objetivos descritos na pr´oxima se¸c˜ao. Ela inclui a implementa¸c˜ao, a an´alise e a medi¸c˜ao dos algoritmos relacionados a seguir: Simulated Annealing (SA), Algoritmos Gen´etico (AG), Otimiza¸c˜ao por Colˆonia de Formigas (ACO) e Otimiza¸c˜ao por Busca Local (OBL).

Os algoritmos selecionados ser˜ao implementados juntamente com t´ecnicas de com- puta¸c˜ao paralela. Isto significa que eles ser˜ao implementados suportando paralelismo atrav´es do uso de CPUs, por´em com possibilidades de serem estendidos futuramente para GPUs ou outros processadores computacionais. Esta decis˜ao depender´a das carac- ter´ısticas do algoritmo selecionado. Eles ser˜ao aplicados na resolu¸c˜ao do Problema do Caixeiro Viajante (PCV) e verificados de acordo com as estrat´egias j´a conhecidas, como por exemplo, testados com os dados p´ublicos da TSPLIB (REINELT, 1991a).

Al´em disso, um dos destaques ´e a apresenta¸c˜ao de um modelo composicional para a resolu¸c˜ao do PCV juntamente com um framework para seu desenvolvimento, inspirado em diversas t´ecnicas, dentre elas, o modelo estrutural do algoritmo gen´etico.

1.5 Objetivos da Pesquisa

Os objetivos desta obra s˜ao estabelecer conex˜oes entre as t´ecnicas de busca da Inte- ligˆencia Artificial que utilizam metaheur´ıstica e a aplica¸c˜ao dos recursos e das abstra¸c˜oes oferecidas atrav´es da Computa¸c˜ao Paralela. Bem como, analisar e medir o comportamento destes algoritmos isolados ou na forma de composi¸c˜ao utilizando diversas configura¸c˜oes de processamento. O objetivo central ´e implementar os algoritmos selecionados e aplic´a-los ao Problema do Caixeiro Viajante de acordo com os detalhes apresentados nesta obra.

(12)

1.6 Metodologia

Para explorar o PCV atrav´es da perspectiva dos algoritmos abordados em IA jun- tamente com as capacidades da computa¸c˜ao paralela, foi selecionado um conjunto de m´etodos metaheur´ısticos e outras heur´ısticas de otimiza¸c˜ao, conforme descrito nos cap´ıtulos anteriores. Elas serviram para an´alise e base comparativa. O problema intrat´avel em quest˜ao, o PCV, possui um grande potencial explorat´orio atrav´es de t´ecnicas de parale- lismo computacional. Os desafios ou estruturas computacioniais presentes nesta sele¸c˜ao de algoritmos, ou seja, os requisitos de aplica¸c˜ao neles contidos, envolvem: grades n˜ao estruturadas, ´algebra linear, c´alculos estat´ısticos, aleatoriedade e travesia de grafos (ASA- NOVIC, 2009).

As principais fontes determinantes na escolha dos algoritmos e aquisi¸c˜ao de conheci- mento foram os artigos e os livros relacionados nesta obra. Ap´os a investiga¸c˜ao e sele¸c˜ao dos algoritmos, eles foram implementados usando uma linguagem de programa¸c˜ao mul- tiparadigma e com suporte a paralelismo. Pelo desempenho, portabilidade, controle e familiaridade do autor, C++ (C++, 2011) ´e a linguagem de programa¸c˜ao escolhida para a implementa¸c˜ao dos algoritmos paralelos que foram analisados. Por ser uma linguagem que permite constru¸c˜oes sucintas e tamb´em de familiaridade do autor, F# (FSHARP, 2013) foi aplicada na apresenta¸c˜ao de algum conceito ou racioc´ınio que n˜ao precisar´a ser medido ou avaliado em detalhes, para outros casos foram adotados pseudoc´odigos.

As an´alises e representa¸c˜oes dos dados produzidos foram feitos atrav´es das ferramentas Wolfram Mathematica e/ou Microsoft Excel. Dentre os recursos de computa¸c˜ao paralela n˜ao distribu´ıda, foram utilizados uma combina¸c˜ao de threads na CPU e as extens˜oes de processamento vetorial existentes nos processadores modernos. Logo, o principal objetivo foi extrair o m´aximo e medir o comportamento dos recursos computacionais presentes nestes equipamentos multicores (ASANOVIC, 2009) para entender o comportamento re- lacionado a explora¸c˜ao do espa¸co de estados do problema em quest˜ao.

Na coleta de dados foram utilizados marcadores e pontos bem definidos que permiti- ram a verifica¸c˜ao de desempenho de um determinado algoritmo em rela¸c˜ao ao tempo de processamento e/ou a qualidade do resultado(s) gerado(s). Alguns dos algoritmos selecio- nados foram executados e medidos em um trabalho conjunto atrav´es de algum modelo de composi¸c˜ao, como por exemplo, em uma cadeia de execu¸c˜ao (pipeline). Em alguns casos,

(13)

somente um pseudoc´odigo possuem as informa¸c˜oes relativas ao contexto do problema ou a um eventual esclarecimento.

Os dados que foram utilizados para os testes com o PCV sim´etrico e euclidiano bidi- mensional foram obtidos: a) aleatoriamente atrav´es de geradores de n´umeros randˆomicos ou b) de fontes j´a existentes, tais como, TSPLIB (REINELT, 1991a) ou TSP Test Data (TSP@GATECH, 2009).

Para execu¸c˜ao dos testes e suas respectivas an´alises foram utilizados os recursos com- putacionais de acordo com as especifica¸c˜oes indicadas na figura 1. Todos os equipamentos s˜ao de propriedade do autor:

Figura 1: Configura¸c˜ao dos computadores para medi¸c˜oes e coleta de dados

Foram reportados os principais procedimentos dos testes. Isso foi obtido atrav´es dos indicadores, tais como: gr´aficos contextuais, tabelas e grafos denotando os ciclos encon- trados. Todos os c´odigos fontes produzidos e utilizados est˜ao relacionados e encontram-se na se¸c˜ao de anexos deste trabalho.

(14)

1.7 Pr´ oximos Cap´ıtulos

A seguir ´e apresentada a organiza¸c˜ao desta obra.

O cap´ıtulo 2 descreve o Problema do Caixeiro Viajante (PCV): suas representa¸c˜oes, seus desafios e como as heur´ısticas da Inteligˆencia Artificial (IA) podem ajudar no es- tabelecimento de uma solu¸c˜ao satisfat´oria. Neste cap´ıtulo, ainda s˜ao apresentados a complexidade e a explos˜ao combinat´oria gerado por uma abordagem sequencial e de for¸ca bruta para encontrar uma ´otima solu¸c˜ao do PCV sim´etrico.

O cap´ıtulo 3 discorre sobre algoritmos e suas propriedades. Neste cap´ıtulo, tamb´em ´e descrito sobre complexidade computacional e as classes polinˆomias (P) e polinˆomias n˜ao- determin´ısticas (NP). ´E apresentado uma alternativa de resolu¸c˜ao para o PCV atrav´es da aplica¸c˜ao de heur´ısticas da IA.

O cap´ıtulo 4 estabelece a no¸c˜ao sobre desempenho computacional, a utiliza¸c˜ao de algoritmos paralelos para obten¸c˜ao de desempenho e os novos tipos de hardwares com capacidades de computa¸c˜ao paralela. Al´em disso, este cap´ıtulo cita como problemas intrat´aveis, como no caso do PCV, podem se beneficiar de uma classe de heur´ıstica, ao qual coletivamente ´e chamada de metaheur´ıstica paralela.

O cap´ıtulo 5 apresenta a constru¸c˜ao mon´adica para abordar o PCV. Neste cap´ıtulo,

´e introduzido o modelo composicional juntamente com suas propriedades.

O cap´ıtulo 6 ´e o concentrador das solu¸c˜oes propostas desta obra e complementa o cap´ıtulo 5, onde s˜ao apresentadas as solu¸c˜oes propostas da disserta¸c˜ao: a resolu¸c˜ao do PCV porSimulated Annealing (SA) com Computa¸c˜ao Paralela, a resolu¸c˜ao do PCV por Algoritmo Gen´etico (GA) com Computa¸c˜ao Paralela e a resolu¸c˜ao do PCV por Otimiza¸c˜ao por Colˆonia de Formigas (ACO) com Computa¸c˜ao Paralela. Para todas estas solu¸c˜oes s˜ao aplicadas um heur´ıstica de ajuste baseada em Otimiza¸c˜ao por Busca Local (OBL).

O cap´ıtulo 7 apresenta os resultados obtidos, a compara¸c˜ao com outros resultados publicados e a conclus˜ao do modelo proposto.

(15)

2 O PROBLEMA DO CAIXEIRO VIAJANTE

O Problema do Caixeiro Viajante (PCV) ´e um dos mais cl´assicos e desafiadores pro- blemas computacionais de roteamento envolvendo um grafo com pesos, contando com um grande n´umero de aplica¸c˜oes pr´aticas - onde se incluem instˆancias do problema que en- volvem grafos direcionados ou digrafos, como, por exemplo, a representa¸c˜ao de ruas com m˜ao ´unica (problema na forma assim´etrica) e m˜ao dupla (problema na forma sim´etrica).

O PCV consiste na determina¸c˜ao do menor ciclo ou circuito para um conjunto de ci- dades a serem visitadas obrigatoriamente. Isto significa, que a partir de uma determinada cidade inicial (ou v´ertice do grafo), todas as cidades (os outros v´ertices deste grafo) ser˜ao visitadas uma ´unica vez, exceto a cidade de origem, por sua vez, tamb´em ´e a cidade de destino, denotando assim, um ciclo. O PCV busca pelo circuito hamiltoniano com o peso (custo ou comprimento) total m´ınimo.

Figura 2: Homenagem do XKCD ao quase centen´ario Problema do Caixeiro Viajante.

(http://xkcd.com/399/)

O diagrama a seguir, indicado na figura 3, exibe um grafo n˜ao-direcionado completo com cinco v´ertices e seus respectivos pesos. Tal disposi¸c˜ao representa uma configura¸c˜ao do PCV:

(16)

Figura 3: Grafo n˜ao-direcionado com cinco v´ertices e seus respectivos pesos.

A origem do PCV remete a um jogo inventado em 1857 por Sir William Rowan Hamiltom, criador da matem´atica dosquaternions, o Jogo Icosiano (APPLEGATE, 2007).

Este jogo tinha como objetivo encontrar um ciclo atrav´es de 20 v´ertices distribuidos em quatro pent´agonos concˆentricos, onde cada v´ertice continha trˆes adjacentes (algumas destas conex˜oes ligando um pent´agono mais externo a outro mais interno). No plano tridimensional, a figura geom´etrica do jogo Icosiano ´e um dodecaedro. Em outro momento, o tipo de solu¸c˜ao oferecida pelo desafio do jogo fora denominada de ciclo hamiltoniano, em homenagem ao seu criador. No entanto, somente no ano de 1930, o problema se caracterizou como PCV por Merrill Flood da Universidade de Princeton e da RAND Corporation. E seu desafio continua at´e os dias atuais. Sendo assim, o modelo abstrato do PCV ´e de um problema de otimiza¸c˜ao combinat´oria relacionado a determina¸c˜ao de um ciclo hamiltoniano em um grafo qualquer (direcionado ou n˜ao), cujo objetivo ´e encontrar um ciclo de peso (custo ou comprimento) m´ınimo, ou seja, um problema de minimiza¸c˜ao (APPLEGATE, 2007).

E poss´ıvel representar uma das solu¸c˜´ oes ou um dos ciclos de uma instˆancia do problema PCV, utilizando subgrafos, matrizes de adjacˆencia, listas de adjacˆencia ou at´e mesmo ca- minhos de uma estrutura de dados do tipo ´arvore, onde o n´o final cont´em intr´ınsecamente uma referˆencia ao n´o inicial. Uma vez que resultados variados s˜ao derivados da confi-

(17)

gura¸c˜ao de um PCV, este resultado, ou seja, o ciclo estabelecido como solu¸c˜ao, tamb´em pode ser denominado como uma instˆancia da solu¸c˜ao do PCV proposto.

A formula¸c˜ao do PCV como um problema de programa¸c˜ao bin´aria foi apresentada em 1954 por George Bernard Dantzig, Delbert Ray Fulkerson e Selmer Martin Johnson (DANTZIG, 1954). Na figura 4, ´e apresentado a modelagem matem´atica com as vari´aveis de decis˜ao e as restri¸c˜oes do problema:

Figura 4: Modelo do PCV atrav´es de Programa¸c˜ao Bin´aria. (Adapta¸c˜ao do modelo proposto por Belfiore e F´avero (BELFIORE, 2013))

(18)

As restri¸c˜oes do problema indicadas na figura 4 em (1) e (2) determinam que cada n´o seja visitado uma ´unica vez e a restri¸c˜ao (3) impede que ocorra a forma¸c˜ao de sub-rotas.

Abaixo h´a duas representa¸c˜oes alternativas de uma instˆancia da solu¸c˜ao do PCV referente a figura 3. A esquerda, encontra-se um subgrafo.` A direita uma matriz de` adjacˆencias equivalente ao subgrafo anterior, ao qual os elementos formadores do ciclo est˜ao em destaque em suas respectivas c´elulas, elas podem ser interpretadas pela horizontal ou pela vertical.

Figura 5: Subgrafo e matriz de adjacˆencias equivalente.

Portanto, a nota¸c˜ao sequencial do ciclo, equivalente a representa¸c˜ao acima ´e: A - p1 - B - p2 - C- p3 - D - p4 - E - p0 - A.

Um algoritmo de resolu¸c˜ao, escrito na linguagem de programa¸c˜ao F# (FSHARP, 2013), do PCV utilizando uma abordagem por for¸ca bruta, ou seja, todas as poss´ıveis combina¸c˜oes de caminhos, ´e apresentado a seguir:

(19)

Figura 6: Resolu¸c˜ao do PCV atrav´es de for¸ca bruta.

O exemplo em quest˜ao, atrav´es da fun¸c˜aographToTree, transforma um grafo em uma

´

arvore. E a fun¸c˜ao bruteForceApproach, executa a combina¸c˜ao e a ordena¸c˜ao crescente pela distˆancia total desta combina¸c˜ao.

Assumindo que os valores das conex˜oes correspondem a tabela indicada na figura 7:

(20)

Figura 7: Valores de referˆencia para exemplo do PCV atrav´es de for¸ca bruta.

O resultado desta combina¸c˜ao est´a indicado a seguir:

Figura 8: Resultado para exemplo do PCV sim´etrico atrav´es de for¸ca bruta.

No entanto, a pergunta a ser respondida ´e: Quantos ciclos precisariam ser verificados para resolver este problema para N cidades (ou v´ertices)?

O PCV ´e um problema de otimiza¸c˜ao combinat´oria, onde a explos˜ao em seu caso sim´etrico ´e equivalente a Γ(N)

2 permuta¸c˜oes. Este resultado ´e extraido do fato de um ciclo em uma determinada ordem e sua reversa possu´ırem o mesmo valor total (destacados na

(21)

figura 8). Isto ´e, atrav´es da teoria da complexidade computacional, significa que ele ´e um problema decid´ıvel e classificado como polinomial n˜ao-determin´ıstico (NP) da classe NP- Completo ou NP-Dif´ıcil, de acordo com as m´etricas utilizadas (GAREY, 1979b). Neste caso, dependendo do poder computacional, ´e poss´ıvel resolver por for¸ca bruta instˆancias do problema com m´aximo entre 20 a 30 cidades.

Figura 9: M´etricas para resolu¸c˜ao PCV com for¸ca bruta.

Outro fator a ser considerado ´e a representa¸c˜ao do problema. Certamente, matrizes de adjacˆencia ou todas as combina¸c˜oes do grafo se forem mantidos em mem´oria, podem encontrar como barreira a capacidade de armazenamento destas informa¸c˜oes, no caso do n´umero de cidades a serem visitadas for muito grande. Neste caso, e em situa¸c˜oes contendo um grande n´umero de combina¸c˜oes, elas deveriam ser particionadas e distribu´ıdas. Por´em, dado sua ordem NP-Completo, encontrar uma solu¸c˜ao ´otima pode ser imposs´ıvel com o poder computacional atual. De fato, existem abordagens por programa¸c˜ao linear, entre outras t´ecnicas, que permitem encontrar uma das solu¸c˜oes ´otima (caso exista mais de uma possibilidade), por´em em alguns casos para alcan¸car esta este resultado, requer anos de processamento (TSP@GATECH, 2007), que pode ser (ou ´e) invi´avel na aplica¸c˜ao para solucionar problemas reais - onde muitas vezes estes caminhos s˜ao dinˆamicos. Por exemplo, a rota feita pelo entregador de jornal pode ficar est´atica por um bom tempo, at´e

(22)

que um novo assinante apare¸ca, se este for auxiliado por um algortimo para determinar suas visitas, este algoritmo deve ser eficiente e adaptativo, ou seja, fornecer um boa rota dentro de um per´ıodo aceit´avel de tempo.

Existem declaradas solu¸c˜oes reais, utilizando uma abordagem algoritmica cl´assica da Arvore Geradora M´ınima (AGM), que pode encontrar uma solu¸c˜´ ao quase ´otima, se tiver tempo suficiente para processamento. Por exemplo, uma semana para resolver um pro- blema est´atico (MENDES, 2012). Para os outros casos, principalmente onde existe a res- tri¸c˜ao de tempo, para obter uma boa solu¸c˜ao, a heur´ıstica ´e aplicada. Atualmente, o maior PCV com cidades j´a resolvidos cont´em uma solu¸c˜ao ´otima ´e inferior a 25 mil v´ertices.

(MENDES, 2012)(TSP@GATECH, 2005). E o m´aximo reportado sobre uma solu¸c˜ao

´

otima em uma aplica¸c˜ao VLSI encontra-se em torno de 86 mil v´ertices (TSP@GATECH, 2007).

Atrav´es do uso de heur´ısticas, n˜ao h´a garantias, mas uma solu¸c˜ao tende a convergir para um bom resultado com complexidade de tempo polinomial (P). No caso do PCV, uma heur´ıstica aceit´avel ´e do vizinho mais pr´oximo. Ela ´e uma t´ecnica de algoritmo guloso, onde a partir de uma determinada cidade, a pr´oxima ser´a a cidade n˜ao visitada com menor distˆancia entre elas. Este tipo de abordagem possui complexidade algoritimica de O(N2).

E uma solu¸c˜´ ao eficiente, embora, assim como oHill Climbling (RUSSELL, 2009), ela pode ficar presa no m´ınimo local e seu sucesso depende muito da forma do espa¸co de estados associado. Para superar este aspecto do algoritmo, pode ser utilizada uma heur´ıstica de troca de vizinhos, onde usualmente ´e aplicado algum comportamento aleat´orio para determinar quais os vizinhos ser˜ao trocados. Neste caso, ´e impr´atico manter todos as instˆancias previamente encontradas, o que corre no risco destas instˆancias serem visitadas novamente, portanto o espa¸co de busca voltar´a a ser Γ(N). Isto tamb´em ´e v´alido para os casos assim´etricos do PCV.

Sobretudo, tentativas no desenvolvimento de heur´ısticas gen´ericas, ou seja, que sirvam para endere¸car uma variedade de problemas, n˜ao tiveram muito sucesso at´e o desenvol- vimento de solu¸c˜oes baseadas em Inteligˆencia Artificial (IA), coletivamente denominadas solu¸c˜oes metaheur´ısticas (VOSS, 2006). Estas solu¸c˜oes s˜ao geralmente utilizadas na re- solu¸c˜ao de problemas aos quais n˜ao existe conhecimento de um algoritmo eficiente para resolver o problema, sendo uma boa solu¸c˜ao considerada aceit´avel. As solu¸c˜oes de IA

(23)

com metaheur´ısticas s˜ao basicamente t´ecnicas inteligentes de busca, onde algumas delas s˜ao baseadas em sistemas adaptativos naturais. Para alguns problemas de otimiza¸c˜ao combinat´oria, como no caso do PCV, ´e poss´ıvel resolvˆe-los de uma maneira menos que perfeita, por´em com um consider´avel valor pr´atico ou aplicado. Sendo, os tipos de al- goritmos implementados para este prop´osito chamados de algoritmos de aproxima¸c˜ao - comuns em solu¸c˜oes IA que utilizam metaheur´ıstica. Eles est˜ao baseados no fato de que em muitos casos uma solu¸c˜ao pouco menos que ´otima, dentro de uma escala de tempo satisfat´oria, ´e melhor que nenhuma solu¸c˜ao (HAREL, 2012b).

Em resumo, o PCV ´e um problema de roteamento intrat´avel da ordem polinomial n˜ao determin´ıstica (NP). Conforme descrito nas p´aginas 211 e 212 do COMPUTERS AND INTRACTABILITY de Garey e Johnson (GAREY, 1979a), ele ´e um problema NP- Completo, por´em pode ser classificado como NP-Dif´ıcil se for considerado a investiga¸c˜ao da vers˜ao geom´etrica com m´etrica Euclidiana. Uma instˆancia do problema com 48 cida- des (ou v´ertices) em sua configura¸c˜ao sim´etrica ter´a uma combina¸c˜ao de 2,58623×1059 possibilidades ou 47 fatorial (47!). Em sua configura¸c˜ao assim´etrica esta mesma instˆancia ter´a uma combina¸c˜ao de 1,24139×1060 possibilidades ou 48 fatorial (48!). A figura 10 ilustra uma descri¸c˜ao sucinta do problema:

Figura 10: Resumo do PCV.

(24)

3 RESOLUC ¸ ˜ AO DE SISTEMAS COMPLEXOS

Algoritmo ´e uma prescri¸c˜ao, onde um conjunto de instru¸c˜oes finitas e bem definidas, que tem por objetivo a resolu¸c˜ao de um problema. Computacionalmente, um algoritmo possui propriedades intr´ınsicas relacionadas com complexidade de desempenho e espa¸co consumido em mem´oria. Estas propriedades s˜ao classificadas de acordo com uma ordem de crescimento para determinar o comportamento assint´otico do algoritmo. Para entender a eficiˆencia e o comportamento dos algoritmos s˜ao necess´arios saber sua complexidade e seu modelo computacional.

A classifica¸c˜ao do algoritmo ´e dado numa linguagem matem´atica, organizada em ordem crescente (Figura 11), por: constante (k), logar´ıtmica (log N), linear (N), linear- logar´ıtmica (N log N), quadr´atica (N2), c´ubica (N3) e exponencial (2N).

Figura 11: Classifica¸c˜ao da ordem de crescimento em escala logar´ıtmica proposta por Sedgewick (SEDGEWICK, 2009).

(25)

A seguir s˜ao apresentadas algumas tarefas que representam opera¸c˜oes de ordem cres- cente descritas anteriormente (Figura 11). Elas est˜ao em formas de fun¸c˜oes acumuladoras, codificadas na linguagem de programa¸c˜ao F# (FSHARP, 2013).

Abaixo as fun¸c˜oes acumuladoras: constante (constant), logar´ıtmico (logarithmic), li- near (linear), linear-logar´ıtmico (linear-logarithmic), quadr´atico (quadratic), c´ubico (cu- bic) e exponential (exponencial). A fun¸c˜ao exponencial utiliza internamente a gera¸c˜ao do coeficiente binomial para produzir uma sequˆencia iterativa equivalente ao triˆangulo de Pascal. Estas fun¸c˜oes representam esfor¸cos que s˜ao trat´aveis ou intrat´aveis na medida em que a quantidade de elementos comput´aveis aumenta atrav´es de um comportamento assint´otico.

Figura 12: Fun¸c˜oes acumuladoras e suas ordens de crescimento.

(26)

Obtendo a classifica¸c˜ao com rela¸c˜ao a sua ordem de crescimento, ´e poss´ıvel estimar qual o comportamento e o tempo de processamento de um determinado algoritmo se o n´umero de elementos comput´aveis crescer. Ou seja, o objetivo ´e saber as caracteristicas do algoritmo com base numa determinada medida de eficiˆencia (na maioria dos casos, o tempo de processamento - velocidade) e em quanto tempo um resultado (correto) ser´a produzido. No entanto, h´a alguns problemas que n˜ao possuem uma solu¸c˜ao eficiente conhecida, tais problemas s˜ao denominados NP-completo (CORMEN, 2009). Com isto, uma hierarquia de complexidade emerge.

A escala de complexidade computacional considera como problemas polinˆomias (P) aqueles que possuem um algoritmo eficiente com ordem inferior nos limites da ordem expo- nencial e, em alguns casos, de potˆencias com expoentes elevados. No caso onde existe um algoritmo eficiente para o problema, ele ´e considerado trat´avel. E, no geral, os problemas intrat´aveis n˜ao possuem um algoritmo eficiente. Mesmo alguns dos problemas trat´aveis podem degradar dependendo da quantidade de elementos a ser processado, ou seja, o poder computacional contemporˆaneo pode ser um outro limite que impe¸ca a resolu¸c˜ao do problema.

O PCV ´e um problema intrat´avel e classificado como polinomial n˜ao-determin´ıstico (NP). Existem solu¸c˜oes ´otimas para o PCV com cidades, por´em o maior deles j´a resolvido cont´em uma solu¸c˜ao abaixo de 30 mil cidades (MENDES, 2012)(TSP@GATECH, 2005), levando anos de processamento para encontrar este resultado (TSP@GATECH, 2004).

Uma alternativa de resolu¸c˜ao para o PCV ´e atrav´es da aplica¸c˜ao de heur´ısticas, onde uma solu¸c˜ao pode convergir para um bom resultado, ou seja, encontrar uma solu¸c˜ao sub-

´

otima - isto n˜ao ´e garantido, mas por outro lado pode ser o melhor resultado em rela¸c˜ao as restri¸c˜oes de tempo estabelecidas. Este ´e o trade-off que deve ser considerado na ado¸c˜ao de tais t´ecnicas. No caso do PCV, a abordagem ´e utilizar as t´ecnicas de busca com heur´ıstica para guiar e limitar o processo de busca em um espa¸co de estados com uma dimens˜ao intrat´avel.

(27)

3.1 Resolu¸ c˜ ao Metaheur´ıstica por Simulated Annealing (SA)

Uma das t´ecnicas de IA baseada na combina¸c˜ao de f´ısica estat´ıstica, no m´etodo de Monte Carlo e em um modelo estoc´astico do algoritmo Hill Climbing (HC) ´e aSimulated Annealing (SA). Onde, no artigo original, o problema referencial para a demostra¸c˜ao do algoritmo ´e o PCV com 400 cidades (KIRKPATRICK, 1983)(KIRKPATRICK, 1988).

O SA ´e um modelo que simula o processo f´ısico de agrega¸c˜ao de part´ıculas em um sistema submetido em uma temperatura alt´ıssima, onde no decorrer do tempo a tem- peratura vai caindo lentamente at´e o seu resfriamento dado um determinado crit´erio - esta caracter´ıstica do sistema ´e denominada decooling schedule. Neste processo, ocorre o realinhamento das mol´eculas e o ajuste do sistema. Na metalurgia, no processo deanne- aling, os metais s˜ao submetidos a fornos para serem temperados, portanto, as mol´eculas do metal s˜ao recombinadas para obterem maior resistˆencia.

O SA ´e uma busca probabil´ıstica, ao contr´ario do HC n˜ao estoc´astico, ele aplica mo- vimentos n˜ao intuitos e dinamismo em sua parametriza¸c˜ao como, por exemplo, aceitar solu¸c˜oes inferiores `a solu¸c˜ao atual para n˜ao ficar preso, dependendo do tipo de problema, no m´ınimo ou m´aximo local. Este comportamento ´e comum ocorrer no in´ıcio da solu¸c˜ao onde a temperatura ´e elevada. No entanto, durante o resfriamento, o sistema vai se estabi- lizando, consequentemente havendo uma maior resistˆencia em aceitar solu¸c˜oes inferiores.

A troca de energia do sistema neste caso ´e an´aloga a troca de vizinhos no PCV. O SA ´e baseado no algoritmo de Metropolis-Hastings (ROBERT, 2009), a aceita¸c˜ao ou rejei¸c˜ao de uma nova solu¸c˜ao, inferior a anterior, ´e baseada na aplica¸c˜ao da fun¸c˜ao de Boltzmann.

Este comportamento ocorre durante os passos da itera¸c˜ao mantidas no processo de cooling schedule, exceto quando um novo resultado com valor melhor n˜ao for encontrado atrav´es da avalia¸c˜ao da fun¸c˜ao objetivo. No caso do PCV, uma fun¸c˜ao objetivo que avalia se o novo ciclo ´e maior ou igual a solu¸c˜ao atual ou a diferen¸ca de energia entre o novo resultado e o resultado atual n˜ao for menor do que zero. Basicamente a fun¸c˜ao objetivo e a fun¸c˜ao de Boltzmann determinam os crit´erios de aceite do resultado obtido.

O SA possui um comportamento explorat´orio, isto significa que ele pretende encontrar ou visitar solu¸c˜oes em regi˜oes n˜ao exploradas no espa¸co de estados. Sendo uma solu¸c˜ao estoc´astica, baseada no conceito de algoritmos de aproxima¸c˜ao, ela depende dos aspectos aleat´orios inerentes a caracter´ıstica da opera¸c˜ao. No caso, a implementa¸c˜ao computacio-

(28)

nal, depende primariamente da qualidade do gerador de n´umeros randˆomicos, ao qual tem uma influˆencia positiva ou negativa sobre os resultados da solu¸c˜ao (KLIMASAUSKAS, 2002). Benoˆıt Mandelbrot, criador da matem´atica dos fractais, associa a qualidade de aleatoriedade com um coeficiente, denominado de coeficiente de Hurst (H). O H indica um ´ındice de dependˆencia relativo a uma s´erie de valores no decorrer do tempo (s´erie tem- poral). Se o H estiver entre maior que 0.5 e 1, significa que existe um alta probalidade de um n´umero alto (ou baixo) ser seguido por outro n´umero de mesma caracter´ıstica (com- portamento persistente). Se o valor estiver entre 0 e menor que 0.5 significa que existe um alta probabilidade de um alterna¸c˜ao entre os n´umero da s´erie, se o n´umero atual ´e um valor alto, o pr´oximo ser´a baixo, ou vice e versa (comportamento anti-persistente).

No entanto, se H for igual a 0.5, o comportamento da sequˆencia ´e incerta, portanto im- previs´ıvel (MANDELBROT, 2004) - o que ´e muito bom para a caracter´ıstica explorat´oria da solu¸c˜ao com SA.

O Problema do Caixeiro Viajante ´e amplamente estudado pela Pesquisa Operacional e pela Ciˆencia da Computa¸c˜ao. Provavelmente, o SA n˜ao ´e a abordagem mais eficiente se comparado com outras heur´ısticas. Para ele ser competitivo ser´a necess´ario ajustes finos em sua parametriza¸c˜ao (SKISCIM, 1983). Mesmo com um esfor¸co computacional um pouco maior se comparado com outras heur´ısticas, o SA ´e um bom algoritmo para poder escapar dos m´ınimos locais. Por outro lado, existem diversas abordagens aplicando paralelismo denominadas coletivamente deParallel Simulated Annealing (PSA) aos quais permitem um balanceamento entre ostrade-offs (AYDIN, 2005). Um tipo de abordagem paralela do SA ´e descrita mais adiante nesta obra.

(29)

A fun¸c˜ao SIMULATED-ANNEALING apresenta em pseudoc´odigo o m´etodo do SA descrito anteriormente:

Figura 13: Fun¸c˜ao SIMULATED-ANNEALING.

(30)

3.2 Resolu¸ c˜ ao Metaheur´ıstica por Algoritmo Gen´ etico (GA)

Algoritmo gen´etico (GA) pertence a uma classe de algoritmos evolutivos da Inte- ligˆencia Artificial (IA). A t´ecnica do GA foi adaptada com o objetivo de encontrar solu¸c˜oes aproximadas para os problemas de otimiza¸c˜ao e busca tais como o PCV. Assim como o SA, esta ´e outra t´ecnica inspirada na natureza, neste caso, ela ´e baseada em alguns or- ganismos biol´ogicos que sofrem sua evolu¸c˜ao atrav´es do processo da sele¸c˜ao natural e da sobrevivˆencia do ”mais forte”ou mais apto (fittest) (HOLLAND, 1992b), segundo os princ´ıpios estabelecidos pelo darwinismo (HOLLAND, 1992a). De forma abstrata, o GA utiliza do processo referenciado os conceitos de: reprodu¸c˜ao, hereditariedade, varia¸c˜ao, recombina¸c˜ao e sele¸c˜ao natural (MITCHELL, 2003). Portanto, deste modelo biol´ogico o algoritmo aplica as id´eias de popula¸c˜ao de cromossomos, sele¸c˜ao natural para cruzamento, gera¸c˜ao de descendentes atrav´es de crossover e muta¸c˜ao para obter diversidade.

Usualmente, a representa¸c˜ao da solu¸c˜ao do problema em GA ´e feita por uma string bin´aria, ou seja, ela ´e uma sequˆencia de zeros e uns, ao qual essa string ´e denominada cromossomo, sendo um agrupamento de genes (contendo os 0s e os 1s). No entanto, no caso do PCV, isso n˜ao ´e uma boa representa¸c˜ao ou, pelo menos, uma representa¸c˜ao expressiva que forne¸ca alguma vantagem para endere¸car as caracter´ısticas estruturais do PCV. Segundo Zbigniew Michalewicz, optar por umastring bin´aria ´e uma p´essima escolha para representar solu¸c˜oes do PCV (MICHALEWICZ, 2010).

Para o PCV, a representa¸c˜ao selecionada ´e a do caminho (path representation), onde cada v´ertice do grafo, exceto o primeiro e o ´ultimo do ciclo, est˜ao conectados aos vizi- nhos da esquerda e da direita - facilitando a aplica¸c˜ao da opera¸c˜ao de crossover. Esta representa¸c˜ao de caminho ´e organizado numa estrutura de dados do tipo vetor (ouarray), onde o vizinhos da esquerda e da direita do elemento encontrado na posi¸c˜ao N, estar˜ao nas posi¸c˜oes N-1 e N+1 respectivamente.

A avalia¸c˜ao de um resultado superior ´e feita por uma fun¸c˜ao de aptid˜ao (ou defitness) ou fun¸c˜ao de recompensa. No caso do PCV, a fun¸c˜ao objetivo do problema ´e baseada no tipo de problema a ser investigado, por exemplo, em sua vers˜ao sim´etrica e bidimensional, o valor a ser medido pode ser a distˆancia euclidiana. Esta fun¸c˜ao de fitness poder´a indicar mais do que se o problema foi resolvido ou n˜ao, ela servir´a tamb´em para avaliar qual a proximidade de uma solu¸c˜ao ideal, orientando no processo de sele¸c˜ao e gera¸c˜ao de

(31)

popula¸c˜oes com solu¸c˜oes candidatas ao PCV.

No algoritmo de GA ´e encontrado, de uma forma adaptada ao problema, trˆes opera- dores gen´eticos populares: a sele¸c˜ao, a recombina¸c˜ao (ou crossover) e a muta¸c˜ao.

A opera¸c˜ao de sele¸c˜ao ´e respons´avel pela escolha dos indiv´ıduos (ou das solu¸c˜oes candidatas do PCV) que formar˜ao a pr´oxima popula¸c˜ao.

A opera¸c˜ao de recombina¸c˜ao ´e respons´avel pela produ¸c˜ao de descendentes a partir do compartilhamento de material gen´etico (no caso do PCV, organiza¸c˜ao entre os vizinhos).

Um dos processos v´alidos ´e a sele¸c˜ao de dois indiv´ıduos da popula¸c˜ao com as melhores fun¸c˜oes de fitness, denominados de pais, e estes s˜ao manipulados para gerar filhos com uma fun¸c˜ao de fitness superior, sendo no PCV, uma solu¸c˜ao de circuito m´ınimo). No PCV, esta manipula¸c˜ao envolve a troca aleat´oria de cidades (ou v´ertices) entre duas das solu¸c˜oes candidatas do PCV, por´em ´e necess´ario manter a consistˆencia e a estrutura do ciclo.

A opera¸c˜ao de muta¸c˜ao ´e respons´avel pela invers˜ao ou troca de duas cidades (ou v´ertices) da solu¸c˜ao candidata do PCV. Normalmente, esta opera¸c˜ao ocorre com proba- bilidade aleat´oria ap´os uma opera¸c˜ao de recombina¸c˜ao.

Os procedimentos adotados no GA desta obra envolve:

1. No in´ıcio, a cria¸c˜ao de um conjunto aleat´orio de circuitos do PCV que formam as solu¸c˜oes candidatas da primeira gera¸c˜ao. A abordagem para a popula¸c˜ao inicial ´e gulosa, ou seja, da preferˆencia para as cidades (ou v´ertices) mais pr´oximas uma das outras;

2. A sele¸c˜ao das duas melhores solu¸c˜oes candidatas (com menor ciclo) na popula¸c˜ao.

Elas ser˜ao os pais, onde ser˜ao recombinado para gerar duas novas solu¸c˜oes candidatas ou dois novos filhos. Esses filhos poder˜ao, na maioria das vezes, serem melhores que os pais;

3. Baseado numa condi¸c˜ao aleat´oria os filhos gerados anteriormente sofrer˜ao muta¸c˜ao.

Isto ´e para impedir que possam ocorrer semelhantes solu¸c˜oes candidatas entre a popula¸c˜ao;

4. Os novos filhos substituir˜ao na popula¸c˜ao existente as solu¸c˜oes candidatas com re-

(32)

sultados inferiores (com maior ciclo).

Durante o processamento do GA, o tamanho da popula¸c˜ao ou a quantidade de solu¸c˜oes candidatas do PCV mant´em-se inalterada. Al´em disso, este processo ´e iterativo. Os parˆametros do tamanho da popula¸c˜ao e da quantidade de intera¸c˜oes s˜ao definidos de acordo com um balanceamento do tamanho do problema a ser solucionado e o tempo de execu¸c˜ao (aproximadamente) desejado. A fun¸c˜ao GENETIC-ALGORITHM apresenta em pseudoc´odigo o m´etodo do GA descrito anteriormente:

Figura 14: Fun¸c˜ao GENETIC-ALGORITHM.

(33)

3.3 Resolu¸ c˜ ao Metaheur´ıstica por Otimiza¸ c˜ ao por Colˆ onia de Formigas (ACO)

Otimiza¸c˜ao por colˆonia de formigas (ACO), bem como o SA e GA descritos anterior- mente, ´e outro m´etodo de otimiza¸c˜ao inspirado na natureza, neste caso, ele foi baseado na observa¸c˜ao do comportamento de formigas reais atuando em colˆonias (CECILIA, 2013).

Mesmo n˜ao sendo as criaturas mais inteligentes deste planeta, todavia sendo um inseto social, as formigas apresentam uma not´avel inteligˆencia coletiva enquanto colˆonia. A inteligˆencia exposta pelas colˆonias de formigas ´e um exemplo de comportamento emer- gente (LUCCI, 2012). Comportamento emergente significa que um grupo de agentes ou entidades simples, no caso as formigas, conseguem atuar em um ambiente, formando comportamentos complexos em seu coletivo. O comportamento das formigas ´e gover- nado pela sobrevivˆencia da colˆonia ao inv´es da sobrevivˆencia dos ind´ıviduos, sendo esta caracter´ıstica uma das pe¸cas centrais do algoritmo desta se¸c˜ao.

O algoritmo do ACO pode ser aplicado como heur´ıstica por uma grande quantidade de problemas (DORIGO, 2006)(BLUM, 2005), principalmente aqueles do tipo que possuem uma estrutura naturalmente modelada como um grafo. A primeira aplica¸c˜ao do ACO foi com o PCV, em sua forma original denominada de Ant System (AS) (DORIGO, 1996).

No ACO, em essˆencia, as formigas artificiais ou simuladas geram solu¸c˜oes para instˆancias do PCV em forma de tours ou ciclos. Essas formigas s˜ao simplesmente agentes que possuem a capacidade de construir tours de forma paralela e probabil´ıstica. Elas s˜ao orientadas nesse processo por uma trilha virtual de feromˆonio (pheromone trail) e outras informa¸c˜oes pertinentes a heur´ıstica. Este rastro de feromˆonio ´e um elemento fundamental no algoritmo, ele ´e o facilitador ou estimulador da coordena¸c˜ao indireta entre os agen- tes e o ambiente, onde este processo ´e denominado estigmergia (stigmergy) (DORIGO, 1997)(DORIGO, 2004).

O processo de estigmergia atua da seguinte forma em um grafo do PCV: um conjunto de formigas virtuais s˜ao distribu´ıdas em torno deste grafo. As formigas selecionam, de forma probabil´ıstica, seus caminhos baseados na intensidade de feromˆonio onde as arestas ou conex˜oes do grafo n˜ao estejam ocupadas ou foram visitadas previamente. Quanto maior o n´ıvel de feromˆonio em uma conex˜ao, maior a probabilidade dela ser escolhida.

(34)

Quando as formigas completam um ciclo, a fun¸c˜ao de fitness ´e avaliada e o n´ıvel de feromˆonio do grafo ´e atualizado. Ao passar do tempo, as melhores arestas do grafo, que determinar˜ao um ciclo m´ınimo possuir˜ao um n´ıvel de feromˆonio maior, portanto exister´a a convergˆencia, ou seja o maior n´umero de formigas percorrendo o mesmo circuito.

Existem duas a¸c˜oes atuando sob o n´ıvel de feromˆonio depositado no grafo s˜ao elas:

a intesifica¸c˜ao e a evapora¸c˜ao. As a¸c˜oes de intensifica¸c˜ao e evapora¸c˜ao s˜ao regidas pelas seguintes equa¸c˜oes:

Figura 15: Equa¸c˜oes da distribui¸c˜ao, intensifica¸c˜ao e evapora¸c˜ao do feromˆonio.

(35)

Outra equa¸c˜ao que faz parte do ACO ´e a de probabilidade para a sele¸c˜ao de caminho, onde o objetivo ´e definir qual ser´a a pr´oxima cidade (ou v´ertice) visitada. Ela ´e obtida atrav´es da rela¸c˜ao a seguir:

Figura 16: Equa¸c˜ao de probabilidade para sele¸c˜ao do caminho.

A fun¸c˜ao ANT-COLONY-OPTIMIZATION apresenta em pseudoc´odigo o m´etodo do ACO descrito anteriormente:

Figura 17: Fun¸c˜ao ANT-COLONY-OPTIMIZATION.

(36)

3.4 Resolu¸ c˜ ao Heur´ıstica por Busca Local 2-OPT

A heur´ıstica de busca local 2-Opt para resolu¸c˜ao do PCV (CROES, 1958) serve para ajustar um circuito de uma instˆancia do problema. Esta heur´ıstica busca o melhor resul- tado local, eliminando os cruzamentos entre as arestas. Percorrendo todos os pares das arestas n˜ao adjacentes e alterando suas conex˜oes ´e poss´ıvel alcan¸car o m´ınimo local do circuito, conforme descrito nos passos do algoritmo em pseudoc´odigo a seguir:

Figura 18: Fun¸c˜oes 2-OPT-SWAP e 2-OPT-ALL. Elas comp˜oem a heur´ıstica 2-Opt.

(37)

4 DESEMPENHO E ALGORITMOS PARALELOS

A preocupa¸c˜ao, ou o questionamento sobre o desempenho computacional em rela¸c˜ao ao tempo, ocorre desde o s´eculo XIX, quando foi concebida a M´aquina An´alitica de Charles Babbage:

“As soon as an Analytic Engine exists, it will necessarily guide the future course of the science. Whenever any result is sought by its aid, the question will arise - By what course of calculation can these results be arrived at by the machine in the shortest time? (BABBAGE, 1864)”

Todo trabalho de an´alise matem´atica de algoritmos ´e fundamentado e baseado nas opera¸c˜oes sequenciais, onde as instru¸c˜oes n˜ao podem ocorrer no mesmo tempo. Este mo- delo ´e conhecido como arquitetura de von Neumann ou arquitetura de Princeton (NEU- MANN, 1993).

A Arquitetura de von Neumann ainda ´e a arquitetura dominante na constru¸c˜ao de computadores convencionais. Na constru¸c˜ao de um algoritmo, existem duas propriedades fundamentais a serem consideradas e medidas: tempo de processamento e espa¸co dos dados. Uma vez determinado o espa¸co consumido por um algoritmo sequencial, isto torna- se uma caracter´ıstica imut´avel, sua varia¸c˜ao de tempo de processamento ser´a proporcional a sua complexidade e a velocidade do processador. No entanto, existe a possibilidade da constru¸c˜ao de algoritmos usando t´ecnicas de computa¸c˜ao paralela para aumentar o desempenho em rela¸c˜ao ao tempo de processamento e, consequentemente em muitos casos, consumindo mais espa¸co de dados (embora em um intervalo menor de tempo).

Atualmente, para executar mais computa¸c˜oes por segundo, os processadores est˜ao sendo desenvolvidos com mais de um n´ucleo de processamento, denominados de processa- dores multicore, em outras palavras eles s˜ao um tipo de computador paralelo. Portanto, para obter o melhor desempenho destes computadores, ser´a necess´ario explorar algoritmos usando t´ecnicas de computa¸c˜ao paralela, ou simplesmente paralelismo (CORMEN, 2009).

Segundo David Harel, no livro Algorithmics, paralelismo tem se tornado cada vez mais crucial, em grande parte por causa da tendˆencia da constru¸c˜ao destes novos hardwares (processadores com capacidade de computa¸c˜ao paralela). Onde computadores com quatro

(38)

n´ucleos s˜ao comuns hoje em dia. Para tomar vantagem destes tipos de processadores, novos algoritmos e t´ecnicas de programa¸c˜ao s˜ao necess´arias. Uma das t´ecnicas populares

´e amap-reduce, inspirada pela programa¸c˜ao funcional (HAREL, 2012a). Onde o objetivo

´e dividir, conquistar e muitas vezes consolidar, isto ´e tamb´em conhecido como fork-join ou divide-conquer. Por exemplo, o MERGE-SORT (CORMEN, 2009), ´e estruturado adequadamente para a aplica¸c˜ao desta t´ecnica:

Figura 19: Pseudoc´odigo do MERGE-SORT, algoritmo criado por von Neumann, e adap- tado de Cormen (CORMEN, 2009).

A t´ecnica de map-reduce, determina que a computa¸c˜ao de um grande agrupamento de dados seja dividida em partes, onde estas partes s˜ao executadas separadamente e os resultados s˜ao combinados com a utiliza¸c˜ao de uma fun¸c˜ao de acumula¸c˜ao (HAREL, 2012a). No caso do MERGE-SORT, a fun¸c˜ao recursivamente efetua a quebra do conjunto de dados em partes que s˜ao executadas independentes, e a fun¸c˜ao MERGE tem por objetivo consolidar o processamento das etapas previamente divididas. Este algoritmo na vers˜ao sequencial implica, no pior caso, em uma complexidade de tempo igual a O(N LOG N), e sua vers˜ao paralela a O(N) (HAREL, 2012a). Em contrapartida, vers˜ao paralela do MERGE-SORT, exige um consumor maior de mem´oria.

Problemas intrat´aveis, como no caso do PCV, podem se beneficiar de uma classe de heur´ıstica, ao qual coletivamente ´e chamada de metaheur´ıstica paralela. Ela inclui os tradicionais algoritmos de metaheur´ıstica, como por exemplo,Simulated Annealing (SA), Algoritmo Gen´etico (GA), Otimiza¸c˜ao por Colˆonia de Formigas (ACO), entre outros.

(39)

Portanto, seu objetivo ´e a composi¸c˜ao destes algoritmos com t´ecnicas de computa¸c˜ao pa- ralela para reduzir o tempo de processamento e utilizar os diversos tipos de processadores (CPUs e/ou GPUs) no m´aximo de suas capacidades.

Ao explorar o espa¸co de estados atrav´es buscas com SA, existem duas poss´ıveis abor- dagens de busca com metaheur´ıstica paralela: independente, onde cada entidade paralela executa sua computa¸c˜ao e procedimentos, ao final a melhor solu¸c˜ao ´e selecionada; ou cooperativa, onde etapas do algoritmo s˜ao separadas em fases e atuam em cadeia, as enti- dades paralelas deste modelo trocam informa¸c˜oes durante o processamento para selecionar a melhor solu¸c˜ao encontrada (CZECH, 2010). As buscas, independente e cooperativa, s˜ao modelos aplicativos dos padr˜oes de programa¸c˜ao paralela Divide and Conquer e Pipeline respectivamente. Estes padr˜oes s˜ao descritos no cap´ıtulo 4 do Patterns for Parallel Pro- gramming (MATTSON, 2004) ou em cat´alogos de padr˜oes como o mantido pelo grupo do Parallel Computing Laboratory da UC Berkeley (PARLAB@BERKELEY, 2010).

Uma varia¸c˜ao do padr˜ao Divide and Conquer ´e o Fork/Join, ele consiste no pro- cesso de espalhar (dividir) uma tarefa em diversos segmentos paralelos para resolu¸c˜ao do problema (conquistar). Ao final, estas entidades paralelas j´a completadas s˜ao sincroni- zadas. Com o MERGE-SORT, a ´ultima etapa ´e a execu¸c˜ao do ´ultimo MERGE e por consequˆencia a ordena¸c˜ao completa do vetor. J´a no SA em paralelo com busca indepen- dente, a ´ultima etapa ´e sele¸c˜ao da melhor solu¸c˜ao encontrada no momento. Portanto, ambos compartilham o mesmo tipo de abstra¸c˜ao paralela para alcan¸car um desempenho superior.

No caso do SA em paralelo fica evidente que o n´umero de solu¸c˜oes candidatas au- mentar˜ao proporcionalmente ao n´umero de entidades paralelas disponibilizadas para a resolu¸c˜ao do problema, permitindo tais solu¸c˜oes rodarem desde smartphones at´e super- computadores. Ent˜ao, tamb´em ´e necess´ario identificar qual a rela¸c˜ao entre a quantidade de entidades paralelas e a qualidade do resultado. Intuitivamente, ´e poss´ıvel interpretar quanto maior for o paralelismo dispon´ıvel, melhor ser´a a qualidade do resultado. Ou seja, um comportamento, em teoria, monotonicamente decrescente, j´a que o PCV ´e um problema de minimiza¸c˜ao. No entanto, para esta conclus˜ao ´e necess´aria a verifica¸c˜ao e os testes em detalhes dos algoritmos propostos nesta obra em quantidades diversas de aloca¸c˜oes de processamento e tamanho do problema.

(40)

Outro modelo que est´a presente nos computadores atuais e deve ser considerado, ´e o processamento vetorial. Este tipo de processamento est´a presente nos processadores con- vencionais e processadores paralelos massivos, tais como, aceleradoras gr´aficas discretas ou Graphical Processing Units (GPUs). A computa¸c˜ao processada por este tipo de dis- positivo ´e classificada atrav´es da taxonomia de Flynn como Single Instruction, Multiple Data (SIMD) ouMultiple Instruction, Multiple Data (MIMD) (AKHTER, 2006).

A busca, a utiliza¸c˜ao e a cria¸c˜ao do paralelismo ´e um dos maiores assuntos de pes- quisa desde do in´ıcio da d´ecada de 80. Onde a for¸ca motivadora para estas quest˜oes de paralelismo, em hardware e software, ´e a necessidade insaci´avel por maior desempenho, especialmente por uma alta velocidade computacional (TOSIC, 2004).

O objetivo desta obra ´e abordar o PCV por meio da composi¸c˜ao dos algoritmos de busca da Inteligˆencia Artificial, da aplica¸c˜ao de paralelismo e da utiliza¸c˜ao de recursos computacionais de alto-desempenho. Mapeando quais s˜ao as vantagens, ganhos e desafios com rela¸c˜ao a constru¸c˜ao de algoritmos sequenciais. As abordagens aqui apresentadas per- mitir˜ao serem adaptadas ou servirem de base para resolu¸c˜ao de outros tipos de problemas intrat´aveis.

4.1 Fork/Join para distribuir, explorar e selecionar

Em geral, a aplica¸c˜ao do padr˜aoFork/Jointem como caracter´ıstica a cria¸c˜ao dinˆamica de tarefas (fork) com a finalidade de resolver um problema e mais adiante a jun¸c˜ao destas tarefas (join) para dar continuidade na execu¸c˜ao. Ele ´e muito comum de ser encontrado em conjunto com outro padr˜ao denominado Loop Parallelism (MATTSON, 2004). Padr˜oes como OpenMP ou ISO C++ 11 oferecem APIs ao qual a finalidade ´e a espalhar tarefas computacionais para escalar o processamento. No OpenMP, em C++, isto ´e feito atrav´es de diretivas (#pragma omp parallel for) que delega ao compilador o trabalho da gera¸c˜ao do paralelismo e sincroniza¸c˜ao do ponto de jun¸c˜ao.

(41)

Figura 20: Exemplo de paralelismo em C++ com a API do OpenMP 3.0 retirado do padr˜ao (OPENMP, 2008).

Usualmente, o Fork/Join ´e aplicado em situa¸c˜oes de decomposi¸c˜ao de tarefas ou de dados (MATTSON, 2004), por exemplo, ao dividir tarefas para atuar em parti¸c˜oes dos dados e ao final consolidar. Em alguns casos particionando o espa¸co de estados a ser explorado. De forma abstrata este padr˜ao oferece o seguinte comportamento:

Figura 21: Modelo abstrato do Fork/Join.

(42)

No ISO C++ 11 (ISOCPP, 2011), a linguagem de programa¸c˜ao adotada na imple- menta¸c˜ao desta obra, ´e permitido um ajuste mais customiz´avel e moderno na express˜ao do paralelismo e da sincroniza¸c˜ao, isto ´e feito com uma combina¸c˜ao entre std::vector, std::async estd::future, como ilustrado no fragmento a seguir:

Figura 22: Fragmento em C++ 11 ilustrativo a aplica¸c˜ao de std::vector, std::async e std::future do functor ForkJoin da implementa¸c˜ao proposta (detalhes no anexo).

A aplica¸c˜ao do padr˜ao Fork/Join nesta obra objetiva a cria¸c˜ao de diversas tarefas explorando (preferencialmente) o maior n´umero de estados distintos do espa¸co de esta- dos de uma instˆancia do PCV. Este trabalho ocorre em conjunto com os algoritmos de inteligˆencia artificial selecionados e as estrat´egias descritas no decorrer desta obra.

(43)

5 MODELO COMPOSICIONAL PARA RESOLUC ¸ ˜ AO DO PCV

Como descrito nos cap´ıtulos 3 e 4 sobre as t´ecnicas selecionadas nesta obra relativas a resolu¸c˜ao de sistemas complexos e aos padr˜oes de computa¸c˜ao paralela. Aqui ser´a apresentado o modelo proposto de resolu¸c˜ao do PCV atrav´es de composi¸c˜ao. A figura 23 denota de forma geral a id´eia composicional proposta para abordagem do problema:

Figura 23: Composi¸c˜ao entre algoritmos da Inteligˆencia Artificial e Computa¸c˜ao Paralela.

A composi¸c˜ao aplicada aqui possui um relacionamento indireto com o conceito ma- tem´atico de composi¸c˜ao de fun¸c˜oes. A inspira¸c˜ao `a aplica¸c˜ao de um modelo composi- cional vem das Monads, baseadas em conceitos da Teoria das Categorias e introduzidas na d´ecada de 90 na linguagem de programa¸c˜ao funcional Haskell (WADLER, 1992)(WA- DLER, 1995).

Umamonad´e uma forma de estrutura computacional em termos de valores e sequˆencias de computa¸c˜ao usando estes valores. Ela permite a defini¸c˜ao de building blocks que s˜ao sequˆencias de computa¸c˜ao, al´em disso ela determina como combinar computa¸c˜oes e formar uma nova, esse encadeamento ´e a composi¸c˜ao, onde a sa´ıda de uma computa¸c˜ao ´e a en- trada de uma outra. Este processo, teoricamente, ocorre de forma indefinida, ou seja, cabe ao implementador saber quando ´e o suficiente utilizar o valor retornado como resultado, encerrando a sequˆencia computacional. Com uma monad ´e permitido criar um pipeline de execu¸c˜ao. No caso do PCV, a solu¸c˜ao proposta envolve uma monad que permitir´a a utiliza¸c˜ao de building blocks contextuais, aos quais sabem atuar sobre as instˆancias do PCV, onde habilitar´a a constru¸c˜ao de um ou mais pipelines para resolver o problema.

De acordo com as defini¸c˜oes pertinentes da Teoria das Categorias, a proposta inclui uma cole¸c˜ao de objetos do tipo PCV e uma cole¸c˜ao de morfismos para satisfazer o mo- delo composicional. O modelo de morfismo proposto ´e uma fun¸c˜ao, no caso um estrutura computacional pr´e-definida, a qual sabe manipular, transformar ou atuar em um dom´ınio

(44)

(PCV) e produzir um contradom´ınio (PCV). Em uma categoria esse tipo de morfismo re- cebe o nome de endomorfismo. Esse endomorfismo poder´a ser concretizado, por exemplo, atrav´es da aplica¸c˜ao de uma fun¸c˜ao representando um algoritmo de SA. Ela receber´a uma instˆancia do PCV com uma determinada configura¸c˜ao e produzir´a um objeto destino, de preferˆencia, igual ou melhor ao objeto de origem.

A seguir a nota¸c˜ao usada para os objetos e o(s) morfismo(s). Neste caso, uma opera¸c˜ao contendo objeto de origem, morfismo e objeto de destino:

Figura 24: Morfismo com objetos mon´adicos [M(TSP)].

A sequˆencia a seguir ´e a nota¸c˜ao de uma composi¸c˜ao de objetos onde o objetivo ´e estabelecer umpipeline para solu¸c˜ao de uma instˆancia do PCV. A opera¸c˜ao de composi¸c˜ao satisfaz `a propriedade associativa:

Figura 25: Composi¸c˜ao com objetos mon´adicos [M(TSP)].

O tipo param´etrico Monad em Haskell possui uma interface contendo trˆes membros s˜ao eles: um construtor de tipo, uma opera¸c˜ao para binding e uma fun¸c˜ao de unidade. O construtor de tipo serve para obter ou instanciar o tipo mon´adico. A fun¸c˜ao de unidade mapeia um valor simples para um valor do tipo mon´adico correspondente, no caso do PCV, o que ´e deseja ´e um tipo PCV mon´adico, portanto uma estrutura de dados do tipo PCV sofre uma aplica¸c˜ao de uma fun¸c˜ao de unidade para ser transformado em um tipo PCV

(45)

mon´adico. A opera¸c˜ao debinding´e respons´avel por mapear um valor mon´adico em outro, onde poder´a possuir o mesmo tipo do objeto de origem. Na figura 26 ´e apresentada a classe Monad do Haskell e seus membros (HUGHES, 1998). ´E poss´ıvel interpret´a-la como uma abstra¸c˜ao que encapsula um tipo e sua computa¸c˜ao:

Figura 26: Monad, um tipo de dados abstrato de a¸c˜oes.

Na figura 26, o membro return ´e a fun¸c˜ao de unidade e o operador>>= representa a opera¸c˜ao de binding. O construtor de tipo ´e a pr´opria Monad instanciada, por exemplo, M TSP.

Para um tipo ser qualificado como monad torna-se essencial que trˆes axiomas sejam satisfeitos: o axioma da associatividade, o axioma da identidade `a esquerda ou aplica¸c˜ao da fun¸c˜ao de unidade `a esquerda e o axioma da identidade `a direita ou aplica¸c˜ao da fun¸c˜ao de unidade `a direita. Estes axiomas s˜ao conhecidos como as leis da monad (WADLER, 1995) e est˜ao formalizados na nota¸c˜ao do c´alculo lambda (λ calculus) como segue:

Figura 27: As leis da Monad (Adapta¸c˜ao da formaliza¸c˜ao de Wadler (WADLER, 1995)).

Na linguagem Haskell existem diversos tipos de monads (HASKELL.ORG, 2011),

(46)

como por exemplo IO Monad que sabe lidar com computa¸c˜oes que envolvem opera¸c˜oes E/S ouError Monad que sabe lidar com computa¸c˜oes que envolvem opera¸c˜oes as quais po- dem falhar ou disparar uma exce¸c˜ao. O conceito demonad em linguagens de programa¸c˜ao

n˜ao ´e mais exclusivo da linguagem Haskell (MICROSOFT, 2013a)(MICROSOFT, 2013b)(SCALA- LANG.ORG, 2013), estando presente cada vez mais em outras linguagens ou capacitadas

de ser reproduzidas, desde que existam constru¸c˜oes fundamentais dispon´ıveis, como por exemplo, high-order functions. Para esta obra foi concebido a TSP Monad, um tipo que sabe lidar com o PCV de forma composicional. Seus principais membros, implementados na linguagem de programa¸c˜ao C++, s˜ao apresentados a seguir:

Figura 28: TSP Monad.

(47)

A TSP Monad proposta na figura 28 fornece um construtor de tipo, uma fun¸c˜ao de unidade a partir da fun¸c˜ao ret e uma opera¸c˜ao de binding a partir da fun¸c˜ao bnd.

Para evitar uma sintaxe convoluta, o m´etodo map foi adicionado - esta abordagem ´e semelhante a constru¸c˜ao da fun¸c˜ao flatMap da linguagem Scala (SCALA-LANG.ORG, 2013). Para fazer parte da categoria das monads ´e fundamental esse tipo obedecer as trˆes leis referenciadas na figura 27. As provas relativas as leis citadas s˜ao apresentadas a seguir. Elas s˜ao apresentadas em duas vers˜oes, uma utilizando um nota¸c˜ao funcional e outra uma nota¸c˜ao orientada a objetos:

Figura 29: TSP Monad e a primeira lei.

Figura 30: TSP Monad e a segunda lei.

(48)

Figura 31: TSP Monad e a terceira lei.

Portanto, conforme demonstrado, a TSP Monad (figura 28) ´e uma autˆenticamonad! Amonad proposta (figura 28) permitir´a constru¸c˜oes depipelines computacionais para resolu¸c˜ao do PCV conforme vislumbrado na figura 23, ao qual poder˜ao encadear uma sequˆencia de opera¸c˜oes. Um comportamento similar ao padr˜ao de projeto denominado Cadeia de Responsabilidade (Chain-of-Responsibility pattern) (GAMMA, 1995)(RAJAN, 2010). No entanto, o padr˜ao descrito atrav´es da orienta¸c˜ao a objetos ´e verboso se for comparado com o modelo mon´adico sugerido.

O m´etodo map ou a fun¸c˜ao bnd da TSP Monad s˜ao os pontos de entrada para os morfismos, ou seja, s˜ao membros que recebem fun¸c˜oes transformadoras - elas manipulam uma instˆancia da estrutura TSP e geram um tipo mon´adico TSP. Por exemplo, a cons- tru¸c˜ao de um pipeline simples contendo o encadeamento do Simulated Annealing (SA) e

(49)

do2-OPT ´e descrito na figura 32 abaixo:

Figura 32: Pipeline com Simulated Annealing seguido por 2-OPT.

Se aplicado a uma instˆancia do PCV, o pipeline indicado na figura 32, ap´os processa- mento, produzir´a um resultado semelhante como segue:

Figura 33: Resultado da execu¸c˜ao do Pipeline descrito na figura 32.

(50)

Os functors, ou as fun¸c˜oes transformadoras, tais como para aplica¸c˜ao do Simulated Annealing (functor SA) ou do 2-OPT (functor 2OPT), tamb´em foram implementadas para outros algoritmos e estruturas, como por exemplo, Otimiza¸c˜ao por Colˆonia de Formi- gas, Algoritmo Gen´etico, Fork/Join (fragmento apresentado na figura 22), entre outros.

Estes elementos permitir˜ao a constru¸c˜ao dos pipelines ou modelos composicionais para explorar o PCV juntamente com Computa¸c˜ao Paralela e Inteligˆencia Artificial. O modelo destas fun¸c˜oes transformadoras seguem uma determinada assinatura correspondente ao fragmento central da opera¸c˜ao de binding, permitindo que outras fun¸c˜oes sejam criadas para agregar e participar de novas composi¸c˜oes ou de alguma j´a existente. Abaixo dois exemplos completos de functors simples descritos em C++:

Figura 34: Os functors para Identidade e2-OPT.

Todos os componentes descritos no cap´ıtulo formam o modelo composicional proposto.

Eles atuar˜ao de forma direta na defini¸c˜ao das solu¸c˜oes propostas e na produ¸c˜ao dos resultados obtidos nesta obra.

(51)

6 SOLUC ¸ ˜ OES PROPOSTAS

A seguir, s˜ao apresentadas as propostas para resolu¸c˜ao do PCV envolvendo algorit- mos metaheur´ısticos e paralelismo. No cap´ıtulo anterior, foi descrito a proposta da TSP Monad (figura 28) para constru¸c˜ao de solu¸c˜oes composicionais, onde ela ´e um elemento fundamental e complementar `as solu¸c˜oes propostas neste cap´ıtulo. As resolu¸c˜oes apre- sentadas aqui contemplam a aplica¸c˜ao depipelines com o PCV, de acordo com o modelo descrito anteriormente.

6.1 Resolu¸ c˜ ao Metaheur´ıstica por Simulated Annealing (SA) e 2-OPT com Computa¸ c˜ ao Paralela

A resolu¸c˜ao h´ıbrida desta se¸c˜ao possui uma composi¸c˜ao mon´adica similar a indicada na figura 25. Uma composi¸c˜ao de SA e 2-OPT iniciada por uma heur´ıstica construtiva, no caso, do algoritmo do vizinho mais pr´oximo, juntamente com computa¸c˜ao paralela. Essa composi¸c˜ao produzir´a uma not´avel forma de resolu¸c˜ao h´ıbrida para explorar o PCV. Mo- delos h´ıbridos similares s˜ao adotados em problemas complexos a um certo tempo (AYDIN, 2005), mostrando ser um caminho promissor para explora¸c˜ao do problema.

O algoritmo do SA ´e bem estabelecido. Pode ser aplicado em situa¸c˜oes reais e conta com pesquisas em diversos segmentos que exploram suas caracter´ısticas (CHIBANTE, 2010). Ao final do processamento, apresenta uma boa solu¸c˜ao dentro das restri¸c˜oes esta- belecidas em sua parametriza¸c˜ao e, principalmente, tem como destaque o fato de escapar de m´ınimos (ou m´aximos) locais. No entanto, dado o contexto computacional atual, por exemplo, as esta¸c˜oes de trabalho, os servidores e at´e mesmo os smartphones existentes, eles contam com processadores contendo dois ou mais n´ucleos de processamento. Porque n˜ao utilizar este poder de processamento, uma vez que o SA e o 2-Opt s˜ao algoritmos que demandam processamento intensivo (CPU bound)? Portanto, a id´eia principal ´e uti- lizar tal capacidade computacional para gerar um n´umero maior de solu¸c˜oes candidatas.

A abordagem adotada para compor a solu¸c˜ao h´ıbrida consiste em: iniciar o ajuste da entrada do problema com a heur´ıstica construtiva do vizinho mais pr´oximo, executar fun¸c˜ao de SA e em seguida aplicar a fun¸c˜ao de 2-OPT para ajustes entre as conex˜oes.

As duas ´ultimas etapas da resolu¸c˜ao proposta devem obedecer uma rela¸c˜ao composicional

Referências

Documentos relacionados

Para tanto, o aplicativo utiliza- se de t´ ecnicas de vis˜ ao computacional que distinguem os elementos da refei¸c˜ ao, inteligˆ encia artificial e l´ ogica fuzzy na classifica¸c˜

O conceito de colonialidade, a obra de Frantz Fanon (1952;1961) e os princípios metodológicos da psicanálise concreta nos permitiram uma base que orientou

F I G U R E 1   Schematic representation of the experiment undertaken to test different routes of oestradiol benzoate administration for cervical dilation prior to

Analisando e estudando a situação atual, foram evidenciados alguns pontos como: grande variação no programa de produção diário/horário, o excesso de estoque em

Os periódicos em que as publicações foram apresentadas, três estavam relacionados a área de enfermagem todos voltados aos conhecimentos dos adolescentes, a

Dos eventos organizados, ressaltamos o Workshop em Fundamentos da Ciˆencia da Computa¸c˜ ao: Algoritmos Combinat´ orios e Estruturas Discretas, que envolveu v´ arios membros do

A study of ventral hernia repair in rabbits a quick graft vascularization and tissue resistance was detected, similar to the use of polytetrafluoretilene mesh, after four weeks of

Recomenda-se que o escaneamento dos cartões-resposta seja realizado por meio de scan- ners que contenham ADF (Automatic Document Feeder – Alimentador Automático de