You are on page 1of 8

Universidade Federal de Uberlandia

Programa de Pos-graduacao em Engenharia Eletrica

EL 065-A: Algoritmos geneticos

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.

Algorithm 1 Geracao da populacao inicial


function GerarP opBin(N,nb)
for i 0 to N do . N e o numero de linhas.
for j 0 to nb do . nb e o numero de colunas.
if r > 0.5 then . A variavel r e um numero aleatorio, r [0, 1].
pop[i, j] = 1
else
pop[i, j] = 0
end if
end for
end for
end function

2.3 Funcao objetivo


Neste trabalho foi utilizada como funcao objetivo uma funcao matematica de uma variavel real,
que foi encontrada no trabalho de [1]. A funcao objetivo utilizada e
p 
f (x) = x sin |x| ,

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

Apos a decodificacao, na etapa do calculo do valor da funcao objetivo, os valores decodificados


devem ser mapeados para o limite da solucao, x [a, b]. Para o mapeamento tambem e necessario
conhecer o valor mnimo e maximo que a quantidade de bits utilizada pode mapear, ou seja, no
caso de 10 bits xmin = 0000000000 e xmax = 1111111111. Os valores de xmin e de xmax sao entao
convertidos para numeros reais e aplica-se a seguinte equacao para a determinacao do fitness de
cada indivduo da populacao
xr min xr
f (xr ) = a + (b a) .
max xr min xr

3 Algoritmo de selecao: roleta viciada


O algoritmo de selecao utilizado no codigo foi o da roleta viciada, este utiliza o resultado da
avaliacao de cada indivduo da populacao e escolhe um indivduo desta populacao, nesta selecao
o indivduo com a melhor avaliacao tem uma maior probabilidade de ser escolhido, porem os
indivduos mal avaliados tambem tem chances de escolha.

Figura 1: Grafico gerado para um caso especfico (10 indivduos).

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

Fonte: Elaboracao propria

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.

4 Algoritmo de cruzamento: crossover de um ponto


De acordo com [2], o algoritmo crossover de um ponto reproduz a reproducao sexuada, onde a
partir de dois pais, temos uma troca de material genetico, gerando descendentes. Neste algoritmo
duas solucoes progenitoras foram duas solucoes descendentes, respeitando uma taxa de cruzamento
predefinida, neste problema utilizaremos pc = 0.6 [1], caso o indivduo nao seja sorteado para
que troque material genetico, este e transportado para a nova geracao. A figura 2 ilustra o
funcionamento do algoritmo crossover de um ponto.

Figura 2: Ilustracao do algoritmo de cruzamento.

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.

Algorithm 4 Algoritmo de mutacao


function M utacaoBin(pop, tm)
for i 0 to N do . N e o numero de linhas de pop.
if r < tm then . tm e a taxa de mutacao
for i 0 to nb do . nb e o numero de colunas de pop.
if r < tm then
if pop[i, j] == 0 then
pop[i, j] = 1
else
pop[i, j] = 0
end if
end if
end for
end if
end for
end function

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.

Algorithm 5 Algoritmo Genetico binario


procedure GA(nGer,tm,tc,nb,N,a,b,f)
pop = gerarPopulacaoBin(N,nb)
for g 0 to nGer do . nGer e o numero de geracoes
popR = convertePopBin2real(pop,a,b)
fitness = f(pop)
popBest = pop[ArgMin(fitness)] . Elitismo: guarda a melhor solucao
index = SelecaoRoleta(fitness)
for i 0 to N 1, i + 2 do . Passo duplo
if r < tc then
aux[i], aux[i+1] = CrossoverUmPonto(pop[index[i], index[i + 1]) . Ocorre
cruzamento, insere indivduos na nova geracao.
else
aux[i], aux[i + 1] = pop[i], pop[i + 1] . Nao ocorre, repete indivduos da geracao
anterior para nova geracao.
end if
pop = aux
Nova geracao.
pop = MutacaoBin(pop,tm)
idx = randint(0,N-1) . Escolhe uma posicao aleatoria (inteiro)
pop[idx] = popBest . Elitismo: Troca algum indivduo pela melhor solucao da
geracao passada.
end for
end for
end procedure

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).

Figura 3: Evolucao das solucoes na primeira e ultima geracao.

0 timo: -418.98 f_min: -397.72 0 timo: -418.98 f_min: -418.98

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

(a) Geracao inicial de solucoes (b) Geracao final de solucoes

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.

Figura 4: Evolucao da fitness e sua media ao decorrer das geracoes.


100
Melhor fitness
150 Mdia do fitness

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.

[2] K. Yamanaka, Algoritmos geneticos: Fundamentos e aplicacoes. Universidade Federal de


Uberlandia. Notas de Aula, 2015.

You might also like