• Aucun résultat trouvé

Os algoritmos genéticos (AGs) são abordagens de busca probabilística semi-aleatória baseada na teoria de evolução de Charles Darwin. Assim, é inspirado pelo mecanismo de seleção natural, um processo biológico no qual os indivíduos mais fortes possuem maior chance de sobreviver em um ambiente competitivo. Os indivíduos selecionados produzem uma nova geração e, conseqüentemente, as características hereditárias da espécie são repassadas para essa nova geração, visando-se a preservação das qualidades adquiridas. Esses métodos operam com conjuntos de candidatos, chamados de população. Cada indivíduo na população, denominado cromossomo, representa uma solução do problema codificado. Os valores que compõem um indivíduo são denominados genes. Estes genes são constantemente modificados utilizando princípios básicos da evolução natural das espécies: seleção,

cruzamento (crossover) e mutação, fazendo com que estes sofram alterações de uma geração

para outra. Estes princípios tentam representar a competição onde os indivíduos mais aptos reproduzem e repassam seu material genético às gerações futuras, e os indivíduos menos aptos tendem a desaparecer da população (DEB, 2001).

O método foi desenvolvido por HOLLAND (1975) na Universidade de Michigan e popularizado por um de seus alunos, GOLDBERG (1989), que apresentou a solução de problemas complexos de engenharia usando os algoritmos genéticos.

Fazendo uma analogia com o processo da evolução natural, as soluções candidatas são denominadas indivíduos, também referidos na literatura como cromossomos, cadeia de

valores de parâmetros ou cadeias binárias (HAUPT; HAUPT, 1998; DEB, 2001).

Resumidamente, o procedimento é o seguinte: define-se os parâmetros de otimização e a função objetivo, em seguida faz-se codificação dos parâmetros, efetua-se uma seqüência repetitiva de procedimentos que consistem em avaliar, selecionar, recombinar e modificar os indivíduos, gerando, assim, novas populações. Esses procedimentos são efetuados com base na aptidão de cada solução, em que indivíduos com melhores aptidões terão uma maior probabilidade de serem selecionados para o processo de cruzamento, passando assim parte

70 dos seus genes a seus descendentes. Cada iteração desse processo recebe o nome de geração. A finalização é realizada através de testes de convergência, sendo que um número máximo de gerações deve sempre ser estabelecido. O melhor indivíduo será adotado como solução do problema.

A codificação dos parâmetros da função objetivo pode ser expressa por bits (binária) ou por parâmetros contínuos (números reais ou pontos flutuantes). Nesta seção, é apresentado o algoritmo genético binário, a fim de facilitar a compreensão dos algoritmos genéticos clássicos, sendo citados alguns aspectos que os diferem dos algoritmos com parâmetros contínuos. Na codificação real, a representação de um cromossomo d com n parâmetros, dados por p1, p2,..., pn, é escrito como um vetor com 1 × n elementos, tal que:

cromossomod = [p1, p2, ..., pn] (5.7)

Na Eq.(5.7) cada parâmetro é representado por um número real. No algoritmo genético binário, a codificação de um cromossomo d que possui n parâmetros com, por exemplo, 5 bits cada é apresentada na Fig. 5.4.





1 1 1 1 1 1 1 1

00101

01010

01100

11010

x gene x gene x gene x gene d

cromossomo

Figura 5.4 - Representação de um cromossomo com n genes de 5 bits cada

Cada gene representa uma variável da função objetivo. Os bits zeros e uns da cadeia binária correspondem aos alelos da genética. O número total de bits de um cromossomo é dado por Σmi,i=1,..., n, onde mi é o comprimento do gene i. Este comprimento depende da

precisão requerida para o problema e da amplitude do intervalo definido pelas restrições laterais, podendo ser obtido por:

sup inf i i i 2 x x m = log precisão        (5.8)

71 A decodificação pode ser feita conforme a Eq.(5.9) generalizada. Os tamanhos dos genes podem ser diferentes, pois dependem das restrições laterais.

1 2 inf sup 2 inf    i m i i i i i x x gene decimal + x = x , i = 1, ..., (5.9) onde

pi i p i = bit gene

decimal 2 2 é o valor decimal da variável, sendo bitpi o bit

correspondente à posição pi do gene i.

Tanto a evolução biológica quanto os algoritmos genéticos começam com uma população inicial, constituída por Np indivíduos, gerada aleatoriamente. Com a população inicial definida, calcula-se a função objetivo, que é geralmente referida na literatura, como

