• Nenhum resultado encontrado

1 Introdução 1.1 Motivação Histórica

2 Algoritmo Genético

Este capítulo descreve um breve histórico do algoritmo genético tradicional, baseado no modelo de Holland que serviu como referência para o desenvolvimento deste trabalho.

2.1 Introdução

Na década de setenta, um estudante de doutorado em ciência da computação da Universidade de Michigan chamado John H. Holland, tentava desenvolver um método computacional adequado como solução para sistemas adaptativos complexos (HOLLAND,1975), que apresentavam as seguintes propriedades:

• O ambiente no qual os agentes estão inseridos interfere no resultado do sistema. Portanto, quando o ambiente muda o comportamento dos agentes, este também precisa mudar para garantir um melhor ajuste.

• O resultado do sistema é encontrar uma configuração para os agentes que sejam considerados adaptados ao ambiente.

• Quanto maior a variedade de configurações para o ambiente dentro do sistema, melhor será a qualidade do resultado encontrado.

• A especificação das relações entre os agentes é mais importante do que a especificação dos próprios agentes.

• Pequenas mudanças no ambiente em que os agentes estão inseridos podem ter efeitos significativos após terem passado algum tempo.

• O comportamento dos agentes inseridos no ambiente é aleatório, mas estes agentes estão em uma busca constante para se adaptar ao ambiente.

No decorrer de seu trabalho Holland (1975) percebeu que existia uma nítida semelhança entre os fenômenos que estudava e o processo de evolução das espécies. Observou também que a interação entre os agentes adaptativos determinava o resultado dos fenômenos investigados por ele e que a interação entre os fatores ambientais determinava a próxima população de uma dada região. Com base nessa constatação,

Holland propôs o seu modelo de algoritmo genético (AG)

(VIEIRA,2003;HOLLAND,1975;MAHALAKSHMI,2013).

Segundo Goldberg (1989), os algoritmos genéticos são conhecidos como algoritmos de busca e otimização (DARWIN,1999). A busca realizada pelos algoritmos genéticos trabalha sobre uma população de possíveis resultados (cromossomos) para um problema em paralelo, os quais são melhorados através de várias iterações com o intuito

de gerar um cromossomo que melhor satisfaz os critérios de aceitação do problema. Os métodos de otimização e buscas convencionais trabalham geralmente de forma sequencial, avaliando a cada instante apenas uma possível solução (LUDEMIR,2000).

Outras diferenças entre os AGs e os métodos tradicionais de busca e otimização apontados por Goldberg são:

• Os AGs codificam o conjunto de parâmetros na estrutura de dados definida para o cromossomo e não com os próprios parâmetros;

• Os AGs trabalham com informações de custo ou recompensa e não derivadas de funções;

• Os AGs direcionam a sua busca através de regras de transições probabilísticas e não determinísticas.

Neste contexto, embora os algoritmos genéticos possam parecer simplistas do ponto de vista biológico, estes são suficientemente complexos para fornecerem

mecanismos eficientes e robustos de busca adaptativa

(GOLDBERG,1989;LUDEMIR,2000).

Na visão de Coley (1999), os algoritmos genéticos são capazes de resolver uma grande diversidade de problemas complexos onde outros métodos têm apresentado dificuldades, como os problemas de otimização combinatória e estimativas de parâmetros, devido ao fato dos AGs trabalharem com vários subespaços de busca, representados pelos seus cromossomos, simultaneamente, o que lhes permitem encontrar muitos resultados diferentes para o mesmo problema.

Esta é a principal razão para o uso do AG por muitos cientistas na resolução de problemas práticos, tais como: processamento de imagem, bioinformática, análise de séries temporais, medicina, e reconhecimento de padrões, entre outras (COLEY,1999;MITSUO,2010;SIVANANDAM,2008). Na literatura clássica dos AGs, podem ser vistas propostas de variações para o algoritmo de Holland, como forma de resolver alguns problemas encontrados na aplicação deste algoritmo a diferentes problemas.

