A explicação da ferramenta e da sua configuração tem como objetivo estabelecer uma relação com os conceitos abordados na fundamentação teórica, evidenciando a sua característica instrumental no processo de implementação do mecanismo evolutivo. A utilização do componente Galapagos do plugin Grasshopper® simplifica a implementação dos algoritmos evolutivos, pois a descrição algorítmica responsável pelos procedimentos de recombinação, mutação e execução do código faz parte da sua estrutura interna, não sendo necessário ao usuário programar o processo. Embora não seja possível acessar essa descrição algorítmica, ele oferece algumas opções de configurações que possibilita certa flexibilidade na modelagem do algoritmo evolutivo conforme a necessidade do usuário. O sistema paramétrico precisa ser estruturado de maneira a gerar dois tipos de dados, os relacionados à descrição formal e os critérios de avaliação, permitindo, assim, alimentar o componente Galapagos através das conexões de entrada denominados “Genome” e “Fitness” (Figura 4.6).
Figura 4.6 - Componente utilizado para algoritmo genético.
Fonte: elaboração própria.
Os dados de entrada que alimentam a conexão “Genome” correspondem ao conjunto de genes que definem as características do objeto. Cada gene deve ser representado numericamente entre um valor mínimo e máximo, fazendo desse intervalo as possíveis variações de uma determinada característica, além de restringir o campo de soluções. A representação de cada gene é realizada somente através do componente “Slider” (Figura 4.7), o único aceito na conexão “Genome” do Galapagos, permitindo a sua manipulação automática entre os diferentes valores do intervalo. Dessa forma, ao ser executado, esse componente irá realizar automaticamente as
possíveis combinações de todas as características definidas para o objeto, gerando os diferentes indivíduos que irão compor as gerações dos algoritmos evolutivos.
Figura 4.7 – Ângulo de inclinação, largura e quantidade de brises são as características desse código e alimentam o “Genome”.
Fonte: elaboração própria.
O “Fitness” está relacionado com os critérios de avaliação (fitness function); devem ser descritos algoritmicamente através de códigos e expressam as condições mínimas e máximas desejadas para a satisfação de um problema. É necessário criar uma flexibilidade nesses critérios para que sejam obtidos resultados variados. Caso contrário, é criada uma situação de rápida convergência das soluções, pressupondo, inclusive, o prévio conhecimento do resultado final. O resultado obtido para cada critério corresponde a um valor numérico, e nos casos onde a resposta é verdadeiro ou falso serão associados os valores 1 ou 0 respectivamente. Por isso, os códigos responsáveis pela avaliação dos indivíduos geralmente utilizam um valor como índice de referência, ou verificam se o mesmo está presente em um intervalo numérico, ou se satisfazem condições definidas através de operadores lógicos ou relacionais. Dessa forma, os valores gerados para cada critério de avaliação serão somados para a obtenção de um único valor numérico, que irá alimentar a conexão “Fitness” do componente Galapagos (Figura 4.8). Se uma lista de valores for conectada a essa entrada, o Galapagos automaticamente realiza uma média ponderada que será utilizada como referência. Esse valor é atribuído ao indivíduo como a sua nota de avaliação (corresponde ao valor do fitness do mecanismo evolutivo), garantindo uma posição no ranque juntamente com os outros indivíduos gerados e avaliados naquela mesma geração.
Figura 4.8 – Código que verifica a relação de similaridade entre o valor obtido na simulação e o desejado, gerando um valor que irá alimentar o “Fitness”.
Fonte: elaboração própria.
O Galapagos permite a configuração de alguns fatores relacionados ao mecanismo evolutivo, e que podem ser realizadas na aba Options (Figura 4.9), onde são encontrados os painéis para a configuração geral (Generic), a solução evolutiva (Evolutionary Solver) e a solução de recozimento (Annealing Solver).
No painel Generic (Figura 4.9 - A) é possível realizar a configuração dos fatores que são comuns aos dois tipos de algoritmos (o evolutivo e o de simulação do recozimento), como a escolha da maximização ou minimização do valor de avaliação (Fitness), a possibilidade de definir um valor limite para o fitness (Threshold), e se a execução do algoritmo será limitada pelo tempo em horas e minutos (Run Limit).
No painel Evolution Solver (Figura 4.9 - B) são encontradas as configurações específicas para os algoritmos evolutivos. A definição do número máximo de gerações subsequentes (Max.
Stagnant) com resultados estagnados permite ao Galapagos interromper a execução do algoritmo
ao atingir esse número de gerações sem melhora no valor de fitness. Isto ocorre porque não foi encontrada uma solução melhor, ou porque a melhor solução está situada em um ótimo local (Figura 4.10), muito longe em espaço-gene para ser atingido, sendo impossível obter um melhoramento.
Figura 4.10 - Ótimo local.
Fonte: elaboração própria.
Na opção Population é definida a quantidade de indivíduos que irá compor a população de cada geração, já o Initial Boost corresponde a uma taxa que irá multiplicar a quantidade de indivíduos da primeira geração, oferecendo um impulso inicial para a geração de diversidade genética. A definição de uma taxa de preservação de indivíduos parentais (Maintain) contribui para reforçar a característica de hereditariedade do processo evolutivo. Dessa forma, o X % genoma mais apto em uma geração Gn substitui o X % mais fracos dos genomas em uma geração Gn+1, o que faz do processo assumir uma característica elitista. A determinação de um valor para a taxa de endogamia (Inbreeding), que corresponde ao grau de diferenciação entre os indivíduos
de uma geração, define como os indivíduos encontram os seus parceiros para formar casais. Um alto fator de endogomia (como o valor 100) faz com que os indivíduos encontrem companheiros muito semelhantes a si mesmos, ou seja, realizam acasalamento incestuoso, enquanto que um fator muito baixo de endogamia (próximos do valor -100) faz com que os indivíduos encontrem parceiros muito diferentes deles mesmos, ou seja, realizam acasalamentos com características de zoofilia (espécies diferentes). Dessa forma, um valor razoável para que não ocorram grandes distorções é entre 50 e 75, dependendo do objetivo desejado.
Na aba Solvers é possível ativar a execução e acompanhar o comportamento do algoritmo evolutivo através de gráficos, permitindo verificar a evolução da solução ao longo das gerações, a sua distribuição pelo espaço de soluções, a semelhança cromossômica entre os indivíduos e a representação dos genes (Figura 4.11).
Figura 4.11 - Gráficos para a visualização da execução do algoritmo.
Fonte: elaboração própria.
O gráfico A exibe o indivíduo mais apto para cada geração (limite superior da área amarela), o pior indivíduo (limite inferior), a média obtida entre as aptidões dos indivíduos (a linha vermelha) e o desvio padrão com relação à distribuição do fitness (área laranja). No gráfico
destacado em vermelho os melhores deles, a distância entre os pontos demonstra o grau de semelhança, e conforme se distanciam criam subgrupos nesse espaço, assumindo diferentes características e definindo subespécies (especiação). No gráfico D são apresentados os cromossomos dos indivíduos com o valor correspondente ao seu fitness, ou seja, a sua avaliação diante dos critérios de seleção que compõem a função de avaliação (fitness function). O gráfico C corresponde a uma linha conectando todos os valores relativos que cada gene de um cromossomo (indivíduo) possui, permitindo verificar o grau de semelhança entre os indivíduos gerados. A linha vermelha desse gráfico é referente ao indivíduo selecionado no gráfico D, sendo as linhas pretas os outros indivíduos (passíveis de serem analisados desde que selecionado o cromossomo no gráfico C), e a cor lilás representa a amplitude atingida pelas variações genéticas (RUTTEN, 2010).
O estudo da ferramenta Galapagos possibilitou cruzar as informações teóricas e conceituais sobre os algoritmos evolutivos com as opções de configurações do componente. Isso permitiu maior domínio e controle sobre a ferramenta e o processo, incorporando o processo evolutivo de forma mais consciente nos estudos de projeto realizados em cada caso.