Você está na página 1de 10

Introduo ao Algoritmo Gentico

Sadao Massago
Agosto de 2013

1 Introduo
O algoritmo gentico um mtodo de otimizao bio insperado, desenvolvida por
John Henry Holland em 1975. Segundo a teoria evolucionria de Charles Darwin,
os seres sofre mutaes e os mais aptos (melhores) vo sobreviver. Ento investigar
como ocorre tal seleo natural e efetuar simulao permite gerar dados com caractersticas desejadas. Neste texto ser abordado sobre algoritmos genticos, usando
como exemplo, casos de cromossomos codicados pelos nmeros reais.

2 Modelo simplicado da evoluo gentica e otimizao.


As caractersticas fsicas dos seres vivos so codicados geneticamente pelos cromossomos formados pelas palavras (sequencias de alfabetos) de 4 tipo de protenas
(alfabetos). A sequencia destes cdigos caracteriza a espcie e suas caractersticas
fsicas de um individuo.
Estes cromossomos so consequncias de cruzamento dos cromossomos dos pais,
acrescidas de uma mutao.
Segundo a teoria evolutiva de Charles Darwin, os indivduos que apresentar caractersticas mais aptas para o ambiente tem mais chance de sobreviver e deixar seus
herdeiros. Assim, pelo decorrer das geraes, a populao de uma espcie evolui para
melhor adaptar ao ambiente onde reside.
Podemos escrever a simulao deste processo evolutivo em termos de algoritmos
como segue.
repete
g e r a novo i n d i v i d u o
1

a v a l i a a a p t i d a o do i n d i v i d u o
e s c o l h e os mais aptos
fim r e p e t e
O ponto mais importante como simplicar e adaptar o fenmeno evolutivo sem
perder a sua ecincia evolutiva. importante lembrar que estamos tentando obter
um algoritmo inspirado na teoria evolutiva e no, um simulador de evoluo de um
ser vivo. O processo precisa ser simples e o resultado deve ser eciente.
Antes de mais nada, necessrio saber qual problema o sistema evolutivo resolve.
Como sobrevive os mais aptos (melhor), ele associado ao problema de otimizao
(obter maior ou menor valor da funo). No entanto, ele costuma funcionar independente do tipo de funo. Assim, algoritmo gentico e denominado de mtodo
meta-heurstico para otimizao e amplamente empregado nos casos em que a implementao dos mtodos de otimizao tradicional no apropriada ou complicada.
Para este texto, assumiremos que drand uma funo que retorna valores reais
aleatrios entre 0 e 1 e rand(N) retorna inteiro aleatrio entre 1 e N . Alm disso, o
vetor de tamanho N assumido que est indexado de 1 a N .

3 Codicao do problema
Inicialmente, o problema precisa ser codicada. O problema apropriada para aplicar
o algoritmo gentico o problema de otimizao, isto , obter o valor mnimo (ou
mximo) sujeito a alguma condio especca.
Analisando o problema, determina-se os parmetros numricos e suas condies
que caracteriza uma soluo factvel (soluo que satisfaz a condio do problema).
Esta sequncia de nmeros denominado de cromossomos. Inicialmente, somente os
cromossomos formados pelos nmeros inteiros foram usados, mas com o tempo, os
nmeros reais tambm comeam a ser usados com frequncia.
Para P
servir de exemplo, vamos supor que queremos obter o mnimo da funo
f (x) =
x2i . Em geral, dado o problema de encontrar o mnimo de f : X
Y , x X o cromossomo. O cromossomo costuma ser sequncias de nmeros,
sendo armazenados no vetor dos nmeros. Um individuo codicado armazena o
cromossomo e as informaes relevantes obtidos a partir dele. No caso de f : X Y ,
o individuo codica x X e z = f (x).
Por exemplo, no nosso exemplo, um individuo pode armazenar o ponto x e o
valor z = f (x). Vamos codicar o cromossomo no vetor x e seu valor na varivel z .
individuo
x : v e t o r de tamanho N dos r e a i s
2

z : real
fim i n d i v i d u o

