• Nenhum resultado encontrado

Neste cap´ıtulo abordamos as caracter´ısticas principais dos algoritmos mem´eti- cos implementados. Entre elas podemos citar a estrutura hier´arquica da po- pula¸c˜ao, que segue um estilo em ´arvore tern´aria, com a popula¸c˜ao dividida em clusters de quatro indiv´ıduos cada um. Os motivos do uso desse tipo de estru- tura em detrimento de outros foram discutidos e, dados os resultados obtidos, acreditamos que esse foi um dos fatores cruciais para o bom desempenho geral do m´etodo. Outro aspecto abordado ´e a sele¸c˜ao de indiv´ıduos para recom- bina¸c˜ao. Essa sele¸c˜ao segue uma dinˆamica pr´opria, estreitamente relacionada com a estrutura populacional e com a existˆencia dos clusters. A inser¸c˜ao de novos indiv´ıduos, por sua vez, ´e altamente restritiva e possui um alto grau de rejei¸c˜ao. A grande quantidade de novos indiv´ıduos descartados torna necess´ario adotar uma taxa de recombina¸c˜ao alta para obtermos uma dinˆamica popula- cional equilibrada. Na etapa de inser¸c˜ao dos novos indiv´ıduos tamb´em h´a uma rela¸c˜ao com a estrutura hier´arquica dividida em clusters. A inicializa¸c˜ao da popula¸c˜ao ´e tratada de forma breve, uma vez que em boa parte dos problemas ela ´e puramente aleat´oria. De fato, em apenas um dos problemas - o de Or- denamento de Genes - foi necess´ario utilizar uma heur´ıstica construtiva para a cria¸c˜ao das popula¸c˜oes iniciais. Para todos os outros, o algoritmo mem´etico foi capaz de obter solu¸c˜oes de boa qualidade a partir das solu¸c˜oes aleat´orias

iniciais.

Nesse cap´ıtulo tamb´em foram discutidos a representa¸c˜ao e os operadores de busca local, recombina¸c˜ao e muta¸c˜ao. Como esses aspectos s˜ao altamente dependentes do problema tratado, eles ser˜ao continuamente abordados ao longo deste trabalho, sempre que for necess´ario ressaltar algum aspecto particular.

Apresentamos tamb´em o algoritmo mem´etico multipopulacional, bem como o modelo de ilhas utilizado na migra¸c˜ao de indiv´ıduos. A motiva¸c˜ao do uso de m´ultiplas popula¸c˜oes se concentra no fenˆomeno do genetic drift que ´e breve- mente comentado ao longo deste cap´ıtulo.

Por fim, apresentamos quatro pseudo-c´odigos. Dois referentes a algoritmos gen´eticos e dois a algoritmos mem´eticos. Eles servem para descrever as seme- lhan¸cas e diferen¸cas entre as duas abordagens de uma forma mais simples e direta. Nos pseudo-c´odigos tamb´em est˜ao expl´ıcitas as altera¸c˜oes no proces- samento quando passamos da abordagem unipopulacional para a multipopula- cional.

O NP-Opt

3.1

Introdu¸ao

1O objetivo principal deste trabalho foi o desenvolvimento de um ambiente de

otimiza¸c˜ao onde o usu´ario pudesse inserir novos m´etodos e problemas de uma forma f´acil e r´apida. A filosofia principal era fazer uso de um c´odigo simples, de f´acil entendimento e que pudesse ser reutilizado em grande parte. Para tanto, todo o software foi criado segundo o paradigma da orienta¸c˜ao a objetos, com a cria¸c˜ao de classes que pudessem ser especializadas para atender `as necessidades dos problemas. A estrutura do NP-Opt tamb´em deveria ser modular, de forma a facilitar a inclus˜ao de novos recursos, e esses recursos deveriam ser inclu´ıdos de forma a ficarem dispon´ıveis para todos os problemas, sempre que poss´ıvel. Outro ponto foi o uso de uma interface gr´afica para facilitar a comunica¸c˜ao usu´ario/m´aquina, al´em de ferramentas que pudessem facilitar seu uso pr´atico. Por fim, o NP-Opt deveria ser capaz de resolver os problemas de forma efi- ciente. Isso ficou sob a responsabilidade de um algoritmo mem´etico que utiliza recursos relativamente complexos, como popula¸c˜ao hierarquicamente estrutu- rada, migra¸c˜ao e processamento paralelo. O modelo de algoritmo mem´etico utilizado em todos os problemas ´e basicamente o mesmo, e isso tem como obje- tivo validar o NP-Opt como uma plataforma de otimiza¸c˜ao de uso geral. De fato, se fossem necess´arias mudan¸cas radicais no c´odigo ou na estrutura do al- goritmo mem´etico para se atingir um desempenho superior, n˜ao haveria como justificar a existˆencia do software. O NP-Opt conta atualmente com cinco pro- blemas dispon´ıveis, al´em do conjunto de todas instˆancias utilizadas nos testes presentes nesses trabalho. S˜ao eles:

1Este cap´ıtulo ´e baseado nos artigos:

A. Mendes, P. Fran¸ca e P. Moscato. NPOpt: An Optimization Framework for NP Problems, Proceedings do POM2001 - International Conference of the Production and Op- erations Management Society, p´ag. 82-89, Guaruj´a, Brasil, Agosto, 2001.

V. Garcia, A. Mendes, P. Fran¸ca e P. Moscato. Algoritmo Mem´etico Paralelo Aplicado a Problemas de Sequenciamento em M´aquina Simples, Proceedings do XXXIII SO- BRAPO - Simp´osio Brasileiro de Pesquisa Operacional, p´ag. 971-981, Campos do Jord˜ao, Brasil, Novembro, 2001.

• Sequenciamento em M´aquina Simples • Sequenciamento em M´aquinas Paralelas • Sequenciamento em Flowshop

• Gate Matrix Layout • Ordenamento de Genes

O NP-Opt foi inteiramente desenvolvido utilizando a linguagem Java [41] e com componentes Java Swing para a parte gr´afica. Isso permite uma maior portabilidade, al´em de um aspecto visual mais agrad´avel. O NP-Opt pode ser executado em qualquer sistema operacional que suporte um JVM (Java Virtual Machine), al´em de recursos gr´aficos. O programa utiliza poucos recursos com- putacionais. Como seu tamanho ´e de pouco mais de 300 KB, a configura¸c˜ao recomendada depende basicamente da complexidade do problema e do tama- nho das instˆancias a serem testadas. A parte gr´afica ´e bastante leve, sendo composta por janelas de di´alogo simples e sem recursos de anima¸c˜ao, como pode ser visto na Figura 3.1.

Figura 3.1: Tela do NP-Opt rodando sob o sistema operacional Windows.

O NP-Opt j´a foi testado em v´arios sistemas operacionais - Sun Solaris, Win- dows 98/NT/2000 e Linux - sendo que em todos eles o desempenho foi normal, sem que fosse notado nenhum tipo de incompatibilidade ou falha. Recomenda- se utilizar uma vers˜ao recente do Java e compilar o c´odigo sempre na m´aquina

que se vai efetuar os testes usando c´odigo nativo. A vers˜ao mais recente do Java faz isso automaticamente, compilando o c´odigo fonte de forma otimizada e fazendo o desempenho melhorar consideravelmente. Ressaltamos, por fim, que o uso de processamento paralelo s´o ´e poss´ıvel em ambientes Unix/Linux pois o Windows n˜ao permite o disparo remoto de processos devido a restri¸c˜oes de seguran¸ca.

Documentos relacionados