Algoritmos Genéticos com Raspberry Pi – Parte 2 – Princípios

Como citar esse artigo: VERTULO, Rodrigo Cesar. Algoritmos Genéticos com Raspberry Pi – Parte 2 – Princípios. Disponível em: <http://labdeeletronica.com.br/algoritmos-geneticos-e-raspberry-pi-parte-2-principios/>. Acesso em: 25/03/2019.


As observações de Charles Darwin durante sua viagem ao redor do mundo, no navio HMS Beagle, culminou com a publicação de sua obra mais importante no ano de 1859 intitulada “On the Origin of Species by Means of Natural Selection, or the Preservation of Favoured Races in the Struggle for Life” (Da Origem das Espécies por Meio da Seleção Natural ou a Preservação de Raças Favorecidas na Luta pela Vida), onde ele apresenta a Teoria da Evolução.

Darwin notou diferenças físicas em indivíduos de uma mesma espécie que ao longo do tempo se propagavam nas novas gerações daquela população. Ele teorizou que a prevalência daquelas características nos indivíduos das novas gerações se deviam ao fato delas os tornarem mais aptos a sobreviverem no ambiente em que se encontravam. Apesar dos fundamentos do mecanismo da hereditariedade terem sido apresentados por Gregor Mendel apenas em 1866, os achados de Darwin já sugeriam a existência dos mesmos.

Para nossos propósitos, que é o desenvolvimento de Algoritmos Genéticos em Python, basta sabermos que os estudos de Darwin e Mendel nos levaram ao que hoje conhecemos popularmente como o princípio da “Sobrevivência dos Mais Fortes”. Fundamentando-se em elementos como Geração de uma População Inicial, Seleção dos Mais Aptos, Reprodução, Transmissão de Características e Mutação, é possível replicar muitos dos aspectos presentes nos estudos de Darwin e Mendel para a criação de soluções computacionais capazes de resolverem os mais variados tipos de problemas relacionados à busca de respostas ótimas, ou quase ótimas, para os mesmos.

É importante frisar que Algoritmos Genéticos são uma ótima alternativa para a resolução de problemas cuja solução por outros meios torna-se inviável por conta do custo e tempo de processamento. Existem problemas com um universo de respostas tão vasto, que encontrar a melhor solução por meios analíticos tradicionais poderia levar anos até mesmo nos mais modernos e velozes processadores. Para esses casos, encontrar uma solução quase ótima já é suficiente. Os Algoritmos Genéticos baseiam-se em métodos probabilísticos, fazendo com que não existam garantias de que eles encontrarão a melhor solução para os problemas, contudo, eles são capazes de chegarem muito perto das mesmas, ou seja, de soluções quase ótimas.





O funcionamento dos Algoritmos Genéticos seguem o fluxo operacional apresentado a seguir e cada etapa do mesmo será detalha ao longo de nossa série sobre o assunto.

Fluxograma de um Algoritmo Genético

Cada um dos blocos do fluxograma apresentado será detalhado em artigos posteriores, entretanto, vale a pena apresentar uma visão macro de seu funcionamento.

Tudo se inicia com a existência de um conjunto de indivíduos (População Inicial) de uma mesma espécie, portanto, capazes de se reproduzirem entre si. Esses indivíduos compartilham características físicas comuns originárias de suas “cargas” genéticas, dos genes contidos em seus cromossomos.

Entretanto, ao longo das gerações daquela população, pequenas alterações podem ocorrer nos cromossomos de alguns indivíduos, fazendo com que os mesmos se diferenciem levemente dos restantes. Essas pequenas alterações podem fazer com que esses elementos da população possuam características físicas e comportamentais que podem torná-los mais aptos a sobrevirem no ambiente em que estão contidos. Essa melhor aptidão aumenta as chances (Seleção Natural) desses indivíduos de se reproduzirem (Reprodução) para gerarem herdeiros com as características de seus pais (Transmissão de Características).

Durante o processo de reprodução podem ocorrer “falhas” no mesmo (Mutação) fazendo com que os filhos gerados não sejam exatamente formados por uma combinação dos genes de seus pais e os novos herdeiros que farão parte da nova geração (Geração de Nova População) surjam com pequenas mudanças que poderão torná-los mais ou menos aptos a sobreviverem no ambiente onde serão concebidos.

Na natureza esse processo se repete indefinidamente, a não ser que a espécie entre em extinção. No contexto dos Algoritmos Genéticos é comum a definição de um algum critério que determine se o fluxo deve ou não se repetir.

Nosso desafio a partir dos próximos artigos dessa série será transformar o fluxograma apresentado anteriormente em código de programação em linguagem Python para que possamos desenvolver Algoritmos Genéticos utilizando esses conceitos na resolução de alguns problemas práticos.

Comentários