4 populao
Uma populao o conjunto dos indivduos. Cada individuo representado pelos
seus cromossomos. Em geral, podemos representar uma populao como sendo vetor
de indivduos.
populacao : v e t o r de tamanho POP_SIZE de i n d i v i d u o
Em cada iterao do algoritmo gentico, uma nova populao ser gerada a partir do atual, atravs do chamado operador gentico. A forma como gera a nova
populao varia de caso por caso, devendo escolher a forma mais apropriada para
cada problema. No entanto, existem duas formas opostas importantes: steady-state
e generacional.
No steady-state, uma nova populao obtido pela populao antiga, trocando
com o novo individuo gerado somente quando ele for melhor que pior da populao.
Em termo operacional, gera os novos indivduos e troca com o pior da populao,
caso ele for melhor. Caso no supere o pior, novo individuo ser descartado. A
ideia juntar os novos indivduos na populao, ordenar pela aptido e truncar pelo
tamanho da populao.
No generacional, exceto uma seleta de indivduos denominados elites, todos sero
trocados pelo novo individuo. Se no tiver os elites, seria prximo ao que acontece
na natureza.

5 Inicializao, evaluao e ordenao


Inicialmente, gera os indivduos iniciais da populao aleatoriamente. Para nosso
exemplo, vamos supor que o tamanho da populao POP_SIZE. Ento gera
POP_SIZE de n-uplas de nmeros sorteados entre A e B . Para cada par de pontos,
calcula o valor de f.
A populao inicializado pela funo chamado novo_individuo
novo_individuo
para i = 1 . . n
i n d i v i d u o . x [ i ] = A+(BA) drand
fim para
3

individuo . z = f ( individuo . x)
retorna individuo
fim novo_individuo
Agora ordenamos o individuo em termos dos valores de f. Como queremos o
menor valor de f, o melhor individuo ca no comeo da lista.
inicializa
para k = 1 . .POP_SIZE
populacao [ k ] = novo_individuo
fim para
ordena populacao
fim i n i c i a l i z a

6 Operador gentico: gerando novos indivduos


Existem duas formas bsicas de gerar nova populao, mas eles usam o mesmo operador bsico.
Elitismo (clone dos melhores): Alguns indivduos do comeo da lista entra para
nova populao. O elitismo essencial para o caso generacional a m de evitar que
a populao piore. No caso de steady-state, isto ocorre naturalmente e no haver
elitismo explicito.
Cruzamento (recombinao): Escolhe-se dois indivduos na populao, denominado de pai. O novo individuo obtido, combinando os cromossomo de cada um
deles. Existem vrias formas de combinar os cromossomos, resultando diversos operadores de cruzamento. Para nosso exemplo, vamos supor que cada gene a mdia
ponderada dos genes correspondentes dos pais, denominado de "Blend" ([2]).
cruzamento ( pai1 , p a i 2 )
para x = 1 . .N
t = drand
i n d i v i d u o . x [ i ] = t p a i 1 . x [ i ] + (1 t ) p a i 2 . x [ i ]
fim para
individuo . z = f ( individuo . x)
retorna individuo
fim cruzamento
Para cruzamento, desejvel que evite que pai1 seja diferente de pai2. Poder
fazer sem muita diculdade e melhorar a ecincia do cruzamento, mas no ser
4

obrigatria (pior dos casos, perder uma parcela dos individuos obtidos por cruzamentos).
s e l e c i o n a _ p a i s ( i1 , i 2 )
i 1 = rand (POP_SIZE)
i 2 = rand (POP_SIZE1)
s e i 2 <= i 1 entao
i2 = i2 + 1
fim s e
fim s e l e c i o n a _ p a i s
Mutao (clone modicado): copia o individuo da populao anterior e modica
um pouco o cromossomo. Como existe vrias formas de modicar o cromossomo,
haver diversos operadores de mutao. Para nosso exemplo, vamos supor que a
mutao ocorre em um dos genes do cromossomo, com pequena perturbao, com
mximo de L para cima ou para baixo.

mutacao ( p a i )
individuo = pai
i = rand (N)
i n d i v i d u o . x [ i ] = i n d i v i d u o . x [ i ] + 2 L ( drand 0.5)
individuo . z = f ( individuo . x)
retorna individuo
fim mutacao
Novos (opcional): A m de introduzir indivduos variados, poder tambm colocar indivduos gerado independente da populao anterior. Isto melhora a busca
inicial, principalmente quanto o problema apresentar mais de um mnimo local. Este
operador j foi apresentado para gerar a populao inicial

