Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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.
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
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
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
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.
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
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
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