Neste capítulo é apresentado o algoritmo genético de Holland e as algumas aplicações de alto desempenho encontradas na literatura, que adotam como base o modelo de algoritmo genético de Holland ou uma variação deste.

2.2 O Algoritmo Genético de Holland

O algoritmo genético proposto por Holland trabalha sobre uma população de possíveis resultados (cromossomos) para um problema, os quais são melhorados através de várias iterações com o intuito de gerar um cromossomo ótimo para o problema. O mecanismo de transformação de uma população em outra obedece ao princípio de seleção natural, descrito por Darwin (1999), segundo o qual, na natureza, os cromossomos de uma população competem entre si por recursos tais como comida, água e abrigo (VIEIRA,2003).

Os cromossomos de uma espécie que apresentam as características mais favoráveis ao meio ambiente, denominados de cromossomos adaptados, têm maior chance de sobreviver que os cromossomos que não apresentam estas características. Os cromossomos adaptados são preferidos pelos cromossomos da sua espécie para procriar, gerando assim, um maior número de descendentes potencialmente adaptados ao meio ambiente uma vez que as características apresentadas por um indivíduo representam os resultados da combinação das características herdadas de seus pais (VIEIRA,2003). A Figura 2.1 apresenta um pseudocódigo para o algoritmo genético de Holland.

t ←0

gera p

calcula o valor da adaptação dos cromossomos de p

enquanto (condição de parada não for satisfeita) faça

t ←t +1

p ← seleciona h cromossomos da população p

˙p ← aplica a operação de cruzamento e mutação sobre os cromossomos da população p

p← substitui l cromossomos da população p por l cromossomos da população ˙p calcula o valor da adaptação dos cromossomos de p

fim do enquanto

Figura 2.1 - Pseudocódigo de um algoritmo genético. Fonte:VIEIRA,2003.

Segundo este pseudocódigo, um algoritmo genético tem início com a geração da população inicial p composta por n cromossomos, que podem ser fornecidos pelo usuário, gerados aleatoriamente ou construídos por um algoritmo baseado no conhecimento existente sobre o problema a ser solucionado. Em seguida, é calculada a adaptação dos cromossomos da população, para verificar a qualidade destes cromossomos para o problema investigado. Se o critério de parada definido para o problema não for satisfeito, então um novo ciclo é executado. Neste novo ciclo incrementa-se o contador de iterações t, selecionam-se cromossomos para geração de novos descendentes, ou seja, geram descendentes, o nascimento de alguns dos cromossomos e a morte dos cromossomos existentes na população considerada de baixa qualidade, para o problema analisado. Os critérios de parada usados pelos algoritmos genéticos são: encontrar um cromossomo com adaptação x ou atingir a j-ésima iteração (VIEIRA,2003).

A população dos cromossomos capazes de gerar descendente p é construída pela seleção de h cromossomos da população p baseada na adaptação dos cromossomos ou em uma medida relativa ao mérito dos cromossomos dentro da população. Os cromossomos da população p são submetidos à ação dos operadores genéticos de cruzamento e mutação para gerar descendentes (VIEIRA,2003).

A frequência com que os cromossomos da população p geram descendentes é estabelecida por uma medida de probabilidade associada a cada operação (VIEIRA,2003).

A nova população p é formada por l cromossomos da população ˙p e por n−l cromossomos da população p. O critério adotado para o nascimento dos l cromossomos da população ˙p é o mesmo usado para a escolha dos cromossomos progenitores da população p, o qual é aplicado no sentido inverso, para determinar os l cromossomos da população p que devem morrer. Por fim é calculado o valor da adaptação dos cromossomos da população p recém-construída (VIEIRA,2003).

O cromossomo é um vetor binário de tamanho fixo m, que armazena o resultado do problema de forma discretizada. E a população é representada por um vetor de tamanho fixo n de cromossomos. A Figura 2.2 apresenta a definição das estruturas de dados manipuladas pelo algoritmo genético de Holland (1975).

