• Nenhum resultado encontrado

3.2 Seleção de Atributos como um Problema de Busca

3.2.5 Validação da solução encontrada

O resultado da seleção de atributos deve ser então validado, sendo utilizado para cons- trução dos classificadores e comparado seu resultado com o desempenho do classificador com todos os atributos. A Figura 3.6 apresenta o processo de seleção de atributos, dando ênfase aos processos de avaliação e de validação com modelos baseado em filtro ou wrapper.

3.2 Seleção de Atributos como um Problema de Busca 39

40

Capítulo 4

Metaheurísticas

4.1

Considerações Iniciais

O processo de busca pela melhor solução para um dado problema é chamado de otimiza- ção. A otimização visa minimizar ou maximizar uma função através da escolha sistemática dos valores das variáveis que compõem essa função dentro de um conjunto viável, res- peitando um conjunto de restrições do problema. Pode-se determinar que as técnicas de otimização geralmente apresentam:

• Uma função objetivo que tenta-se maximizar ou minimizar e é utilizada para avaliar as soluções encontradas;

• Um espaço de busca, onde estão todas as possíveis soluções do problema; • Um conjunto de restrições próprias do problema tratado.

Sendo assim, dada uma função f : Rn→ R e um espaço de busca S ⊆ Rn, onde Rn é

4.1 Considerações Iniciais 41 De acordo com as restrições do problema, o espaço de busca se divide em região factível e não factível, como a mostra a Figura 4.1. As soluções da região factível são aquelas que satisfazem a todas as restrições do problema.

Figura 4.1: Região factível

Têm-se, portanto, em um problema de otimização, uma função objetivo e um conjunto de restrições, ambos relacionados às variáveis de decisão. O problema pode ser de mini- mização ou de maximização da função objetivo. A resposta para o problema, também chamado de ótimo global, será o menor, no caso de minimização, valor possível para a função objetivo para o qual o valor atribuído às variáveis não viole nenhuma restrição. Em alguns casos, chega-se a valores cuja alteração discreta não conduz a resultados melhores, mas que não são também o ótimo global – esse tipo de solução é chamado de ótimo local, como mostra a Figura 4.2.

Um problema de maximização ou minimização pode ser unimodal ou multimodal, no primeiro caso existe apenas um ponto de mínimo, no caso de minimização, no espaço de busca, ou seja, só existe uma solução para o problema, como pode ser visto na Figura 4.3. O problema é multimodal quando, ao contrário do unimodal, existirem vários pontos de mínimos locais, que confundem muitos métodos de otimização, mas apenas um ótimo global.

4.1 Considerações Iniciais 42

Figura 4.2: Ótimo global x Ótimo local

Alguns problemas de otimização podem ser resolvidos por métodos exatos e eficientes. Outros necessitam de métodos não-exatos, métodos heurísticos, uma vez que sua formula- ção e/ou resolução exatas levariam a uma complexidade intratável, como foi discutido na Seção 3.2.

Figura 4.3: Função unimodal

Os métodos heurísticos generalistas aplicados a problemas de otimização, também cha- mados de metaheurísticas, utilizam algoritmos exploratórios para solução dos problemas.

4.2 Algoritmos Genéticos 43 As soluções são buscadas por aproximações sucessivas, avaliando-se os progressos alcança- dos, até que o problema seja resolvido. As metaheurísticas são usadas, por exemplo, nos problemas em que a complexidade da solução do algoritmo disponível é uma função expo- nencial de algum parâmetro; quando o valor deste cresce, o problema torna-se rapidamente mais complexo.

As metaheurísticas, portanto, designam métodos computacionais que otimizam um problema iterativamente tentando melhorar uma solução candidata em relação a uma de- terminada medida de qualidade, critério de avaliação.

Diferentes funções heurísticas podem ser usadas para reduzir o espaço de busca sem comprometer as chances de se encontrar uma solução ótima ou próxima da ótima, solução útil. Algumas dessas funções heurísticas utilizam regras de busca que visam simular alguns aspectos do comportamento de seres vivos como é o caso dos algoritmos genéticos, da colônia de formigas e da nuvem de partículas. Os conceitos gerais desses algoritmos estão definidos nos tópicos a seguir.

