Baixe o app para aproveitar ainda mais
Prévia do material em texto
FACULDADE SANTA TERESINHA CURSO: SISTEMAS DE INFORMAÇÃO DISCIPLINA: INTELIGÊNCIA ARTIFICIAL PROF. CAIO MAGNO AGUIAR DE CARVALHO Lucas Mendes Silva Wilson Ferreira Luz ALGORITMOS GENÉTICOS São Luís – MA 2021 INTRODUÇÃO Nos últimos anos, a necessidade de se resolverem problemas que envolvem um grande número de variáveis, muitas vezes mal definidas e de natureza adaptativa, tem impulsionado a pesquisa e utilização de novas formas de sistemas de processamento. Tais sistemas têm por objetivo a resolução de problemas intratáveis, ou tratados de forma ineficiente, por sistemas "tradicionais" de computação. Dentro dessa perspectiva, a inteligência artificial (IA) é uma das áreas da Ciência da Computação que mais se empenha em resolver e implementar soluções para diversos tipos de problemas. Para que seja possível implementar aplicações e conseguir resolver determinadas problemas do cotidiano, a IA oferece uma gama variada de técnicas, das quais as mais utilizadas são: Redes Neurais, Sistemas Baseados em Casos, Sistemas Especialistas e Algoritmos Genéticos. Dentro deste contexto, este relatório terá enfoque pertinente técnica de algoritmos genéticos (AG), sendo esta, aplicada na resolução de problemas em duas grandes áreas: otimização1 e aprendizado de máquina. Os AG’s são algoritmos probabilísticos que fornecem um mecanismo de busca paralela e adaptativa baseado no princípio de sobrevivência dos mais aptos e na reprodução, sendo a metáfora da teoria da evolução das espécies iniciada pelo Fisiologista e Naturalista inglês Charles Darwin. Os princípios da natureza nos quais os AG’s se inspiram são simples. Como mencionado, se baseia na teoria de Darwim, ou seja, o princípio de seleção privilegia os indivíduos mais aptos com maior longevidade e, portanto, com maior probabilidade de reprodução. Indivíduos com mais descendentes têm mais chance de perpetuarem seus códigos genéticos nas próximas gerações. Tais códigos genéticos constituem a identidade de cada indivíduo e estão representados nos cromossomos. Estes princípios são imitados na construção de algoritmos computacionais que buscam uma melhor solução para um determinado problema, através da evolução de populações de soluções codificadas através de cromossomas artificiais. 1 É a busca da melhor solução para um dado problema. Consiste em tentar várias soluções e usar a informação obtida para conseguir soluções cada vez melhores. FUNDAMENTAÇÃO TEÓRICA Os AG’s empregam conceitos relacionados a Computação Evolucionária, onde esta, compreende um conjunto de técnicas de busca e otimização inspiradas na evolução natural das espécies. Desta forma, cria-se uma população de indivíduos que vão reproduzir e competir pela sobrevivência. Os melhores sobrevivem e transferem suas características a novas gerações. Segundo Banzhaf (1998) as técnicas atualmente incluem: Programação Evolucionária, Estratégias Evolucionárias, Algoritmos Genéticos e Programação Genética. Estes métodos estão sendo utilizados, cada vez mais, pela comunidade de inteligência artificial para obter modelos de inteligência computacional (Barreto 1997). Algoritmos genéticos são usados para fins de otimização. Além disso, o algoritmo genético é baseado no método de busca aleatória. O principal problema de buscas aleatórias é o fato de que nós não podemos prever quanto tempo será necessário para a resolução do problema. Para evitar perdas de tempo significativas, são aplicados métodos desenvolvidos na biologia. Especificamente, métodos desenvolvidos nos estudos da origem das espécies e da evolução. Apenas os animais mais aptos sobrevivem durante o processo evolucionário. Como resultado disso, a aptidão de uma população cresce, o que lhe permite se ajustar ao ambiente dinâmico. COMPONENTES PRINCIPAIS Indivíduo O indivíduo é meramente um portador do seu código genético. O código genético é uma representação do espaço de busca do problema a ser resolvido, em geral na forma de sequências de bits. Por exemplo, para otimizações em problemas cujos valores de entrada são inteiros positivos de valor menor que 255 podemos usar 8 bits, com a representação binária normal, ou ainda uma forma de código Gray. Problemas com múltiplas entradas podem combinar as entradas em uma única sequência de bits, ou trabalhar com mais de um "cromossomo", cada um representando uma das entradas. O código genético deve ser uma representação capaz de representar todo o conjunto dos valores no espaço de busca, e precisa ter tamanho finito. Abaixo, um quadro com a representação da codificação: Figura 1. Representação da codificação binária e de Gray Fonte: Próprios autores (2021) Seleção Em geral, usa-se o algoritmo de seleção por "roleta", onde os indivíduos são ordenados de acordo com a função-objetivo e lhes são atribuídas probabilidades decrescentes de serem escolhidos, probabilidades essas proporcionais à razão entre a adequação do indivíduo e a soma das adequações de todos os indivíduos da população. A escolha é feita então aleatoriamente de acordo com essas probabilidades. Dessa forma conseguimos escolher como pais os mais bem adaptados, sem deixar de lado a diversidade dos menos adaptados. Outras formas de seleção podem, ainda, ser aplicadas dependendo do problema a ser tratado. Como exemplos pode-se citar a seleção por "torneio" (onde são selecionados diversos pequenos subconjuntos da população, sendo selecionado o indivíduo de maior adequação de cada um desses grupos), a seleção por "classificação" ou "ranking" (semelhante à seleção por "roleta", com a diferença de que a probabilidade de seleção é relacionada à sua posição na ordenação dos indivíduos da população e não à sua adequação em si) e a seleção por "truncamento" (onde são selecionados os N melhores indivíduos da população, descartando-se os outros). Figura 2. Seleção por roleta Fonte: obitko.com (2021) Reprodução Tradicionalmente, é dividida em três etapas: acasalamento, recombinação e mutação. O acasalamento é a escolha de dois indivíduos para se reproduzirem (geralmente gerando dois descendentes para manter o tamanho populacional). A recombinação, ou crossing-over é um processo que imita o processo biológico homônimo na reprodução sexuada: os descendentes recebem em seu código genético parte do código genético do pai e parte do código da mãe. Esta recombinação garante que os melhores indivíduos sejam capazes de trocar entre si as informações que os levam a ser mais aptos a sobreviver, e assim gerar descendentes ainda mais aptos. Por último vem as mutações, que são feitas com probabilidade a mais baixa possível, e tem como objetivo permitir maior variabilidade genética na população, impedindo que a busca fique estagnada em um mínimo local. Em linhas gerais os AG’s , são implementados como uma simulação de computador em que uma população de representações abstratas de solução é selecionada em busca de soluções melhores. A evolução geralmente se inicia a partir de um conjunto de soluções criado aleatoriamente e é realizada por meio de gerações. A cada geração, a adaptação de cada solução na população é avaliada, alguns indivíduos são selecionados para a próxima geração, e recombinados ou mutados para formar uma nova população. A nova população então é utilizada como entrada para a próxima iteração do algoritmo. Assim, utilizam conceitos provenientes do princípio de seleção natural para abordar uma série ampla de problemas, em especial de otimização. Robustos, genéricos e facilmente adaptáveis, os AG’s consistem em uma técnica amplamente estudada e utilizada em diversas áreas. Basicamente, o que um algoritmo genético faz é criar uma população de possíveis respostas para o problema a ser tratado (inicialização) para depois submetê-la ao processode evolução, constituído pelas seguintes etapas: avaliação: avalia-se a aptidão das soluções (indivíduos da população) — é feita uma análise para que se estabeleça quão bem elas respondem ao problema proposto; seleção: indivíduos são selecionados para a reprodução. A probabilidade de uma dada solução i ser selecionada é proporcional à sua aptidão; cruzamento: características das soluções escolhidas são recombinadas, gerando novos indivíduos; mutação: características dos indivíduos resultantes do processo de reprodução são alteradas, acrescentando assim variedade à população; atualização: os indivíduos criados nesta geração são inseridos na população; finalização: verifica se as condições de encerramento da evolução foram atingidas, retornando para a etapa de avaliação em caso negativo e encerrando a execução em caso positivo. Após vários ciclos de evolução a população deverá conter indivíduos mais aptos. Figura 3. Fluxograma da estrutura de funcionamento de um AG tradicional. Fonte: Adaptado de Diogo C. Lucas (2002) A figura 1, se transformada também pode ser definida na forma de um algoritmo, sendo: Figura 4. Algoritmo genético simples Fonte: Adaptado de Diogo C. Lucas (2002) O primeiro passo de um Algoritmo o Genético típico a geração de 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. Durante o processo evolutivo, esta população avaliada e cada cromossomo recebe uma nota, refletindo a qualidade da solução que ele representa. Em geral, os cromossomos mais aptos são selecionados e os menos aptos são descartados (Darwinismo). OPERADORES DOS ALGORITMOS GENÉTICOS O cruzamento e a mutação são as partes mais importantes do algoritmo genético. O desempenho é influenciado principalmente por esses dois operadores. Antes de detalharmos mais cruzamento e mutação, vejamos mais alguma informação sobre cromossomas. A codificação de um cromossomo Binaria - Um cromossomo deve de alguma maneira conter a informação da solução que ele representa. A forma mais comum de codificar é uma série (string) binária. Um cromossoma pode então se parecer como isto: Quadro 1. Cruzamento Cromossomo 1 1101100100110110 Cromossomo 2 1101111000011110 Fonte: obitko.com (2021) Cada cromossomo é representado por uma série binária. Cada bit da série representa alguma característica da solução. É claro, há muitas outras formas de codificar. A codificação dependerá principalmente do problema a ser solucionado. Por exemplo, um pode codificar diretamente números inteiros ou reais, algumas vezes é útil codificar algumas permutações, e assim por diante. Por Permutação - A Codificação por Permutação pode ser usada em problemas que envolvem ordenação como o "Problema do Caixeiro-Viajante" ou problemas de ordenação de tarefas. Na Codificação por Permutação, cada cromossoma é uma série de números que representa uma posição em uma sequência. Quadro 2. Exemplo de cromossoma com codificação por permutação Cromossoma A 1 5 3 2 6 4 7 9 8 Cromossoma B 8 5 6 7 2 3 1 4 9 Fonte: obitko.com (2021) A Codificação por Permutação é útil para solução de problemas de ordenação. Para alguns tipos de cruzamentos e mutações, são necessárias correções para que os cromossomas fiquem consistentes (isto é, contenham sequências reais) para alguns problemas. Exemplo de Problema: Problema do Caixeiro Viajante (Travelling Salesman Problem - TSP) 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 sequê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 cromossomas descrevem a ordem em que o caixeiro visitará as cidades. Codificação de Valores A codificação direta dos valores pode ser usada em problemas em que são usados valores mais complicados tais como números reais. Usar codificação binária para esse tipo de problema seria muito difícil. Na Codificação de Valores, cada cromossoma é uma sequência de alguns valores. Esses valores podem ser qualquer coisa relacionada com o problema, tais como: números reais, caracteres ou qualquer outro objeto. Quadro 2. Exemplo de cromossoma com codificação de valores Cromossoma A 1.2324 5.3243 0.4556 2.3293 2.4545 Cromossoma B ABDJEIFJDHDIERJFDLDFLFEGT Cromossoma C (atrás), (atrás), (direita), (frente), (esquerda) Fonte: obitko.com (2021) Codificação de Valores é uma boa escolha para alguns problemas especiais. Entretanto, para essa codificação, é frequentemente necessário desenvolver um método de cruzamento e mutação específico para o problema. Exemplo de Problema: Cálculo de 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 dos cromossomas representam os pesos da rede neural. Codificação em Árvore Codificação em Árvore é usada principalmente para desenvolver programas ou expressões, isto é, para programação genética. Na Codificação em Árvore cada cromossoma é uma árvore de alguns objetos, tais como funções ou comandos de uma linguagem de programação. Figura 5. Exemplo de cromossoma com codificação em árvore Cromossomo A Cromossomo B ( + x ( / 5 y ) ) ( do_until step wall ) Fonte: obitko.com (2021) A Codificação em Árvore é útil para desenvolver programas ou qualquer outra estrutura que pode ser codificada em árvores. A programação na linguagem LISP é frequentemente utilizada para este propósito uma vez que os programas em LISP são diretamente representados na forma de árvores e podem ser facilmente processados como uma árvore, de forma que o cruzamento e a mutação podem ser realizados com relativa facilidade. Exemplo de Problema: Encontrar uma função que aproxime um dado par de valores O problema: São dados os valores de entrada e de saída. A tarefa é encontrar uma função que forneça a melhor saída (isto é, a que dê o resultado mais próximo do desejado) para todas as entradas. Cruzamento Depois de decidirmos que codificação usaremos, podemos proceder a operação de cruzamento. O cruzamento opera em determinados genes dos cromossomos dos pais e cria novas descendências. A maneira mais simples de fazer isso é escolher aleatoriamente alguns pontos de cruzamento e copiar tudo o que vem antes desse ponto de um dos pais e então copiar tudo o que vem depois desse ponto do outro pai. O Cruzamento pode ser ilustrado da seguinte maneira: Quadro 3. Cruzamento Cromossomo 1 11011 | 00100110110 Cromossomo 2 11011 | 11000011110 Descendência 1 11011 | 11000011110 Descendência 2 11011 | 00100110110 Fonte: obitko.com (2021) Há outras maneiras de fazer cruzamento. Por exemplo, nós podemos escolher mais pontos de cruzamento. O cruzamento pode ser um pouco complicado e depender principalmente da codificação dos cromossomas. Cruzamentos específicos feitos para problemas específicos podem melhorar o desempenho dos algoritmos genéticos. Mutação Depois que um cruzamento é realizado, acontece a mutação. A mutação tem a intenção de prevenir que todas as soluções do problema dessa população caiam em um ponto ótimo local. A operação de mutação muda aleatoriamente a descendência criada pelo cruzamento. No caso de uma codificação binária, podemos mudar aleatoriamente alguns bits escolhidos de 1 para 0, ou de 0 para 1. A mutação pode então ser ilustrada como a seguir: Quadro 4. Mutação por descendência Descendência Original 1 1101111000011110 Descendência Original 2 1101100100110110 Descendência Mutada 1 1100111000011110 Descendência Mutada 2 1101101100110110Fonte: obitko.com (2021) A técnica da mutação (da mesma forma que a do cruzamento) depende muito da codificação dos cromossomas. Por exemplo, quando codificamos permutações, mutações podem ser realizadas como uma troca de dois genes. IMPLEMENTAÇÃO DE ALGORITMOS GENÉTICOS Para ilustrar o uso de um algoritmo genético, utilizaremos o exemplo de Kumazawa (2003), aluno d curso de ciência da computação na USP. Então, o primeiro passo na implementação do algoritmo genético é gerar a população inicial. No algoritmo genético aqui desenvolvido, cada membro desta população é um vetor de comprimento L denominado de cromossomo do indivíduo. O indivíduo formado é uma representação da matriz de transformação . Desse modo, os componentes do cromossomo do indivíduo são os elementos determinantes da matriz de escala e os ângulos que determinam a matriz , como ilustra a figura 6: Figura 6. Elementos componentes do cromossomo de cada indivíduo da população gerada pelo algoritmo genético Fonte: Adaptado de Kumazawa (2003) O algoritmo genético implementado gera a população inicial aleatoriamente (figura 7). Figura 7. Visão geral de funcionamento do algoritmo genético Fonte: Adaptado de Kumazawa (2003) A partir de então os indivíduos que formam a população trocam as informações dos seus genes segundo o operador de recombinação (crossover), que possibilita formar novos indivíduos que podem possuir tanto as melhores como as piores características dos indivíduos iniciais. Os pontos de recombinação são estabelecidos aleatoriamente. A figura 8 representa o código em MATLAB que implementa a função de crossover. Figura 8. Operador de crossover implementado no MATLAB: pai 1 e pai 2 são os cromossomos que serão cruzados; prob cross representa a quantidade de pontos que sofreram recombinação; filho cross 1 é o resultado da recombinação dos cromossomos pais Fonte: Adaptado de Kumazawa (2003) Após serem gerados, os indivíduos passam através de um operador de mutação. Esse operador é responsável por alterar determinadas partes aleatórias do gene do indivíduo de forma a buscar uma melhoria do indivíduo gerado. O resultado desse operador pode ser positivo caso o indivíduo gerado seja melhor que os indivíduos geradores dele ou negativo caso o indivíduo mutado seja inferior aos indivíduos geradores. A Figura 9 representa o código em MATLAB que implementa a função de mutação. Figura 9. Operador de mutação implementado no MATLAB: filho representa o cromossomo do indivíduo a sofre mutação; prob mutacao representa a porcentagem do indivíduo que sofrerá alteração; filho mutado representa o resultado da mutação sobre o cromossomo de entrada Fonte: Adaptado de Kumazawa (2003) Para definir quem são os indivíduos mais apropriados para resolver o problema deve-se definir uma função de avaliação (fitness) do algoritmo genético. Após passar pela função de avaliação, os indivíduos são ordenados segundo os valores obtidos pela função de avaliação. O melhor indivíduo, isto é, aquele com menor valor de avaliação, é escolhido para integrar uma nova população. Os outros indivíduos que completarão a nova população são criados da mesma forma que os indivíduos iniciais. Denomina-se de geração cada uma das interações feitas pelo algoritmo genético ao obter uma nova população. Denominamos por execução cada uma das rodadas que o algoritmo realiza com uma população por um determinado número de gerações. Desse modo são executadas tantas iterações quanto forem necessárias para que o algoritmo determine um resultado razoável. Assim, tendo determinado um indivíduo que possua um valor de erro segundo a função de fitness que seja da ordem de , obtêm-se um cromossomo que gera um indivíduo próximo ao indivíduo representativo da matriz de transformação que leva as matrizes abstratas e calculadas às matrizes e respectivamente procuradas. APLICAÇÕES DOS ALGORITMOS GENÉTICOS Os Algoritmos genéticos têm sido utilizados para resolver problemas complexos (tais como os problemas NP-difíceis2), para aprendizado de máquinas e também para o desenvolvimento de programas simples. Eles têm sido também usados em algumas aplicações artísticas como pintura e música. Por ser um tema multidisciplinar, os AGs possuem aplicações em diversas áreas, como, por exemplo, para a resolução do problema da inversão sísmica, no qual os AGs são utilizados para determinar a estrutura dos dados de subsolo a partir da prospecção geológica a fim de obter de uma seção geológica ou um modelo 3D (LINDEN, 2008). Silveira e Barone (1998) apresentam em seu artigo o uso dos AGs para construção de jogos educativos computadorizados que auxiliam na aprendizagem dos alunos, além de estimularem a criatividade, atenção e memória. Um último exemplo de aplicação mais recente dos AGs é seu uso para montagem e seleção de portfólios de crédito, para que estes possam ser utilizados como referência para definições de orçamentos futuros, tendo como base uma rentabilidade alvo para o ano desejado, apoiando assim gestores de portfólio de crédito durante a tomada de decisões (BORDIGNON, 2020). O uso de algoritmos genéticos se estende a um dos recursos mais preciosos da humanidade, o petróleo e o gás, de acordo com LINDEN (2008), o problema da inversão sísmica, que é extremamente importante no campo da geologia, consiste na determinação da estrutura dos dados de subsolo a partir da prospecção geológica, tendo como objetivo primário obter uma seção geológica ou um modelo 3D. Este problema é extremamente suscetível à aplicação de algoritmos genéticos, pois sua função objetivo é extremamente irregular, sendo altamente não linear, possuindo muitos mínimos e máximos locais e podendo apresentar descontinuidades. Uma abordagem bastante tradicional (MONTESINOS, 2005), usando apenas algoritmos genéticos, foi usada para a inversão de dados de anomalias gravitacionais correspondendo a contrastes de densidade fixos a priori para a obtenção da distribuição tridimensional de fontes sub-superficiais. 2 NP-difícil (ou NP-hard, ou NP-complexo) na teoria da complexidade computacional, é uma classe de problemas que são, informalmente, "Pelo menos tão difíceis quanto os problemas mais difíceis em NP Foi apresentado em 1999 na CEC99 – IEEE – International Conference on Evolutionary Computation um ambiente interativo, utilizando Algoritmos Genéticos, para a avaliação de músicas (sequências de acordes) tocadas em arquivos MIDI. No caso, os indivíduos da população foram definidos em grupos de quatro vozes (soprano, contralto, tenor e baixo) ou coros. Cada um é avaliado segundo três critérios: melodia, harmonia e oitavas. A composição destes três critérios definia a aptidão (fitness) definida pela função de seleção, que retorna o melhor indivíduo ou melhor coro. Um ciclo genético é operacionalizado, criando novos indivíduos dos anteriores e procurando sempre pelo melhor. Quando um novo grupo é selecionado, ele é tocado em MIDI. A duração do ciclo genético determina o ritmo da evolução. O sistema criado foi denominado Vox Populi. (FOGEL, 1999). Os AG’s podem ser utilizados também em Telecomunicações, Segundo Blanchard (1994), no WCCI'94 – World Congress on Computational Intelligence – ocorrido em Orlando, na Flórida, mostrou uma série de soluções promissoras a situações reais utilizando Algoritmos Genéticos. Blanchard mostrou o caso da US West, uma companhia regional de telecomunicações do estado do Colorado, que vem usando um sistema baseado em AGs que possibilita projetar, em duas horas, redes óticas especializadas, trabalho que levaria seis meses utilizando especialistas humanos. O sistema produz resultados ainda 10% (dez por cento) melhores que os realizados pelo homem. A companhia estimava, naquele momento, que o sistema possibilitará uma economia de 100 milhões de dólares até o final do século. VANTAGENSE DESVANTAGENS DOS AG’s Uma vantagem dos AG é o seu paralelismo. AG percorre o espaço das soluções usando mais indivíduos (e com genótipos em vez de fenótipos) de forma que eles são menos susceptíveis de "enroscar" em um extremo local do que os outros métodos. Eles também são muito simples de implementar. Uma vez que você implantou a parte básica do AG, você simplesmente precisa escrever um novo cromossomo (apenas um objeto) para resolver outro problema. Com uma codificação, você simplesmente muda a função de adequação e está tudo pronto. Entretanto, para alguns problemas, a escolha e implementação da função de adequação pode ser difícil. A desvantagem dos AG é o tempo de processamento. Os AG podem ser mais lentos do que os outros métodos. Porém, desde que possamos terminar o cálculo sem restrições severas de tempo, o tempo mais longo é aceitável (principalmente com os computadores cada vez mais rápidos). Para se ter uma ideia sobre os tipos de problemas resolvidos com AG, é apresentada a seguir uma lista de algumas aplicações: • Sistemas dinâmicos não lineares - predição, análise de dados; • Projeto de Redes Neurais, ambos: determinação da arquitetura e dos pesos; • Trajetória de Robôs; • Desenvolvimento de programas em LISP (programação genética); • Planejamento estratégico; • Determinação da forma de moléculas de proteínas; • Determinação de rotas e sequenciamento de tarefas; • Determinação de funções para criação de imagens. CONCLUSÃO Os AG’s são algoritmos de busca ou otimização inspirados na seleção natural e reprodução genética que combinam processos naturais, necessários à evolução dos mais aptos, com troca de informação estruturada, porém randômica, para formar um algoritmo de busca baseado na habilidade inovadora da busca humana (GOLDBERG, 1989). Os AG’s possuem uma larga aplicação em muitas áreas científicas, entre as quais podem ser citados problemas de otimização de soluções, aprendizado de máquina, desenvolvimento de estratégias e fórmulas matemáticas, análise de modelos econômicos, problemas de engenharia, diversas aplicações na Biologia como simulação de bactérias, sistemas imunológicos, ecossistemas, descoberta de formato e propriedades de moléculas orgânicas (MITCHELL, 1995). Como visto ao longo deste trabalho, os algoritmos genéticos fazem uso de modelos computacionais baseados nos processos naturais para resolver problemas, e, apesar de existir diversos modelos computacionais, todos eles têm em comum o conceito de simulação da evolução das espécies através da seleção, mutação e reprodução, processos que são totalmente dependentes do desempenho dos indivíduos desta espécie dentro do ambiente (LINDEN, 2008). Referências bibliográficas Algoritmos Genéticos – Matemática. Mql5.com, 2016. Disponível em <https://www.mql5.com/pt/articles/1408>. Acesso em 27 de nov. 2021. BARRETO, J. Inteligência Artificial. No Limiar do Século XXI. ISBN 859003822X. ρρρ Edições, 1997. BANZHAF, W; NORDIN, P.; KELLER, R. E. & FRANCONE, F. D. Genetic Programming: an introduction. ISBN 155860510X. Morgan Kaufmann, 1998 BLANCHARD, W. Notes on the simulation of evolution, IEEE Transactions on Neural Networks, Vol. 5:1, pp. 130, 1994. BORDIGNON, A. W. B. Algoritmo Genético Multiobjetivo: Uma Aplicação Para Seleção De Portfólios De Crédito. Orientador: Profa. Dra. Élia Yathie Matsumoto. 2020. Dissertação de mestrado - Engenharia Financeira, Fundação Getúlio Vargas – Escola de Economia de São Paulo, São Paulo, 2020. FOGEL, D. Evolutionary computation toward a new philosophy of machine intelligence, 2nd edition, IEEE Press, 1999. GOLDBERG, David E. Genetic Algorithms in Search, Optimization and Machine Learning. 1ed. Boston: Addison-Wesley Publishing Company, 1989. 432 p. Introdução aos Algoritmos Genéticos.Obtiko.com, 2021. Disponível em < https://www.obitko.com/tutorials/genetic-algorithm/portuguese/encoding.php>. Acesso em 27 de nov. 2021. KUMAZAWA, Anselmo Hitoshi. Funcionamento do algoritmo genético. USP, 2003. Disponível em < https://bcc.ime.usp.br/tccs/2003/anselmo/node12.html>. Acesso em em 28 de nov. 2021. LINDEN, R., “Algoritmos Genéticos”, 1ª Edição, Ed. Brasport, Brasil,2006. LINDEN, R. Algoritmos Genéticos (2a edicao). Brasport, Brasil, 2008. MONTESINOS, F. G; ARNOSO, J.; VIEIRA, R., 2005. Using a genetic algorithm for 3-D inversion of gravity data in Fuerteventura (Canary Islands), Int J Earth Sci (Geol Rundsch) n. 94: pp. 301–316>. MITCHELL, Melanie. Genetic Algortihms: An Overview. Complexity, p. 31-39, 1995.
Compartilhar