7 Gerando uma nova populao


No caso de steady-state ([4]), o individuo gerado entra na populao somente quando
for melhor que o anterior. Ento, gera o individuo, avalia e insere se for melhor que
o pior da populao.
steady_state
para k = 1 . .NUM_MUTACAO
i = rand (POP_SIZE)
item = mutacao ( populacao [ i ] )
s e ( item . z < populacao [ POP_SIZE ] . z ) entao
5

t r o c a r ultimo por item e r e o r d e n a r


fim s e
fim para
para k = 1 . .NUM_CRUZAMENTO
s e l e c i o n a _ p a i s ( i1 , i 2 )
item = cruzamento ( populacao [ i 1 ] , populacao [ i 2 ] )
s e ( item . z < populacao [ POP_SIZE ] . z ) entao
t r o c a r ultimo por item e r e o r d e n a r
fim s e
fim para
para k = 1 . .NUM_NOVOS
item = novo_individuo
s e ( item . z < populacao [ POP_SIZE ] . z ) entao
t r o c a r ultimo por item e r e o r d e n a r
fim s e
fim para
fim s t e a d y _ s t a t e
No generacional ([4]), toda populao ser trocada. Aps a troca, efetuar a
ordenao da populao de acordo com a aptido (que no caso do exemplo, ser
valor de f).
assumido que NUM_ELITISMO + NUM_MUTACAO + NUM_CRUZAMENTO
+ NUM_NOVOS = POP_SIZE.
generacional
contador = 1
para k = 1 . .NUM_ELITISMO
nova_populacao [ k ] = populacao [ k ]
contador = contador + 1
fim para
para k = 1 . .NUM_MUTACAO
i = rand (POP_SIZE)
nova_populacao [ contador ] = mutacao ( populacao [ i ] )
contador = contador + 1
fim para
para k = 1 . .NUM_CRUZAMENTO
s e l e c i o n a _ p a i s ( i1 , i 2 )
nova_populacao [ contador ]
= cruzamento ( populacao [ i 1 ] , populacao [ i 2 ] )
6

contador = contador + 1
fim para
para k = 1 . .NUM_NOVOS
nova_populacao [ contador ] = novo_individuo
fim para
ordena nova_populacao
fim g e n e r a c i o n a l

8 Critrio de parada e limpeza


Durante a iterao, poder gerar um individuo existente, ou muito prximo do existente. Neste caso, os indivduos da populao tende a ser tudo igual ou parecidos,
reduzindo a sua ecincia. Para evitar a reduo de indivduos variados na populao, bastante recomendvel que implemente a rotina de limpeza na qual substitui
os indivduos iguais ou muito parecidos por um novo qualquer, eliminando do senrio. Isto reduz o problema da convergncia para o mnimo local em vez do mnimo
global. No esquecer de ordenar aps limpar.
limpeza
para k = 1 . .POP_SIZE
para i =(k + 1 ) . .POP_SIZE
s e populacao [ k ] = populacao [ i ] entao
populacao [ i ] = novo_individuo
fim s e
fim para
fim para
ordena populacao
fim limpeza
A rotina de limpeza costuma ser chamado de tempo em tempo e no a cada
iterao.
A avaliao para parada pode ser feita por nmero de iteraes, resultado da
aptido, desvio padro da parte de populao, etc. importante que escolha a
forma adequada de avalizao do critrio de parada.

9 Como tudo isso funciona


Vamos exemplicar o funcionamento
do algoritmo gentico para nosso problema que
P
minimizar a funo f (x) = x2i para N = 2. Assim, f (x) = x2i + x22
Cdigo do individuo ser:
cromossomo: xi , i = 1, 2
aptido: z = f (x)
Vamos usar 1 elitismo, 1 mutao, 1 cruzamento e 1 novos, com POP_SIZE=4.
Populao inicial:
Sorteando 4 indivduos e calculando seu valor, temos
x1
x2
z
0.5
0.2 0.29
1.5 0.2 2.29
1.2 0.6 1.8
1
1.5 3.25
Ordenando por z , temos
x1
x2
z
0.5
0.2 0.29
1.2 0.6 1.8
1.5 0.2 2.29
1
21.5 3.25
Uma iterao do steady-sate

Suponha selecionado o terceiro individuo e perturbando, tendo