4.2

Algoritmos Genéticos

A teoria da evolução de Charles Darwin proposta em seu livro “A origem das espécies” em 1859 é intrinsicamente um mecanismo de busca e otimização, seguindo o princípio de “sobrevivência do mais apto”.

Esta teoria propõe que as plantas e animais que existem hoje são o resultado de mi- lhões de anos de adaptação às exigências do ambiente. Em dado momento, um número de organismos diferentes podem coexistir e competir pelos mesmos recursos em um ecossis- tema, recursos como água, comida e abrigo, por exemplo. Também na mesma espécie, os indivíduos competem para atrair parceiros para reprodução. Os organismos que são mais capazes de adquirir recursos e procriar com sucesso são aqueles cujos descendentes tendem a ser numerosos no futuro. Organismos que são menos aptos, por qualquer razão, tendem a ter poucos ou nenhum descendente no futuro e esta descendência reduzida faz com que a probabilidade de ter seus genes propagados ao longo de sucessivas gerações seja menor. Também pode-se notar que durante a reprodução, uma recombinação das boas característi-

4.2 Algoritmos Genéticos 44 cas de cada ancestral pode produzir descendentes “melhor ajustados” cuja aptidão é maior que a dos pais por combinar características positivas de cada um dos reprodutores. Com o tempo, toda a população do ecossistema tende a evoluir para conter organismos que, em média, estão mais aptos do que os de gerações anteriores da população, porque eles apresentam mais características que tendem a promover a sobrevivência (SIVANANDAM; DEEPA, 2008).

Sendo assim, a seleção natural é apresentada como um processo de garantir a conti- nuidade de uma espécie, favorecendo os indivíduos que melhor se adaptam ao meio. Vale salientar que no caso da reprodução bissexuada as características físicas do descendente não foram transmitidas só pelos progenitores diretos, um indivíduo bem adaptado a uma função não terá com um alto grau de probabilidade um descendente adaptado a essa mesma função. Não é a adaptação que cria a evolução mas sim que a mantém, os descendentes não geram necessariamente outros descendentes mais aptos, mas sim uma população de des- cendentes dos quais os que apresentam melhores características de adaptação sobrevivem, é portanto a sobrevivência dos mais aptos o motor da evolução (SEIXO, 2003).

Estes princípios são abstraídos em técnicas de Computação Evolucionária através de algoritmos evolucionários que podem ser usados para procurar as melhores soluções para um problema. Em um algoritmo de busca, um número de soluções possíveis para um pro- blema estão disponíveis e a tarefa é encontrar a melhor solução possível em um determinado período de tempo. Para um espaço de busca com apenas um pequeno número de soluções possíveis, todas as soluções podem ser examinadas em uma quantidade razoável de tempo e uma solução ótima ser encontrada. Esta pesquisa exaustiva, porém, rapidamente se torna impraticável quando o espaço de busca cresce de tamanho (SIVANANDAM; DEEPA, 2008).

Dessa forma, os algoritmos evolucionários usam modelos computacionais dos processos naturais de evolução como uma ferramenta para resolver problemas. Apesar de haver uma grande variedade de modelos computacionais propostos, todos eles têm em comum o conceito de simulação da evolução das espécies através de seleção, reprodução e mutação, processos estes que dependem do desempenho dos indivíduos da espécie dentro do ambiente (LINDEN, 2006).

4.2 Algoritmos Genéticos 45 truturas que evoluem de forma semelhante à evolução das espécies. Cada indivíduo é ava- liado enquanto solução do problema em questão, e baseado nesta avaliação serão aplicados os operadores genéticos, como reprodução e mutação, de forma a simular a sobrevivência do mais apto. O comportamento básico dos algoritmos evolucionários, portanto, consiste em buscar dentro da atual população aquelas soluções que possuem as melhores carac- terísticas e tentar combiná-las de forma a gerar soluções ainda melhores, repetindo este processo até que tenha se passado tempo suficiente ou que se tenha obtido uma solução satisfatória para o problema (LINDEN, 2006).

A principal diferença entre os algoritmos tradicionais e os algoritmos evolucionários é que estes são baseados em população. Através da adaptação de gerações sucessivas de um grande número de indivíduos, um algoritmo evolucionário realiza uma eficiente busca direcionada.