tipos

binário = {0,1}

cromossomo: vetor de dimensão n de binário população: vetor de dimensão m de cromossomo

Figura 2.2 - Definição das estruturas de dados usadas no algoritmo genético de Holland. Fonte:

VIEIRA,2003.

A adaptação de um cromossomo é definida pela função objetivo e pela intenção do problema. A função objetivo do problema, representada por ^o : D→ℝ , recebe um elemento do domínio do problema D, e retorna a medida do grau de satisfação deste elemento ao problema. A intenção do problema informa se o resultado é o elemento com maior ou menor grau de satisfação. Assim, se a intenção do problema for encontrar o elemento com maior grau de satisfação, então a função de adaptação f do algoritmo genético será igual a ^o , caso contrário a função de adaptação f do algoritmo genético será igual a − ^o . Esta convenção se faz necessária porque o algoritmo genético, por definição, está sempre a procura do cromossomo mais adaptados (NORVING,1995;HOLLAND,1975).

A condição de parada do algoritmo genético de Holland pode ser o menor valor de adaptação considerado satisfatório, um número de iterações determinado, ou qualquer combinação dessas duas condições.

A função de seleção elitista proposta por Holland recebe a população p e o parâmetro h e retorna uma população de tamanho h, formada pelos cromossomos mais adaptados da população p. Sua implementação inicia com a ordenação dos cromossomos que compõe a população p em função do seu valor de adaptação em ordem decrescente. Após a ordenação basta copiar os l primeiros cromossomos da população p para a população p .

A operação de cruzamento de Holland recebe um par de cromossomos c1 e c2

da população p , um ponto de corte j, com r1∈ [0,100] , e um número aleatório r1 , com

j∈{1,. .. ,m} , e retorna o par de cromossomos fornecidos, se r1 for maior que a

probabilidade de cruzamento probc; caso contrário esta operação retorna um novo par

de cromossomos f1 e f2 formados pela combinação dos cromossomos fornecidos. A combinação dos cromossomo pais ocorre da seguinte maneira: seja c1=[a1,a2 , .. . ,an ]

e c2=[a1,a2, . .. ,an], selecione aleatoriamente um número x, pertencente ao conjunto {1,

2, ..., n} e então constrói-se dois novos cromossomos f1=[a1,. . .,ax, . .. ,bx+1 . .. bn ] e

f2=[b1,. . .,bx,. .. ,ax+1 . .. an ] (VIEIRA,2003).

Procedimento de Seleção Elitista ( p: população; p : vetor de cromossomo de dimensão l;

m, l : inteiro)

variáveis

i,j: inteiro

aux: binário

para j variando de 1 até m − 1 faça para

i variando de j até m − 1 faça

se adaptação(p[i]) > adaptação(p[i + 1]) então

p [i] p[i]

fim do para

fim do procedimento

Figura 2.3 - Algoritmo de seleção elitista. Fonte: VIEIRA,2003.

Holland (1975) propõe duas operações de mutação:por complemento e por inversão. A mutação por complemento recebe um cromossomo de posições {j1 , . .. ,jw }, com

{

j1 ,. .. ,jw

}

{1, . ..,m} e j1<. . .<jw , e um número aleatório r1 , com r1∈ [0,100] ; e retorna o cromossomo fornecido, se r1 é maior que a probabilidade de mutação probm , caso contrário um novo cromossomo cujas informações apresentadas nas posições j1<. . .<jw são diferentes das apresentadas no cromossomo fornecido (VIEIRA,2003).

A mutação por inversão recebe um cromossomo, dois pontos de corte j1 e j2 , com j1 {1, .. . ,m} e j2 {j1 +1,. .. ,m}, e um número aleatório r1 , com r1∈ [0,100], e

retorna o cromossomo fornecido, se r1 for maior do que a probabilidade de mutação, caso contrário um novo cromossomo formado pela inversão das informações que ocupam as posições j1 , . .. ,j2 do cromossomo fornecido (VIEIRA,2003).