x1 = 2, x2 = 0.5. Ento z = 4.25.
Como ele pior que o ltimo individuo, ele no vai entrar na populao. Assim,
a populao continua sendo o que era antes.
Agora suponha que o primeiro e segundo foi escolhido como pai1 e pai2 para o
cruzamento. Sorteando valores entre seus genes, suponha que obtemos
x1 = 1, x2 = 0.1. Ento z = 1.01, sendo melhor do que o ltimo elemento.
Ento substituindo o ltimo e reordenando, teremos
x1
x2
z
0.5
0.2 0.29
1
0.1 1.01
1.2 0.6 1.8
1.5 0.2 2.29

Agora suponha que foi gerado um individuo novo x1 = 1.6, x2 = 1.3. Ento
z = 4.25, pior do que o ltimo elemento. Ento a populao ser mantida.

Note que, se o elemento gerado no for melhor que o ltimo, a populao anterior
ser mantida. Se for gerado o melhor que o ltimo individuo, ser trocado por ltimo
8

e reordenado.
Uma gerao do generacional.

Vamos supor mesma populao inicial


Como tem um elitismo (sempre deve ter no mnimo 1), aps o elitismo, a nova
populao caria
x1 x2
z
0.5 0.2 0.29

Agora, vamos supor que foi sorteado terceiro elemento para mutar e sofreu mesma
mutao que o stady-state.
x1 = 2, x2 = 0.5. Ento z = 4.25.
Apesar dele ser pior do que o ltimo individuo, ele entra na nova populao.
x1
x2
z
0.5 0.2 0.29
2 0.5 4.25

No sorteio de cruzamento, suponha sorteado o primeiro e segundo como no caso do


steady-state. O pai1 e pai2 ser escolhido da populao anterior e no da populao
nova. Ento sero cruzamentos de x1 = 0.5, x2 = 0.2 com x1 = 1.2, x2 = 0.6.
Assim, vamos supor que foi gerado o individuo x1 = 1, x2 = 0.2 com z = 1.04. A
nova populao caria
x1
x2
z
0.5 0.2 0.29
2 0.5 4.25
1 0.2 1.04

Gerando o individuo restante como sendo novo individuo


x1
x2
z
0.5 0.2 0.29
2 0.5 4.25
1 0.2 1.04
0.2 1.2 1.48

Ordenando, teremos
x1
x2
z
0.5 0.2 0.29
1 0.2 1.04
0.2 1.2 1.48
2 0.5 4.25

Observao: No steady-state, a populao atualizada para cada individuo


gerado, mas no generacional, populao atualizado somente quando tudo estiver
gerados. Estes dois mtodos de gerao so extremos opostos e existem varias variaes intermediarias.

10 Consideraes nais
Para o algoritmo gentico, recomendado ter um bom gerador de nmeros aleatrios
e importante saber lidar com distribuio que no necessariamente uniforme.
A seleo dos indivduos costuma ser feita usando uma roleta que privarea os
indivduos de menor custo (ou maior aptido). Em geral, os pesos na roleta so
custos ou a posio, favorecendo o menor valor. Devido a facilidade de implementao, poder sortear os indivduos usando nmeros aleatrios com a distribuio
exponencial em termos de posio, em vez da roleta.
Para a mutao, costuma usar distribuio normal em vez de sortear uniformemente o valor num intervalo xo.
Para melhorar a ecincia computacional no clculo da distribuio exponencial
e normal, poder substituir pela distribuio dada pelas funes bias e gain descrito
em [5].

Referncias
[1] Coelho, Leandro dos S., "Fundamentos, Potencialidades e Aplicaes de Algoritmos Evolutivos", SBMAC, 2003.
[2] Haupt, Randy L., "Pratical Genetic Algoritmos", John Wiley & Sons, Inc, 2004.
[3] Banzhaf, Wolfgang et. al., "Genetic Programming (an introduction)", Morgan
Kaufmann Publishers, Inc, 1998.
[4] Barbosa, Helio J. C., "Introduo aos Algoritmos Genticos (XX CNMAC)",
SBMAC, 1997.
[5] Schlick, Christophe, "Fast Alternatives to Perlin's Bias and Gain Functions",
Graphics Gems IV, Academic Press, pp. 401-403, 1994.

10