Em 1975, John Henry Holland em seu livro “Adaptação em sistemas naturais e artifici- ais” descreveu como aplicar os princípios da evolução natural para problemas de otimização e construiu o primeiro Algoritmo Genético, propondo um modelo heurístico computacional que quando implementado poderia oferecer boas soluções para problemas extremamente difíceis que eram insolúveis computacionalmente até aquela época. A teoria de Holland foi desenvolvida e agora os Algoritmos Genéticos apresentam-se como uma poderosa fer- ramenta para resolver problemas de busca e otimização.

Algoritmos genéticos são, portanto, métodos computacionais de otimização que tra- balham com um conjunto de soluções possíveis para um dado problema, onde cada uma dessas possíveis soluções é chamada de cromossomo. Um cromossomo é uma estrutura de dados que codifica uma solução para o problema, ou seja, representa um ponto no espaço de busca. O processo de otimização usando AG visa o melhoramento dessas soluções com o passar do tempo de acordo com um objetivo determinado, função objetivo, função de aptidão ou ainda critério de avaliação.

Os algoritmos genéticos empregam uma estratégia de busca paralela e estruturada, embora aleatória, direcionada à busca de pontos de alta aptidão, ou seja, pontos nos quais a função a ser minimizada ou maximizada tem valores relativamente baixos ou altos (CARVALHO; BRAGA; LUDERMIR, 2002).

4.2 Algoritmos Genéticos 46 Os componentes básico de um algoritmo genético são descritos a seguir:

1. Fluxo Básico

O fluxo básico são os passos que devem ser seguidos para a execução do algoritmo. O fluxo básico de um algoritmo genético simples pode ser visto no Algoritmo 3. Algoritmo 3 Fluxo básico de um algoritmo genético simples

Seja S(t) uma população de cromossomos na geração t; t ← 0;

3: Inicializar S(t);

Avaliar S(t);

while o critério de parada não for satisfeito do

6: t ← t + 1;

Selecionar S(t) a partir de S(t − 1); Aplicar operadores genéticos sobre S(t);

9: Avaliar S(t);

end while

Retornar melhor solução encontrada.

Os algoritmos genéticos são iterativos, a cada iteração, também chamada de geração, a população de soluções candidatas vai sendo modificada.

2. Representação Cromossômica

O primeiro passo para aplicação de um algoritmo genético a um determinado pro- blema é representar cada possível solução x no espaço de busca como uma sequência de símbolos s gerados a partir de um dado alfabeto finito A. Nos casos mais simples, usa-se o alfabeto binário A = {0, 1}, mas de forma geral, o alfabeto depende de cada problema (TANOMARU, 1995).

Fazendo uma analogia com sua inspiração biológica, cada sequência de símbolos s corresponde a um cromossomo e cada elemento de s é equivalente a um gene. Cada gene pode assumir qualquer valor do alfabeto A.

A maioria dos AG propostos na literatura usam uma população de número fixo de indivíduos, cromossomos, em que cada cromossomo também tem tamanho constante, porém isso não é uma regra, podendo variar de acordo com o problema.

4.2 Algoritmos Genéticos 47 3. Inicialização

Após definida a representação cromossômica, o algoritmo genético deve gerar um conjunto inicial de soluções candidatas para o problema, conhecido como população inicial. Esta população inicial pode ser definida aleatoriamente ou através de um processo heurístico.

Um ponto importante na definição da população inicial é que ela deve cobrir a maior área possível do espaço de busca, ou seja, tem que haver uma diversidade de elemen- tos.

4. Avaliação

A avaliação é responsável por verificar o desempenho da população de soluções, vi- sando um determinado objetivo. Ou seja, a avaliação verifica quão perto da solução ótima estão os elementos da população.

Este processo de avaliação é realizado por uma função chamada função de aptidão ou função objetivo e é definida de acordo com o problema a ser resolvido, levando em consideração todos os fatores que são determinantes na solução do problema. 5. Seleção