função de avaliação (fitness) ou função custo. Esta função associa um valor numérico,

conhecido como grau de adaptação, a cada indivíduo da população. Quando possível esta função deve ser de cálculo rápido, uma vez que ela deve ser avaliada para todos os indivíduos da população, o que tende a elevar o esforço computacional.

Os procedimentos básicos que transformam a população ao longo das gerações em busca da solução do problema de otimização caracterizam os operadores genéticos: seleção,

cruzamento e mutação. Na prática, tem-se verificado que a consistência de um AG é garantida

por estes três operadores (HAUPT; HAUPT, 1998). Uma descrição destes operadores é dada a seguir.

5.2.1- Seleção (Reprodução)

Este operador determina quais indivíduos serão escolhidos para o cruzamento. O grau de adaptação de cada cromossomo é caracterizado de acordo com o valor da função custo. Em um problema de maximização, por exemplo, quanto maior este valor, maior a probabilidade de contribuir à geração seguinte. Existem vários mecanismos para executar o operador seleção (DeJONG, 1975; GOLDBERG, 1989).

Na seleção elitista os melhores indivíduos de uma população intermediária são escolhidos. Para obter a população intermediaria escolhe-se a metade da população de uma geração que corresponde aos indivíduos mais aptos, sendo a outra metade eliminada. Desse

72 modo o cruzamento é realizado com os melhores indivíduos e espera-se que a convergência do algoritmo se torne mais rápida.

Na seleção aleatória, como indica o próprio nome, os indivíduos de uma população intermediária são selecionados aleatoriamente para o posterior cruzamento.

Na seleção por torneio dois indivíduos são escolhidos aleatoriamente, a seguir gera-se um número aleatório rand ∈ [0, 1]. Se rand for menor que um parâmetro previamente definido, que determina o quanto este operador será elitista, o melhor indivíduo é escolhido, senão o outro sobreviverá.

Outra forma de fazer a seleção é através do método da Roleta (roulette wheel), no qual a probabilidade de seleção de um indivíduo é diretamente proporcional ao valor da função custo. Em seguida, a roleta, devidamente dividida, é girada e seleciona-se os indivíduos através deste sorteio. Logicamente, os indivíduos com maior participação na roleta apresentam maiores chances de serem selecionados. A cada rodada da roleta, um novo subconjunto é formado. Segundo SOARES (1997) o método da roleta possibilita a ocorrência de uma convergência prematura. GOLDBERG (1989) cita também a tentativa de redução dos erros estocásticos fornecidos pelo método da roleta com a utilização de métodos alternativos, como os citados anteriormente. Copiar um indivíduo conforme sua aptidão significa que indivíduos com valores maiores têm uma probabilidade maior de contribuir com um ou mais descendentes na próxima geração.

Para a representação gráfica na roleta, conforme Fig. 5.5, multiplica-se esta razão por 360 graus.

Figura 5.5 - Exemplo da seleção por roleta

A seguir, devem-se selecionar as cadeias que irão contribuir para a geração seguinte. Gera-se um conjunto de números aleatórios rand ∈ [0, 1] em quantidade igual ao número de indivíduos da população. Por exemplo, se rand < Pa1, seleciona-se o primeiro cromossomo,

senão, passar para o indivíduo subseqüente e fazer a análise novamente.

0,5 2 1 4 3 0,75 0,25 0 1 0,5 2 1 4 3 0,75 0,25 0 1

73 No processo de seleção, observa-se que alguns cromossomos podem ser selecionados mais de uma vez, ou seja, os melhores serão copiados mais vezes, enquanto que os piores não sobreviverão.

5.2.2- Cruzamento (Crossover)

Nos sistemas biológicos o cruzamento pode ocorrer durante a reprodução sexuada permitindo a troca de material genético entre dois indivíduos. O algoritmo genético utiliza os cromossomos determinados no processo de seleção para gerarem novos descendentes. Este operador é a primeira forma do algoritmo explorar o espaço de busca e evitar uma convergência prematura, ou seja, evitar ótimos locais (HAUPT; HAUPT, 1998; BRAGA, 1998).

A forma mais simples de cruzamento envolve dois pais que irão produzir dois descendentes. A quantidade de cromossomos da população a ser submetida ao cruzamento é definida através da probabilidade de cruzamento Pc, fornecida pelo usuário. É bastante usual adotar para esta probabilidade Pc= 60%.

O processo de escolha dos indivíduos que serão cruzados deve ser feito em pares, gerando números aleatórios randd∈ [0, 1], d = 1,..., Np. Por exemplo, se rand1 for menor que

