Professional Documents
Culture Documents
Relatorio 2:
AG basico
Aluno:
Professor:
Me. Rooney Coelho
Dr. Keiji Yamanaka
Matrcula: 11523EEL08
2 de Setembro de 2015
1 Objetivos
Este trabalho tem como objetivo principal desenvolver um algoritmo genetico, com representacao
binaria, para encontrar o ponto de mnimo de uma funcao matematica. O problema a ser resolvido
encontra-se na secao 3 da referencia [1].
2 Definicoes do algoritmo
Para solucionar o problema proposto, foi criado um codigo na linguagem Python 2.7. Foram
utilizadas as bibliotecas Numpy, Matplotlib e Random, nao sendo utilizadas funcoes prontas
(como as da biblioteca scipy.optimize) para a implementacao do AG.
2.1 Cromossomo
O cromossomo foi codificado como uma palavra binaria de 10 bits. Cada gene deste cromossomo
e composto por um bit (zero ou um).
2.2 Populacao
Foi adotada uma populacao de 50 indivduos, cada um com 10 bits, de acordo com a referencia
[1]. O pseudo-codigo do algoritmo implementado para gerar a populacao inicial, que e binaria, de
solucoes e mostrado no algoritmo 1.
com x [0, 512]. Note que como nossa populacao e composta de indivduos binarios e nossa funcao
objetivo e de numeros reais, os cromossomos devem ser entao decodificados para numeros reais. A
1
formula utilizada para a decodificacao foi
n
X
xr = 2j x[j].
i=0
x1 x0 x9
x2
x8
6.2%1.2%4.2%
x3 4.3%
17.9%
12.2%
x4 1.5%
9.1% 17.5%
x5
x7
25.9%
x6
A figura 1 ilustra um resultado grafico obtido pelo codigo implementado, esta figura foi gerada
para uma populacao de 10 indivduos devido aos fins didaticos deste exemplo. Note que para este
caso, o indivduo x6 tem uma maior probabilidade de ser escolhido, ele e o indivduo mais bem
avaliado desta populacao. O pseudo-codigo para a implementacao da roleta viciada e mostrado no
algoritmo 2.
A heurstica principal que envolve este algoritmo e realizar uma selecao onde os indivduos mais
bem avaliados tem uma maior probabilidade de selecao, o resultado deste algoritmo e o ndice de
um ndivduo da populacao que foi selecionado, note que o mesmo indivduo pode ser selecionado
diversas vezes. A funcao ArgM in ilustrada no algoritmo 2 representa o ndice do valor mnimo
2
Algorithm 2 Roleta viciada.
function SelecaoRoleta(N,nb)
P
p = f itness/ f itness
for i 0P to N p do . N p e o numero de linhas de p.
c[i] = p[0 : i + 1] . c e a probabilidade acumulada.
end for
for i 0 to N c do . N c e o numero de linhas de c.
index[i] = ArgM in |c[i] r| . Seleciona o valor de c mais proximo de uma variavel
aleatoria r.
end for
end function
de um vetor, no caso o modulo da diferenca entre c e uma variavel aleatoria r, este procedimento
simula o rodarde uma roleta com secoes definidas pelos intervalos de c, quanto maior o intervalo
entre valores de c, maior a probabilidade de um indivduo ser escolhido.
ponto de
corte
Fonte: Elaboracao propria
Para o exemplo ilustrado na figura 2, dois indivduos sorteados pelo algoritmo de selecao, tem
um ponto de corte aleatorio e a partir deste ponto de corte, estes trocam material genetico. O
primeiro progenitor (x08 ) tem uma avaliacao igual a -124.81, ja o segundo (x32 ) e igual a -81.46, seus
descendentes x00 e x01 , tem avaliacoes de -112.31 e -151.50 respectivamente, note que os um dos
descendentes obteve uma avaliacao melhor que a de seus progenitores, ou seja ele e um indivduo
mais evoludo. O pseudo-codigo para o algoritmo crossover de um ponto e mostrado no algoritmo
3.
Para implementarmos este algoritmo e necessaria a utilizacao de uma funcao para gera uma
funcao randomica de inteiros definida entre a posicao do primeiro bit e do penultimo, tornando as-
sim possvel realizar a divisao de cada cromossomo. Apos a definicao do ponto de corte, concatena-
se os trechos referentes ao corte de cada cromossomo, cruzando-os e gerando dois descendentes a
partir deste cruzamento. A concatenacao de dois vetores pode ser entendida, de forma simplificada,
como a juncao de pedacos destes vetores para a formacao de um novo vetor.
3
Algorithm 3 Crossover de um ponto.
function CrossOverU mP onto(pai1,pai2)
rIdx = randomicoInteiro(1,nb-2) . rIdx e o ponto de corte
f ilho1 = concatenar(pai1 [0 : rIdx], pai2 [rIdx :])
f ilho2 = concatenar(pai2 [0 : rIdx], pai1 [rIdx :])
end function
5 Algoritmo de mutacao
A mutacao pode ser entendida como a alteracao de um ou mais genes de um cromossomo, este
recurso e importante para a exploracao de novas solucoes, que talvez nao pudessem ser obtidas
somente com o operador de cruzamento. A taxa de mutacao (tm) foi mantida fixa em 0.01. O
algoritmo para a mutacao binaria e mostrado no algoritmo 4.
O funcionamento desta algoritmo consiste em fazer uma varredura de linhas e colunas, dada
uma probabilidade de mutacao, que e baixa, um bit sera invertido em alguma ocasiao especfica,
este artifcio fara o AG buscar novas solucoes em um processo chamado de exploracao.
6 O Algoritmo Genetico
Como criterio de parada para o algoritmo foi adotado uma quantidade fixa de geracoes, que e igual
a 100. Inicialmente os parametros do algoritmo, como as taxas de mutacao e cruzamento, junto aos
limites da solucao, quantidade de cromossomos e numero de bits sao definidos. A partir deste ponto
gera-se uma populacao inicial de solucoes, que e aleatoria, dentro do loop principal, que representa
as geracoes, avalia-se esta populacao (convertendo antes de binario para real), guarda-se a melhor
solucao (etapa conhecida como elitismo), em seguida realiza-se a selecao, cruzamento e mutacao.
Apos este etapa insere-se a melhor solucao na populacao da nova geracao, lembrando-se que o
tamanho da populacao e fixo, repete-se este procedimento ate que o criterio de parada (geracoes)
4
seja satisfeito. O pseudo-codigo para a implementacao de um AG binario basico e mostrado no
algoritmo 5.
5
7 Resultados
A populacao de solucoes, inicialmente aleatoria como mostra a figura 4(a), evolui em busca de um
ponto otimo da solucao, e possvel observar que na ultima das 100 geracoes esse valor e encontrado,
como mostra a figura 4(b).
50 50
100 100
150 150
f(x) = |x sin( x )|
f(x) = |x sin( x )|
|
|
|
|
p
p
200 200
250 250
300 300
350 350
400 400
450 450
0 100 200 300 400 500 600 0 100 200 300 400 500 600
x x
E possvel observar que no final das geracoes, a variabilidade genetica da populacao e muito
baixa, ou seja todos os indivduos tem caractersticas muito semelhantes. A figura 4 mostra o valor
da melhor solucao e o valor medio do fitness da populacao no decorrer das geracoes.
200
250
Fitness
300
350
400
450
0 20 40 60 80 100
Geraes
Atraves da analise da figura 4 e possvel observar o funcionamento do elitismo no AG, este faz
com que o valor do melhor fitness nunca piore, esse comportamento do grafico tambem e chamado
de forma escada. A media do fitness da populacao a partir da iteracao 40 estagnou, tendo pouca
variabilidade genetica para buscar mais solucoes a partir desta geracao, note que entre as geracoes
60 e 80 a mutacao causou uma pequena perturbacao neste perfil.
6
8 Conclusoes
E possvel concluir com este trabalho que o AG se mostra bastante efetivo para a resolucao deste
problema, nota-se tambem que uma populacao de 50 indivduos e bastante exagerada, pois o
ponto otimo e encontrado rapidamente. O algoritmo, que e um AG basico, pode ser melhorado ao
aplicarmos a taxa de cruzamento e principalmente de mutacao variada ao longo das geracoes, isto
faria que a solucao nao estagnasse tao rapidamente.
Referencias
[1] M. Tomassini, A survey of genetic algorithms, Annual Reviews of Computational Physics,
vol. 3, no. 2, pp. 87118, 1995.