Figura: Capa do Livro Hamburger, H., Richards, D. Logic and Language Models for Computer Science, Prentice Hall. Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Inteligência Artificial I Resolução de Problemas (Parte VI) Informações Adicionais Prof.a Joseana Macêdo Fechine [email protected] Carga Horária: 60 horas DSC/CCT/UFCG Em Busca de Soluções Tópico Ilustrações – Algoritmos de Busca Local Algoritmos Genéticos 2 DSC/CCT/UFCG Algoritmos Genéticos 3 DSC/CCT/UFCG Algoritmos Genéticos Cortes a serem efetuados : Filho 1 : Filho 2 : Seleção: escolhemos os indivíduos que participarão do processo reprodutório Operadores genéticos: Aplicamos os operadores de recombinação e mutação aos indivíduos escolhidos para “pais” Avaliação : Aplicamos a função de avaliação a cada um dos indivíduos desta geração Não Módulo de população : definimos a nova população a partir da geração existente e dos filhos gerados Satisfizemos o critério de parada ? (por nº de gerações ou por qualidade das soluções) Filhos gerados sobrevivem e são copiados sobre seus pais Toda a antiga geração de pais Sim Fonte:http://rico_linden.tripod.com/GA/ DSC/CCT/UFCG Fim 4 Algoritmos Genéticos Esboço do Algoritmo Genético [Início] Geração aleatória de uma população de n cromossomos. [Adaptação] Verificar a função objetivo f(x) de cada cromossomo x. [População] Cria-se uma nova população pela repetição a seguir: 1. [Seleção] Selecione um par de cromossomos da população de acordo com a adaptação de cada um (os mais bem adaptados tem maior chance de serem escolhidos) 2. [Crossover] Produza dois descendentes (filhos) realizando cruzamento com os cromossomos dos pais. O ponto para a realização do cruzamento deve ser aleatório. 3. [Mutação] Com uma certa probabilidade, o descendente sofre mutação em cada posição no cromossomo. 4. [Aceitação] Coloque os descendentes em uma nova população, juntamente com a melhor solução da geração velha. 5 DSC/CCT/UFCG Algoritmos Genéticos Esboço do Algoritmo Genético [Troca] Substitua a população velha pela nova. [Teste] Se a condição de finalização é satisfeita, pare, e retorne a melhor solução da população atua. [Adaptação] [Laço] Volte ao passo 1 6 DSC/CCT/UFCG Algoritmos Genéticos Assim como na natureza, a informação deve ser codificada nos cromossomos (ou genomas) A reprodução, que no caso dos GA, é equivalente à reprodução sexuada, se encarregará de fazer com que a população evolua. A mutação cria diversidade, mudando aleatoriamente gens dentro de indivíduos. A reprodução e a mutação são aplicadas em indivíduos selecionados dentro da população. 7 DSC/CCT/UFCG Algoritmos Genéticos Questões importantes Como criar cromossomos e qual tipo de codificação usar? É a primeira pergunta que deve ser feita ao resolver um problema com AG. A codificação dependerá fortemente do problema. Como escolher os pais para a realização do crossover? A geração de uma população a partir de duas soluções pode causar a perda da melhor solução. O que fazer? 8 DSC/CCT/UFCG Algoritmos Genéticos Representação “Cromossomial” Cada pedaço indivisível desta representação: gene. A representação cromossomial é completamente arbitrária. É interessante apenas que algumas regras gerais sejam seguidas: a) b) c) A representação deve ser a mais simples possível; Se houver soluções proibidas ao problema, então elas não devem ter uma representação; Se o problema impuser condições de algum tipo, estas devem estar implícitas na representação. 9 DSC/CCT/UFCG Algoritmos Genéticos Terminologia Linguagem natural GA cromossomo gene indivíduo,string, cromossomo, árvore característica alelo valor locus posição genótipo estrutura fenótipo conjunto de parâmetros 10 DSC/CCT/UFCG Algoritmos Genéticos Codificação binária É a mais comum devido a sua simplicidade Cada cromossomo é uma string de bits – 0 ou 1 Crom: A = 1 0 1 1 0 0 1 0 1 1 Crom: B = 1 1 1 1 1 1 0 0 0 0 Exemplo de uso: problema da mochila O problema: É dada uma lista de coisas com preços e tamanhos. É fornecido o valor da capacidade da mochila. Escolha as coisas de forma a maximizar o valor daquilo que cabe dentro da mochila, sem ultrapassar sua capacidade. Codificação: Cada bit é usado para dizer se a coisa correspondente está ou não na mochila. 11 DSC/CCT/UFCG Algoritmos Genéticos Codificação por permutação DSC/CCT/UFCG Mais usado em problemas de ordenação Cada cromossomo é uma string de números que representa uma posição numa seqüência Crom A: 1 5 3 2 6 4 7 9 8 Crom B: 8 5 6 7 2 3 1 4 9 Exemplo de uso: problema do caixeiro viajante O problema: São dadas cidades e as distâncias entre elas. O caixeiro viajante tem que visitar todas elas, sem viajar mais do que o necessário. A solução do problema consiste em encontrar a seqüência de cidades em que as viagens devem ser feitas de forma que a distância percorrida seja a mínima possível. Codificação: os cromossomos descrevem a ordem em que o caixeiro irá visitar as cidades. 12 Algoritmos Genéticos Codificação por valor DSC/CCT/UFCG Usado em problemas nos quais valores mais complicados são necessários Cada cromossomo é uma seqüência de valores Crom A: 1.2324 5.3243 0.4556 2.3293 2.4545 Crom B: ABDJEIFJDHDIERJFDLDFLFEGT Crom C: (back), (back), (right), (forward), (left) Exemplo de uso: dada uma estrutura, encontrar pesos para uma rede neural. O problema: É dada uma rede neural com arquitetura definida. Encontre os pesos entre os neurônios da rede de forma a obter a resposta desejada da rede. Codificação: Valores reais num cromossomo representam pesos em uma rede neural. 13 Algoritmos Genéticos Função de Avaliação DSC/CCT/UFCG É a maneira utilizada pelos AG para determinar a qualidade de um indivíduo como solução do problema em questão. É uma nota dada ao indivíduo na resolução do problema. Será usada para a escolha dos indivíduos pelo módulo de seleção de pais, sendo a forma de diferenciar entre as boas e as más soluções para um problema. Dada a generalidade dos AG, a função de avaliação, em muitos casos, é a única ligação verdadeira do programa com o problema real. 14 Algoritmos Genéticos Função de Avaliação Também chamada de função de custo (função de aptidão). Calcula então um valor numérico que reflete quão bons os parâmetros representados no cromossomo resolvem o problema. Usa todos os valores armazenados no cromossomo (os parâmetros) e retorna um valor numérico, cujo significado é uma métrica da qualidade da solução obtida usando-se aqueles parâmetros. A função de avaliação deve ser tal que se o cromossomo c1 representa uma solução melhor do que o cromossomo c2, então a avaliação de c1 deve ser maior do que a avaliação de c2. 15 DSC/CCT/UFCG Algoritmos Genéticos Seleção dos Pais O método de seleção de pais deve simular o mecanismo de seleção natural: Pais mais capazes geram mais filhos; Pais menos aptos também podem gerar descendentes. Temos que privilegiar os indivíduos com função de avaliação alta, sem desprezar completamente aqueles indivíduos com função de avaliação extremamente baixa; Até indivíduos com péssima avaliação podem ter características genéticas que sejam favoráveis à criação de um indivíduo ótimo. Estas características podem não estar presentes em nenhum outro cromossomo. 16 DSC/CCT/UFCG Algoritmos Genéticos Seleção dos Pais Método simples e muito adotado: método da roleta viciada. Criamos uma roleta (virtual) na qual cada cromossomo recebe um pedaço proporcional à sua avaliação (a soma dos pedaços não pode superar 100%). Rodamos a roleta. O selecionado será o indivíduo sobre o qual ela parar. 17 DSC/CCT/UFCG Seleção de Pais Exemplo: Indivíduo Avaliação Pedaço da roleta (%) Pedaço da roleta (º) 0001 1 1.61 5.8 0011 9 14.51 52.2 0100 16 25.81 92.9 0110 36 58.07 209.1 Total 62 100.00 360.0 18 DSC/CCT/UFCG Algoritmos Genéticos Seleção dos Pais Exemplo (cont.) – Graficamente, temos: 19 DSC/CCT/UFCG Algoritmos Genéticos Operadores de Crossover e Mutação Iremos trabalhar agora com a versão mais simples dos operadores genéticos. Nesta versão, eles atuam em conjunto, como se fossem um só. 20 DSC/CCT/UFCG Algoritmos Genéticos Operador de Crossover Vamos começar com o operador de crossover mais simples, chamado de operador de crossover de um ponto. Depois de selecionados dois pais pelo módulo de seleção de pais, um ponto de corte é selecionado. Um ponto de corte constitui uma posição entre dois genes de um cromossomo. Cada indivíduo de n genes contem n-1 pontos de corte. 21 DSC/CCT/UFCG Algoritmos Genéticos Operador de Crossover gen Pontos de Corte: 1 2 3 4 22 DSC/CCT/UFCG Algoritmos Genéticos Operador de Crossover DSC/CCT/UFCG Depois de sorteado o ponto de corte, separa-se os pais em duas partes: uma à esquerda do ponto de corte e outra à direita. É importante notar que: não necessariamente estas duas partes têm o mesmo tamanho. Primeiro filho: composto através da concatenação da parte esquerda do primeiro pai com a parte direita do segundo pai. Segundo filho: composto através da concatenação das partes que sobraram (a metade esquerda do segundo pai com a metade à direita do primeiro pai). 23 Algoritmos Genéticos Operador de Crossover A operação deve ser realizada sobre os cromossomos dos pais para a criação de descendentes Crom1: 11010 | 00100110110 Crom2: 11011 | 11000011110 Filho 1: 11010 | 11000011110 Filho 2: 11011 | 00100110110 24 DSC/CCT/UFCG Algoritmos Genéticos Operador de Crossover Outro exemplo: Um exemplo de crossover de um ponto. (a) dois indivíduos são escolhidos. (b) um ponto (4) de crossover é escolhido. (c) são recombinadas as características, gerando dois novos indivíduos. Fonte: http://www.icmc.usp.br/~andre/research/genetic/index.htm DSC/CCT/UFCG 25 Algoritmos Genéticos Operador de Mutação Depois de compostos os filhos, entra em ação o operador de mutação. Este opera da seguinte forma: Ele tem associada uma probabilidade extremamente baixa (da ordem de 0,5%); Sortea-se um número entre 0 e 1. Se ele for menor do que a probabilidade pré-determinada então o operador atua sobre o gene em questão, alterando-lhe o valor aleatoriamente. Repete-se então o processo para todos os gens componentes dos dois filhos. 26 DSC/CCT/UFCG Algoritmos Genéticos Operador de Mutação O objetivo da mutação é evitar que as soluções na população fiquem apenas num mínimo local Filho1 antes Filho2 antes Filho1 depois Filho2 depois : 1101111000011110 : 1101100100110110 : 1100111000011110 : 1101101100110100 Outro exemplo: Fonte: http://www.icmc.usp.br/~andre/research/genetic/index.htm DSC/CCT/UFCG 27 Algoritmos Genéticos (a) (b) Pai 1 Pai 1 Selecionamos um ponto de corte Operadores em Conjunto Pai 2 Pai 2 Depois do operador de crossover Filho 1 Filho 1 Depois do operador de mutação Filho 2 DSC/CCT/UFCG (d) Gen alterado pela mutação Filho 2 (c) 28 Algoritmos Genéticos Módulo da População Responsável pelo controle da população. Por simplicidade, população não pode crescer permite que armazenemos a população em um vetor de tamanho constante. Pais têm que ser substituídos conforme os filhos vão nascendo Pode parecer estranho, visto que estamos acostumados a ver a população humana sempre crescendo. Entretanto, simula bem ambientes de recursos limitados. 29 DSC/CCT/UFCG Algoritmos Genéticos Módulo da População Forma simples de obtenção: A cada atuação do operador genético são criados dois filhos. Estes vão sendo armazenados em um espaço auxiliar até que o número de filhos criado seja igual ao tamanho da população. Neste ponto o módulo de população entra em ação. Todos os pais são então descartados e os filhos copiados para cima de suas posições de memória, indo tornar-se os pais da nova geração. 30 DSC/CCT/UFCG Algoritmos Genéticos Aspectos Práticos A implementação prática de um AG requer atenção para várias questões: 1. Escolha da Função de Avaliação/Aptidão 2. Problemas de convergência 3. Escolha da Técnica de Seleção 4. Lacuna entre gerações (generation gap) 31 DSC/CCT/UFCG Algoritmos Genéticos Algoritmo Genético Aplicado ao Caixeiro Viajante 1. Uma população inicial é gerada aleatoriamente. Cada indivíduo da população é uma rota. Lembrando que as cidades não podem ser repetidas. 2. Cada indivíduo é avaliado definindo seu fitness (valor de adequação) que é inversamente proporcional a distância total da rota. 3. Um número aleatório de indivíduos (pode ser predefinido) é selecionado na roleta. 4. Alguns dos indivíduos selecionados passam por alterações, através dos operadores genéticos (crossover e mutação). 5. Uma nova população é gerada e repete-se os passos do 2 ao 5 até que um número pré-definido de gerações seja alcançado. 32 DSC/CCT/UFCG Algoritmos Genéticos Exemplo de simulação: solução para o Problema do Caixeiro Viajante (PCV) http://lsin.unisantos.br/lvcon/experimento?id=3 33 DSC/CCT/UFCG