a probabilidade Pc, então o primeiro cromossomo da população será selecionado. Desta forma, um cromossomo d é selecionado para o cruzamento se randd < Pc. A posição de

cruzamento é selecionada entre o primeiro e o último bit dos cromossomos paternos. Uma maneira de selecionar esta posição é descrita a seguir:

Seja pc a posição de cruzamento na cadeia binária de cada cromossomo, dada

conforme a Eq.(5.10).

pc = 1 + rand [(Σmi – 1) – 1] (5.10)

onde rand é um número aleatório no intervalo [0, 1] e Σmi,i = 1,..., n, é a quantidade de bits

do cromossomo, que também representa a posição do último bit no cromossomo.

Cada cadeia é quebrada na posição pc e todas as informações de um cromossomo,

compreendidas entre as posições pc + 1 e Σmi, são copiadas para o outro cromossomo e vice-

74

Figura 5.6 - Representação do operador cruzamento simples entre dois indivíduos

No caso contínuo, o modo mais simples é escolher um ou mais pontos no cromossomo e indicá-los como posições de cruzamento. As posições onde deve ocorrer o cruzamento são selecionadas aleatoriamente e conforme a Fig. 5.7, percebe-se nos descendentes uma combinação dos parâmetros de ambos os pais.

Figura 5.7 - Representação do operador cruzamento uniforme com parâmetros contínuos

Existem outros tipos de cruzamento que podem ser vistos na literatura (HAUPT; HAUPT, 1998; MICHALEWICZ, 1996; ESHELMAN e SCHAFFER, 1993).

5.2.3- Mutação

O próximo estágio de um AG é a operação de mutação (operador genético secundário) que modifica aleatoriamente os genes de um indivíduo através de uma taxa (ou probabilidade) de mutação. É uma modificação aleatória do material genético dos indivíduos, ou seja, é a alteração de pequenas percentagens nos bits dos cromossomos. Sendo outra forma do algoritmo genético explorar a região de busca. Este operador introduz maior aleatoriedade dentro da população para esta escapar de mínimos (ou máximos) locais, ou seja, introduz características que não dependem da população original aumentando a diversidade da população, podendo evitar que algoritmo convirja prematuramente.

Uma estratégia usual é a mutação de ponto único, que modifica o bit “1” para “0” e vice versa em determinadas posições do cromossomo, conforme Fig. 5.8. Os pontos de mutação são selecionados aleatoriamente em uma matriz Np × Σmi, i = 1,..., n, que representa

o número total de bits da população. Aumentar o número de mutações aumenta a liberdade do algoritmo em buscar soluções fora do espaço de busca, para evitar isso, usualmente faz-se mutação de 1% a 5% do total de bits por iteração. Esta mutação não se aplica aos melhores indivíduos, pois são considerados de elite.

75

Figura 5.8 - Representação do operador mutação

Uma forma de realizar a mutação é gerar pares aleatórios (A, B), onde A representa o cromossomo a sofrer a mutação e B representa a posição do bit a ser mudado. Outra forma é selecionar aleatoriamente a posição em um cromossomo, obedecendo a uma probabilidade de

mutação Pm (também conhecida como taxa de mutação), e mudar o valor do bit. Neste caso, é

necessário gerar números randômicos rand no intervalo [0, 1] em mesma quantidade de bits total da população, representando a posição seqüencial de cada bit na matriz populacional. Para os casos onde rand for menor que a probabilidade Pm serão feitas as mutações nos bits

correspondentes. Geralmente, recomenda-se usar Pm igual a 1%. (HAUPT; HAUPT, 1998).

Na representação real, a probabilidade de mutação adequada está entre 1% e 20%. O parâmetro que sofre mutação é substituído por um novo parâmetro gerado aleatoriamente. Depois de realizadas as mutações, os custos associados aos descendentes e aos cromossomos que sofreram mutações são calculados, compondo a próxima geração.

Para problemas que envolvem ordenação e permutação, o operador mutação deve evitar que haja repetição de variáveis num mesmo indivíduo. Uma troca que ocorre com certa probabilidade pode ser aplicada e, a partir da escolha de duas variáveis, troca-se as posições de ambas.

De acordo com FILHO et al. (1994), tem sido introduzido um número de diferentes operadores genéticos desde que Holland propôs seu modelo básico. Eles são, em geral, versões do cruzamento e alteração dos processos genéticos adaptados às necessidades de problemas específicos. Alguns exemplos são: inversão, dominância e “genetic edge

recombination”.