Computação Evolucionária Aplique os algoritmos genéticos com Python e Numpy
Eduardo Pereira
Sobre o livro
A computação ubíqua é uma realidade, principalmente após a popularização de smartphones. O poder computacional de um dispositivo móvel é comparável ao de um computador pessoal. Esse fato aninhado com disseminação de uso de redes sociais ajudou a alavancar o uso cotidiano da Inteligência Artificial (IA), a qual está presente nos sistemas de tradução, assistentes pessoais, propagandas customizadas, exames médicos, controle de tráfego aéreo, sites de reservas e muitos outros sistemas. Mesmo que de forma indireta, sofremos a influência de algum sistema de computacional inteligente.
Contudo, o termo IA tem um caráter amplo, podendo ser dividido em quatro grandes áreas: a de criar sistemas que agem como humanos, pensam como humanos, agem racionalmente ou pensam racionalmente. Como exemplo de cada área podemos citar: agir como humanos - serviços de atendimento ao cliente que simulam conversas; agir racionalmente - robôs que limpam a casa sem intervenção humana; pensar racionalmente - sistemas complexos que usam banco de dados e lógica para tomar decisões; pensar como humano - ainda uma ficção, como os cérebros positrônicos dos contos de Isaac Asimov.
De forma geral, os algoritmos de IA são baseados em meta-heurísticas. O termo "meta" se refere a algo que está além, ou seja, aquilo que extrapola. Já "heurística" se refere a processos cognitivos usados para tomar decisões racionais. Como exemplo de heurística, temos o ato de refazer todos os passos anteriores para procurar algo que perdemos. Nesse contexto, redes neurais artificias, que funcionam baseadas em sistemas biológicos podem ser classificadas como meta-heurísticas, nas quais se busca criar um sistema capaz de pensar como humano.
Uma outra linha de meta-heurística de IA são aquelas baseadas no processo de evolução das espécies, atribuídas a Charles Darwin. Esse será o foco do livro, apresentar a criação de um framework computacional para a criação de sistemas inteligentes baseados em computação evolucionária. Neste livro serão apresentadas as bases teóricas do chamado algoritmo genético, em que se coloca populações de indivíduos para evoluir em busca de se resolver um problema. Uma das aplicações mais fascinantes da atualidade da computação evolucionária é o da criação de programas capazes de criar programas, a programação genética. Outras aplicações relevantes são determinação de melhor rota de veículos, design de circuitos, classificação de clientes, alocação de espaço físico e determinação automática de estruturas de redes neurais artificiais. Com esse último caso, vemos que existe uma interoperabilidade entre os diversos ramos da IA. Isso nos indica a relevância de se aprofundar na computação evolucionária.
Ao longo do livro alinharemos teoria e prática. Mesmo na primeira parte, em que se apresentam os fundamentos de Algoritmos Genéticos, veremos como aplicar de forma profunda fundamentos de Programação Orientada a Objetos e a utilização da biblioteca Numpy como uma extensão da linguagem Python para operar com vetores e matrizes. Também veremos como aproveitar a biblioteca Matplotlib para a manipulação de gráficos 3D e geração de animações com os dados gerados. Na segunda parte do livro, será apresentada uma aplicação prática de algoritmo genético, na solução de labirintos. Buscamos casar conceitos fundamentais de teoria da Ciência da Computação com o processo de adaptar problemas para serem resolvidos com o que teremos apresentado nos capítulos.
Pré-requisitos e público-alvo
Este livro foi escrito para quem já possui conhecimento de programação na linguagem Python e entende os elementos básicos de Programação Orientada a Objetos, mas que procura avançar seus conhecimentos na área de Inteligência Artificial e Ciência de Dados.
Ao longo do livro, teremos tanto prática como teoria, o que permite que o desenvolvedor ou a desenvolvedora possa contextualizar seu conhecimento prévio aos novos conceitos abordados na obra para acompanhá-la com mais proveito.
Os exemplos e códigos foram desenvolvidos pensando na versão 3.6 da linguagem Python.
Sobre o autor
Eduardo S. Pereira é mestre e doutor em Astrofísica, pelo Instituto Nacional de Pesquisas Espaciais (INPE). Possui graduação em Física pela Universidade Federal de São João Del-Rei. Também realizou pós-doutorado em Astrofísica, pelo INPE, e em Astronomia Observacional/Computacional, pela Universidade de São Paulo (USP).
Ele atua principalmente nos seguintes temas de pesquisa: Processamento de imagens e Visão Computacional, Inteligência Artificial, Cosmologia e Astrofísica Computacional. Atualmente, é professor do curso de Ciência da Computação da Faculdade Anhanguera, e desenvolve pesquisas na área de visão computacional no Laboratório de Modelagem e Estudos de Recursos Renováveis de Energia (LABREN), no Centro de Ciência do Sistema Terrestre (CCST) do INPE. Trabalha com Python há mais de 10 anos.
Sumário
- Parte 1: Algoritmo genético
- 1 Introdução
- 1.1 Máquina de Turing
- 1.2 Preparando o ambiente
- 1.3 Algoritmo genético: conceitos gerais
- 2 Produção e avaliação de indivíduos
- 2.1 Criando uma população
- 2.2 Função de avaliação
- 3 Seleção
- 3.1 Seleção via roleta
- 3.2 Seleção por classificação
- 3.3 Seleção por torneio
- 4 Cruzamento
- 4.1 Cruzamento de um ponto
- 4.2 Cruzamento em k-pontos
- 4.3 Embaralhamento
- 5 Mutação
- 5.1 Mutação flip
- 5.2 Mutação de dupla troca
- 5.3 Mutação de sequência reversa
- 6 Evolução
- 6.1 A sobrevivência do mais adaptado: integrando os operadores genéticos
- 6.2 Encontrando o máximo
- 7 A evolução através da tragédia
- 7.1 Operador Epidêmico
- 8 Disponibilização do pacote
- 8.1 Organização do pacote
- 8.2 Subindo o pacote para o PyPi
- Parte 2: Estudo de caso
- 9 Explorando o uso de Algoritmos Genéticos
- 10 Gerando labirintos
- 10.1 Grafos
- 10.2 Gerador de labirinto
- 11 Da imagem ao grafo
- 11.1 Do pixel ao vértice
- 12 Encontrando caminhos
- 12.1 Avaliação de indivíduo
- 12.2 Algoritmo genético
- 13 Conclusões
- 13.1 Referências bibliográficas
Dados do produto
- Número de páginas:
- 166
- ISBN:
- 978-65-86110-34-0
- Data publicação:
- 09/2020