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