Neste passo, o algoritmo genético seleciona, a partir da avaliação feita anteriormente, os indivíduos mais aptos para continuar o processo genético. Esse indivíduos são colocados em uma população temporária, onde são chamados de pais. Essa população será responsável pela formação dos indivíduos da próxima geração, filhos.

Esse processo de seleção emprega funções que utilizam probabilidade para escolher os indivíduos da população temporária. Dessa forma, quanto mais apto for o indivíduo, de acordo com a avaliação feita anteriormente, maior será a probabilidade dele ser escolhido para formar a próxima geração.

Alguns métodos utilizados para seleção são apresentados a seguir:

• Método da Roleta: Esse é um dos métodos mais simples e mais utilizados para a seleção dos indivíduos da população temporária. Os indivíduos de uma ge- ração são selecionados através de um procedimento semelhante ao das roletas utilizadas em jogos de azar. Cada indivíduo é representado na roleta por uma

4.2 Algoritmos Genéticos 48 fatia proporcional ao valor retornado pela função de avaliação, dessa forma, os indivíduos mais aptos ocupam fatias maiores na roleta, enquanto indivíduos de aptidão mais baixa ocupam fatias menores (CARVALHO; BRAGA; LUDERMIR,

2002). A Figura 4.4 ilustra uma roleta formada a partir dos valores de apti- dão de uma população com cinco soluções candidatas. Na prática, os valores retornados pela função de avaliação de cada solução serão somados sendo uma parcela dessa soma atribuída a cada solução, de acordo com sua aptidão. A partir daí serão sorteados números aleatórios no intervalo da roleta, selecionado o indivíduo que contém o número sorteado em seu intervalo dentro da roleta. Esse procedimento é repetido a quantidade de vezes necessária para formar a população temporária.

Figura 4.4: Ilustração de uma roleta formada a partir dos valores de aptidão de uma população com cinco soluções candidatas

• Método do Torneio: Neste método, n indivíduos da população são escolhidos aleatoriamente, com a mesma probabilidade. O cromossomo com maior aptidão dentre estes n cromossomos é selecionado para a população temporária. O processo se repete até que a população temporária seja preenchida (CARVALHO; BRAGA; LUDERMIR, 2002). Uma das variantes deste método muito utilizada é

o torneio binário, onde n = 2, como mostra a Figura 4.5.

• Elitismo: A utilização deste método permite que os n indivíduos mais aptos de uma geração sejam mantidos para a próxima geração.

4.2 Algoritmos Genéticos 49

Figura 4.5: Ilustração do método de torneio binário 6. Operadores Genéticos

Os operadores genéticos são responsáveis por formar os indivíduos que constituirão a geração seguinte. A partir desses operadores, os elementos da população temporária, pais, irão se modificar e criar novos elementos, possivelmente com maior adequabili- dade. Os principais operadores genético utilizados na literatura são a recombinação e a mutação.

A recombinação determina a troca de fragmentos entre pares de cromossomos. Seu funcionamento é dado da seguinte maneira: dado dois elementos selecionados, escolhe- se um ou mais pontos de troca nesses elementos e os fragmentos dos cromossomos a partir do ponto selecionado serão trocados, como está ilustrado na Figura 4.6. O método de recombinação utilizando um único ponto de troca é conhecido por Cru- zamento de um-ponto (single point crossover) e é uma das formas mais utilizadas.

Figura 4.6: Recombinação de um par de cromossomos com 2 pontos de troca A recombinação, também chamada de crossover, é aplicada com uma dada proba- bilidade. Essa probabilidade, chamada de taxa de recombinação, varia entre 60% e 90%. Não ocorrendo a recombinação, os filhos serão iguais aos pais, permitindo

4.2 Algoritmos Genéticos 50 que algumas soluções sejam preservadas. Isso pode ser implementado gerando um número aleatório no intervalo [0, 1]. Assim, a recombinação ocorrerá se o número gerado for menor que a taxa de recombinação (LACERDA; CARVALHO, 1999).

A mutação, por sua vez, modifica o gene do cromossomo para um outro valor dentro do alfabeto definido na representação cromossômica. Esse processo também é pro- babilístico, ou seja, trabalha com a probabilidade de um certo gene sofrer ou não mutação.

Figura 4.7: Mutação de um cromossomo

