Inteligência Artificial
Algoritmo Genético
Prof. Marcelo B. de Almeida
Introdução aos Algoritmos Genéticos
“Quanto melhor um indivíduo se adaptar
ao seu meio ambiente, maior será sua
chance de sobreviver e gerar descendentes”
Charles Darwin
Algoritmos Genéticos, AGs, são métodos de otimização e busca inspirados nos
mecanismos de evolução de populações de seres vivos.
Estes algoritmos seguem o principio da seleção natural e sobrevivência do mais
apto, declarado pelo naturalista e fisiologista inglês Charles Darwin.
Otimização é a busca da melhor solução para um dado problema. Consiste em tentar
várias soluções e utilizar a informação obtida neste processo de forma a encontrar
soluções cada vez melhores.
Introdução aos Algoritmos Genéticos
Exemplo:
Achar o ponto máximo da função: f(x)= x.sen(10. .x)+1 no intervalo -1 ≤ x ≤2
1 – Passo: Gerar uma população inicial de “cromossomos” que é formada por um
conjunto aleatório de cromossomos que representam possíveis soluções do problema
a ser resolvido. Ex.:
S1=1000101110110101000111 22 bit’s
Converter S1 em decimal -> b10 =2288967
Colocar b10 no intervalo do problema [-1,0; 2,0] utilizando a fórmula
b10
x = min + (max – min) ------2L – 1
2288967
x = -1 + (2 +1) ----------- = 0,637197
(222 – 1)
Um algoritmo Genético começa com uma população inicial de N cromossomos.
Neste exemplo N= 30. (os cromossomos foram gerados aleatoriamente).
Aptidão
A cada Cromossomo S1 é atribuída uma aptidão fi. Aptidão é a nota que mede o
quanto a solução foi boa, essa nota é baseada na função objetivo ( f(x) ).
Um dos métodos para dar nota de aptidão ao cromossomo é atribuir uma nota
arbitrária ao primeiro cromossomo por exemplo 2,0 e ao último cromossomo a nota
0,0. As demais notas foram obtidas interpolando estes dois extremos utilizando a
seguinte função: f i  2( N  i ) /( N  1) onde N é o tamanho da população. Veja a
tabela.
Ex.:A aptidão do 5º cromossomo é :
f 5  2(30  5) /(30  1)  1,72414
Feito isso com todos os cromossomos da população inicial, iremos ordená-los em
ordem decrescente do valor da função objetivo ( f(x) ).
Colocando no gráfico os pontos representados pelos cromossomos da população
inicial teremos:
2 – Passo: Selecionar os melhores cromossomos da população inicial para
gerar “cromossomos filhos” (que são variantes dos pais) através dos
operadores de crossover e mutação.
Seleção
Geralmente, os pais são selecionados com probabilidade “proporcional à sua
aptidão“. Essa probabilidade é dada por:
pi 

fi
N
f
i 1 i
Ex.: a probabilidade do 1º cromossomo da tabela ser escolhido é de :
2,0
p1 
 1*100  100%
2,0
Ex.: a probabilidade do 7º cromossomo da tabela ser escolhido é de :
1,58621
p7 
 0,126 *100  12,6%
12,55172
Existem muitas regras de seleção. Entre elas existe o método culling no qual todos
os indivíduos abaixo de um determinado limiar são descartados, este método
converge com maior rapidez que a versão aleatória.
Uma “população intermediaria” é utilizada para alocar os cromossomos pais
selecionados pela probabilidade de seleção Pi de um cromossomo.
Para fazer uma população intermediária é escolhido um cromossomo aleatoriamente,
verifica-se sua probabilidade, se for maior que o limiar (estabelecido) alocamos esse
cromossomo na tabela intermediaria. Repetimos esse processo até completarmos a
tabela intermediaria (30 valores, como na população inicial).
População Intermediaria
Crossover e Mutação
O operador crossover é aplicado a um par de cromossomos retirados da população
intermediária, gerando dois cromossomos filhos. Cada um dos cromossomos pais
tem sua cadeia de bit’s cortada em um posição aleatória, produzindo duas cabeças
e duas caudas. As caudas são trocadas, gerando dois novos cromossomos.
Ponto de corte
S1 = 0010101011100000111111
S2 = 0011111010010010101100
filho1 = 0010101011010010101100
filho2 = 0011111010100000111111
Após a operação de crossover, a Mutação é aplicada. A mutação inverte os valores de
bit’s, ou seja, muda o valor de um dado bit de 1 para 0 ou de 0 para 1.
Antes filho1 = 0010101011010010101100
filho2 = 0011111010100000111111
Depois filho1 = 0010001011010010111100
filho2 = 0011111010000000111111
Primeira geração