• Nenhum resultado encontrado

Um algoritmo gen´etico funciona atrav´es de uma s´erie de passos. Pode ser descrito algoritmi- camente da seguinte maneira [8, 43, 46]:

1. Inicializa-se a popula¸c˜ao de cromossomos; 2. Avalia-se cada cromossomo na popula¸c˜ao;

3. Seleciona-se os pais para gerar novos cromossomos. Aplica-se os operadores de crossover e muta¸c˜ao a estes pais de forma a gerar os indiv´ıduos da nova gera¸c˜ao;

4. Apaga-se os velhos membros da popula¸c˜ao;

6. Se algum crit´erio de parada foi satisfeito, retorne o melhor cromossomo, caso contr´ario volte para o passo 3.

Na Figura 4.1 ´e ilustrado o funcionamento de um algoritmo gen´etico.

4.4.1

Representa¸c˜ao cromossomial

A representa¸c˜ao cromossomial consiste basicamente em traduzir a informa¸c˜ao do problema que deseja-se resolver em uma forma vi´avel de ser tratada pelo computador. O tipo mais comum de representa¸c˜ao ´e atrav´es de uma string de bits. Entretanto, existem muitos tipos diferentes de representa¸c˜ao, como por meio de parˆametros de valores reais, permuta¸c˜oes, ´arvores hier´arquicas, entre outros [8, 46].

Vale notar que a representa¸c˜ao cromossomial ´e completamente arbitr´aria, ficando sua defini¸c˜ao de acordo com a escolha do programador. ´E interessante apenas que algumas regras gerais sejam seguidas [8]:

ˆ A representa¸c˜ao deve ser a mais simples poss´ıvel;

ˆ Se houver solu¸c˜oes proibidas ao problema, elas n˜ao devem ter uma representa¸c˜ao;

ˆ Se o problema impuser condi¸c˜oes de algum tipo, estas devem estar impl´ıcitas dentro da representa¸c˜ao.

4.4. Funcionamento de um algoritmo gen´etico 37

4.4.2

Fun¸c˜ao de avalia¸c˜ao

A fun¸c˜ao de avalia¸c˜ao ou fitness ´e a ´unica liga¸c˜ao verdadeira do programa com o problema real. Essa fun¸c˜ao ´e justamente a fun¸c˜ao que se deseja otimizar. Dependendo do objetivo, minimiza¸c˜ao ou maxima¸c˜ao de uma fun¸c˜ao, o algoritmo deve selecionar os indiv´ıduos com as maiores ou menores avalia¸c˜oes. Por exemplo, pode-se desejar a maxima¸c˜ao da seguinte fun¸c˜ao:

f (x) = x + | sin(32x)|, 0 ≤ x < π. (4.1) Os candidatos a solu¸c˜ao s˜ao os valores de x, que podem ser codificados como strings de bits, representando um n´umero real. O c´alculo do fitness traduz uma strings de bits em um n´umero real x e ent˜ao determina o valor da fun¸c˜ao para esse n´umero. Portanto, o fitness de um indiv´ıduo ser´a o valor da fun¸c˜ao que se deseja otimizar para o valor codificado por esse indiv´ıduo [43].

N˜ao ´e necess´ario que a fun¸c˜ao de avalia¸c˜ao seja uma fun¸c˜ao real a coeficientes reais. Ela pode ser uma fun¸c˜ao discreta ou at´e mesmo uma fun¸c˜ao de inteiros [8].

A fun¸c˜ao de avalia¸c˜ao deve ser escolhida com cuidado. Ela deve embutir todo o conhecimento que se possui sobre o problema a ser resolvido, tanto as suas restri¸c˜oes quanto seus objetivos de qualidade [8].

4.4.3

Sele¸c˜ao de pais

O m´etodo de sele¸c˜ao de pais deve tentar simular o mecanismo de sele¸c˜ao natural que atua sobre as esp´ecies biol´ogicas, em que os pais mais capazes geram mais filhos, mas mesmo os pais menos aptos tamb´em podem gerar descendentes [8]. Existem v´arios m´etodos para realizar a sele¸c˜ao dos pais [46].

At´e mesmo dentro dos algoritmos gen´eticos de Holland, existem diversas possibilidades. Se uma reprodu¸c˜ao com enfase ´e usada ent˜ao a probabilidade de um indiv´ıduo ser escolhido ´e uma fun¸c˜ao de sua avalia¸c˜ao. Um meio direto de se fazer isso pode ser usando os valores de avalia¸c˜ao total de todos os indiv´ıduos da popula¸c˜ao de pais e calcular a probabilidade de cada indiv´ıduo de ser selecionado dividindo sua avalia¸c˜ao pela a avalia¸c˜ao total. Uma das propriedades de se usar esse m´etodo ´e que o algoritmo gen´etico ir´a se comportar de forma diferente em fun¸c˜oes que pare¸cam equivalentes de um ponto de vista de otimiza¸c˜ao, como y = ax2 e y = ax2+ b. Se o valor de b ´e maior que as diferen¸cas produzidas pelo termo ax2, ent˜ao as diferen¸cas nas probabilidades para sele¸c˜ao dos indiv´ıduos da popula¸c˜ao ser´a pequena e a press˜ao seletiva ser´a fraca. Isso geralmente acontece quando a popula¸c˜ao converge para um n´umero pequeno de valores. Uma maneira de se evitar isso ´e por meio do escalonamento da fun¸c˜ao de avalia¸c˜ao, tipicamente para o pior indiv´ıduo da popula¸c˜ao. Assim a medida da avalia¸c˜ao usada para calcular a probabilidade de sele¸c˜ao de um indiv´ıduo n˜ao ´e o valor de avalia¸c˜ao absoluto desse indiv´ıduo, mas uma avalia¸c˜ao relativa ao pior indiv´ıduo da popula¸c˜ao [46].

