Algoritmos Genéticos
por Mayanne Aline Maia de Freitas

alt_text

Se você veio parar aqui você deve ter ideia do que consiste a teoria da evolução e de como os algoritmos funcionam, mas para desencargo de consciência, vamos refrescar a memória: a teoria de evolução diz que todos os organismos surgiram de um único ancestral comum, e que, com o acúmulo de pequenas mudanças ao longo de várias gerações, se especiaram e deram origem à toda a biodiversidade hoje existente (como também a extinta). Já um algoritmo é uma sequência ordenada, finita e objetiva de passos que levam a um determinado resultado. Aqui vale ressaltar uma característica primordial de todo algoritmo, a neutralidade do substrato, ou seja, não importa o que estamos utilizando como dados de entrada, o que importa é o arranjo dos dispositivos. E essa foi uma das características que um dos principais filósofos naturalistas do século XX levou em consideração ao pensar nos algoritmos evolutivos.

Em 1995, em seu livro intitulado a Perigosa Ideia de Darwin, Daniel Dennett propôs a ideia de que a seleção natural irá funcionar de forma algorítmica a qualquer elemento que possua: (1) variedade entre os indivíduos (ou seja, as unidades), (2) fatores ambientais que interfiram nos indivíduos, ou seja, seleção diferencial que beneficia mais alguns indivíduos do que outros, e por fim (3) hereditariedade dessas características que variam, ou seja, os indivíduos são capazes de fazer réplicas ou cópias de si mesmos.

Para além da ideia de Dennett, de que a seleção natural funciona como um algoritmo, temos atualmente uma área conhecida como computação evolucionária, que consiste em um conjunto de técnicas que buscam por soluções para determinados problemas (sobretudo os que demandam tempo exaustivo de processamento) usando princípios da evolução como a seleção natural, mutação e a herdabilidade genética. Com base nessas e em outras características, os algoritmos evolutivos vão funcionar de forma similar à evolução: as soluções menos aptas para o problema em questão são eliminadas, enquanto as opções mais adequadas e viáveis são mantidas e reavaliadas posteriormente até que sejam obtidas ações ideais para atingir os resultados desejados.

Os algoritmos evolutivos mais conhecidos são os algoritmos genéticos. Para entendermos bem esses algoritmos, temos que ter em mente as ideias e premissas envolvidas na evolução. A primeira delas é a de que uma população de indivíduos em um determinado ambiente se adapta às variações deste. A segunda ideia é a de que esses indivíduos se reproduzem e dão origem a uma nova geração. E a cada nova geração os indivíduos vão sendo selecionados de acordo com a sua aptidão ao ambiente e assim a espécie vai se tornando cada vez mais apta a viver naquele determinado local.

No algoritmo genético temos algo similar ocorrendo. Por exemplo, podemos ter uma população inicial que é gerada com n indivíduos sendo cada um deles equivalente a um cromossomo contendo x genes, que nesse caso, representará o que especificamente sofrerá algum tipo de variação. Esses indivíduos são submetidos a uma função de avaliação ou função de aptidão que simbolizam o ambiente ao qual eles devem se adaptar. Essa função avalia os genes dos indivíduos e atribui uma nota de aptidão distinguindo os mais adaptados do menos adaptados. No passo seguinte é realizada uma seleção, na maior parte das vezes por sorteio, de uma parte da população para que eles se reproduzam. Durante o sorteio, os indivíduos que obtiveram uma maior nota de aptidão possuem uma maior chance de serem selecionados para reproduzir, do que aqueles que obtiveram uma nota mais baixa. Após a seleção, é realizada a reprodução, e nesse momento são aplicados os seguintes operadores genéticos: recombinação genética ou crossover (variabilidade), mutação (aleatoriedade) e elitismo que seleciona automaticamente o indivíduo com a maior nota de aptidão para garantir que as melhores características permaneçam na população.

Uma vez que os operadores foram aplicados e novos indivíduos foram gerados durante a reprodução, a população inicial é atualizada com esses novos indivíduos mais adaptados gerando assim uma nova população. O processo completo que envolve a avaliação, seleção e reprodução é chamado de geração (figura 1). A cada geração o processo se repete com a nova população gerada, e o algoritmo vai repetindo o processo até que se obtenha um determinado número de gerações ou um indivíduo (solução) que seja ideal para o ambiente (função de avaliação).

Os algoritmos genéticos são aplicados em problemas de otimização em que se exige uma maior complexidade, como aqueles que envolvem uma grande variedade de parâmetros que precisam ser combinados para buscar a melhor solução. Eles também são aplicados em problemas que envolvam muitas restrições ou condições que não podem ser representados matematicamente, além de serem aplicados a problemas com grandes espaços de busca. Alguns exemplos de problemas em que os algoritmos genéticos podem ser aplicados incluem: otimização de funções matemáticas, otimização combinatorial, otimização de planejamento, problema do caixeiro viajante, problema de otimização de rota de veículos, otimização de layout de circuitos, otimização de distribuição, otimização em negócios e síntese de circuitos eletrônicos. Alguns exemplos de produtos: fluxo de caixa inteligente, classificação de clientes (data mining), alocação de espaço físico. Outras aplicações mais específicas: análise de alternativas de investimento em projetos de exploração e prospecção de Petróleo sob incertezas técnicas e de mercado, otimização da quantidade e localização de poços petrolíferos para o desenvolvimento de um campo de petróleo sob condições de certeza.

As ideias de Darwin foram revolucionárias para o campo da biologia, e provavelmente nem ele poderia prever que as aplicações seriam de tamanha grandiosidade. E Dennett, ao se debruçar sobre as ideias darwinianas e ter a perspicácia de unir evolução e algoritmo, deu o pontapé inicial ao desenvolvimento de toda uma área de conhecimento.

alt_text

Figura 1: Os processos nomeados de avaliação, seleção e reprodução formam uma geração. Após a criação de cada geração, o processo se repete com a nova população formada até que se obtenha uma indivíduo (solução) considerada ideal para o ambiente (função de avaliação). Fonte:https://www.deviante.com.br/noticias/o-que-sao-algoritmos-geneticos-e-para-que-servem/

Referências

https://medium.com/data-hackers/como-algoritmos-evolucion%C3%A1rios-se-comparam-66d4d925c1cc

https://www.deviante.com.br/noticias/o-que-sao-algoritmos-geneticos-e-para-que-servem/

https://www.youtube.com/watch?v=SAoFkZczm2Y&ab_channel=CanaldoPirulla

http://www.inf.ufsc.br/~mauro.roisenberg/ine5377/Cursos-ICA/CE-intro_apost.pdf