A mutação ocorre da seguinte maneira: escolhe-se um cromossomo qualquer, consulta todos os genes do cromossomo, verificando se o mesmo deve ou não sofrer mutação, essa verificação é feita por um processo probabilístico semelhante ao processo de recombinação, ou seja gera-se um valor aleatoriamente entre 0 e 1, se o valor gerado for menor que a taxa de mutação troca-se o valor do gene, como mostra a Figura 4.7. A mutação melhora a diversidade dos cromossomos na população, no entanto, destrói informações contidas no mesmo. Por isso, deve ser utilizada uma taxa de mutação pequena, normalmente entre 0,1% e 5% (LACERDA; CARVALHO, 1999).

Alguns do operadores de mutação mais comuns são:

• Mutação por alternância de bit (bit flip mutation): Este método é muito uti- lizado em aplicações onde a codificação do cromossomo é binária, nesse caso o bit é simplesmente invertido, se possuía valor 0, passa a ser 1 e vice-versa. • Mutação uniforme: Esse método, por sua vez, é utilizado quando a codificação

do cromossomo não é binária, quando é real, por exemplo. Neste caso, um novo valor do alfabeto definido é designado ao gene de forma aleatória.

4.3 Colônia de Formigas 51 7. Condição de Parada

A condição de término ou condição de parada informa quando o algoritmo genético deve parar a sua execução. Por ser um problema de otimização, o ideal é que o algoritmo termine quando o ponto ótimo for encontrado. Porém, na maioria dos casos, não se pode afirmar com certeza que um dado ponto corresponde a um ótimo global. Pode-se utilizar os seguintes critérios como condição de término:

• Número máximo de iterações; • Tempo limite de processamento;

• Estagnação, ou seja, não ocorre mais melhorias na população de soluções do problema.

4.3

Colônia de Formigas

A Otimização por colônia de formigas (DORIGO, 1992) emprega uma heurística cons-

trutiva para procurar soluções aproximadas para problemas de otimização. Uma heurística construtiva é aquela onde as soluções são construídas elemento a elemento, seguindo algum critério até que se tenha uma solução viável.

O modelo de otimização por colônia de formigas é inspirado no comportamento das formigas ao saírem de sua colônia para buscar comida. Esse procedimento se dá da seguinte forma: As formigas saem em busca de alimento inicialmente de maneira aleatória, quando uma formiga encontra comida ela deixa um rastro de uma substância química chamada feromônio no caminho de volta para a colônia. As demais formigas tendem a seguir esse rastro de encontro ao alimento, reforçando-o quando voltam à colônia, este processo está ilustrado na Figura 4.8. Quando o alimento acaba, as trilhas não são remarcadas pelas formigas que voltam e o cheiro se dissipa. Novas rotas são, então, procuradas, reiniciando o ciclo de busca.

As formigas tendem a seguir as rotas mais fortemente marcadas por feromônio, sendo assim, se duas formigas encontraram duas rotas distintas para um mesmo ponto onde existe comida, a rota mais curta terá maior probabilidade de ser seguidas pelas demais, já que

4.3 Colônia de Formigas 52

4.3 Colônia de Formigas 53 uma formiga percorre ida e volta a rota curta no mesmo tempo que outra formiga realiza apenas o percurso de ida na rota longa. Logo, será depositado mais feromônio na rota mais curta, o que atrairá mais formigas, como pode ser visto na Figura 4.9.

Figura 4.9: Rotas para comida

A otimização por colônia de formigas ocorre da seguinte forma: Uma população com m formigas é inicializada e cada k formiga, onde k = 1, ..., m, deve construir uma solução a cada iteração. A solução representa, no contexto de colônia de formigas, o caminho entre a colônia e a comida, e cada elemento da solução representa um passo nesse caminho.

No contexto metaheurístico, pode-se entender o espaço de busca como um grafo, onde cada nó é um elemento que pode compor a solução da formiga, sendo assim, a solução começa por um elemento aleatório no espaço de busca e o próximo elemento a ser agregado à solução da formiga depende da probabilidade de que cada elemento do espaço de busca tem de ser selecionado naquele momento. Essa probabilidade depende de uma informação heurística referente ao problema tratado e da quantidade de feromônio armazenada em