Embora o escalonamento possa eliminar o problema da falta de press˜ao seletiva, geralmente algoritmos gen´eticos usando esse m´etodo sofrem do problema oposto: muita press˜ao seletiva. Se um indiv´ıduo for determinado como muito melhor do que outro, a probabilidade de sele¸c˜ao desse indiv´ıduo ser´a bastante alta, especialmente se o escalonamento para o pior for usado. Existir´a o problema que muitas c´opias desse indiv´ıduo sejam colocadas no buffer de procria¸c˜ao e ele

ir´a se tornar a maior parte da popula¸c˜ao, resultando em uma convergˆencia prematura. Um meio de contornar isso ´e usar sele¸c˜ao por classifica¸c˜ao. Os indiv´ıduos da popula¸c˜ao dos pais s˜ao classificados e a probabilidade de sele¸c˜ao ´e uma fun¸c˜ao linear dessa classifica¸c˜ao [46].

Um m´etodo popular de se realizar a sele¸c˜ao ´e por meio de um torneio. Um pequeno subconjunto dos indiv´ıduos s˜ao escolhidos aleatoriamente e ent˜ao o melhor indiv´ıduo nesse conjunto ´e selecionado pelo buffer de procria¸c˜ao. A sele¸c˜ao por torneio, assim como a sele¸c˜ao por classifica¸c˜ao, ´e menos suscet´ıvel a convergˆencia prematura e a press˜ao seletiva pode ser controlada pelo ajuste do tamanho do subconjunto usado [46].

Outro m´etodo de sele¸c˜ao utilizado pelos algoritmos gen´eticos ´e conhecido como ”estrat´egia elitista”. Nesse m´etodo ´e mantida uma c´opia do melhor indiv´ıduo encontrado. Sendo que o melhor membro da popula¸c˜ao dos pais e um dos membros da popula¸c˜ao dos filhos s˜ao escolhidos. Ent˜ao o melhor pai ir´a substituir o filho escolhido [46].

4.4.4

Operadores de crossover e muta¸c˜ao

Os algoritmos gen´eticos usam uma combina¸c˜ao de sele¸c˜ao com algum mecanismo para produzir varia¸c˜oes. A muta¸c˜ao ´e o melhor mecanismo conhecido para produzir varia¸c˜oes, em que um alelo ´e aleatoriamente trocado por outro. Se uma representa¸c˜ao bin´aria ´e usada, ent˜ao o operador de muta¸c˜ao simplesmente troca o valor do bit de forma aleat´oria. Normalmente, usa-se uma taxa de muta¸c˜ao de um para a extens˜ao da string [46].

Embora na maioria dos algoritmos gen´eticos, a muta¸c˜ao ´e usada junto com o crossover, o operador de muta¸c˜ao ´e geralmente tratado como se fosse o operador b´asico para assegurar que a popula¸c˜ao consistir´a de diversos conjuntos de alelos que possam ser explorados pelo operador de crossover. Muitos problemas de otimiza¸c˜ao podem ser resolvidos utilizando-se apenas o operador de muta¸c˜ao. Isso n˜ao significa que o operador de crossover n˜ao seja ´util, mas que n˜ao se deva desprezar o operador de muta¸c˜ao [46].

O operador de crossover trabalha da seguinte forma: dados dois indiv´ıduos altamente adaptados, o que se quer ´e criar um novo indiv´ıduo que combine as melhores caracter´ısticas de cada um. Como n˜ao se sabe quais caracter´ısticas que confere a esses indiv´ıduo uma alta avalia¸c˜ao, o que se pode fazer ´e combinar o c´odigo gen´etico dos dois de forma aleat´oria. O que o operador de crossover faz ´e tratar as caracter´ısticas como blocos de constru¸c˜ao dispersos pela popula¸c˜ao e tentar recombin´a-las em indiv´ıduos melhores. Algumas vezes, o crossover ir´a combinar as piores caracter´ısticas dos dois pais, nesse caso o filho n˜ao ir´a sobreviver por muito tempo. Mas algumas vezes, esse operador ir´a recombinar as melhores caracter´ısticas de dois indiv´ıduos, criando indiv´ıduos ainda melhores [46].

Suponha que a representa¸c˜ao dos indiv´ıduos ´e uma string de bits de tamanho L. Um algoritmo gen´etico cria novos indiv´ıduos via crossover escolhendo duas strings para fazerem parte da popula¸c˜ao de pais, alinha eles e ent˜ao cria dois novos indiv´ıduos trocando-se os bits aleatoriamente entre as strings. No crossover de um ponto ´e escolhido aleatoriamente um posi¸c˜ao na string e todos os bits ap´os esse local s˜ao permutados entre os pais. Existe tamb´em o crossover de dois pontos em que s˜ao escolhidos dois locais para se fazer a permuta¸c˜ao de material gen´etico entre os dois pais. Existem in´umeras outras formas de se realizar o crossover, como o crossover uniforme. Nesse tipo de crossover uma sequˆencia de bits s˜ao permutados de forma aleat´oria