Blog / BIM & Construction Management

Explorando a Criatividade na Construção: Princípios do Design Paramétrico e Algorítmico

A utilização de ferramentas computacionais pelos escritórios de projetos é uma prática usual desde meados dos anos 1990 (VOLTOLINI, 2016). Estas ferramentas CAD (Computed Aided Design) auxiliaram em uma grande otimização na produção de projeto no que se refere a representação gráfica e visualização.

Os processos e métodos de conceber um projeto é uma temática ampla onde não há universalidade pois cada ser humano possui seus processos intrínsecos de criação e operação para externar uma ideia, porém percebe-se de forma comum processos análogos quando usamos determinada tecnologia como ferramenta ou método para expressar esta ideia. Desta forma, quando atrelado ao uso das ferramentas tradicionais (CAD), que é um processo aditivo onde se insere informações que vão configurando e incrementando o projeto, a maneira de compreender e gerar é resultante a partir da forma ou de sua composição espacial, conhecido como FormMaking (desenhar a forma) enquanto que novas metodologias (Desenho Paramétrico e Modelagem Algorítmica) são mais suscetíveis ao FormFinding (encontrar a forma), um processo que busca a forma ou resultado a partir de parâmetros, sendo estes de restrição (fixos) ou variável (manipuláveis). 

Este modelo paramétrico possui entidades geométricas que, por sua vez, possuem suas propriedades, fixas e variáveis. As propriedades variáveis são os “parâmetros”, valores facilmente manipuláveis, e as propriedades fixas são as “restrições”, propriedades determinísticas (CARDOSO, 2017). Estes parâmetros são relacionais, possuem vínculos que alteram as relações internas, da propriedade do elemento, e relações externas, dependentes entre os elementos, podendo ser variáveis ou restritivas.

Com a aplicação do método de Design Generativo (DG), os Algoritmos evolutivos (AE) vêm sendo utilizados em projetos de arquitetura para criar desde a forma de um edifício quanto para atender arranjos geométricos que se adequam a fatores de seu entorno, como incidência solar ou atendimento a leis de uso de solo . A ideia básica é apoiar-se em conceitos e teorias evolutivas da natureza e no modo como os seus sistemas funcionam para criar com maior agilidade novas soluções.

Algoritmos evolutivos têm sido usados para projetar diversas tipologias de produtos, desde aviões a chips de computador. Eles são adequados para problemas onde a solução desejada não é conhecida antecipadamente e onde o espaço de busca é grande e complexo.

Nesta abordagem de projeto, o algoritmo evolutivo simula o processo de seleção natural, onde os membros mais aptos de uma população são selecionados para reproduzir e transmitir suas características para a próxima geração, gerando várias soluções (chamadas de população). O algoritmo começa com uma população de designs aleatórios e a partir deste ponto avalia cada design para o objetivo desejado. Essas soluções são então avaliadas em relação a algum conjunto de critérios, chamados de funções de aptidão (ROHRMANN, 2019). 

Os designs mais aptos são selecionados para reprodução e suas características são combinadas para criar novos designs. As soluções que apresentam bom desempenho de acordo com as funções de aptidão são selecionadas para formar uma nova geração de soluções. Este processo é então repetido, com cada nova geração de soluções sendo melhor que a anterior, até que o objetivo desejado seja alcançado ou a melhor opção alcançada dentro de um processo finito (VOLTOLINI, 2020). A principal vantagem dessa abordagem é que ela pode encontrar soluções muito boas para problemas que são muito difíceis para os humanos resolverem.

História da programação evolutiva de algoritmos

A história da programação evolutiva de algoritmos começa com a ideia de usar a evolução como uma metáfora para resolver problemas. Darwin, em seu livro "A Origem das Espécies", propôs que os organismos evoluem através de um processo de seleção natural, onde os indivíduos mais aptos são mais propensos a sobreviver e se reproduzir. Essa lógica pode ser aplicada para resolver problemas usando uma população de soluções potenciais e selecionando as mais aptas. Os primeiros trabalhos publicados relacionados à computação evolucionária ocorreram em meados da década de 1950, (JONG et al., 1997). 

Três trabalhos se destacam: Friedberg (1958), Friedberg et al. (1959) e Fraser (1957). No mesmo período, precisamente em 1962, Bremermann apresenta suas primeiras tentativas em aplicar simulação evolutiva e otimização numérica para solução de problemas, onde desenvolveu algumas das primeiras teorias sobre Algoritmos Evolutivos (JONG et al., 1997).

Em meados de 1960 foram estabelecidas as três principais formas de Algoritmos Evolutivos (AE), sendo a Programação Evolutiva (Evolutionary Programming) por Lawrence Fogel em San Diego, Califórnia, os Algoritmos Genéticos (Genetic Algorithms) por Holland, da Universidade de Michigan e a Estratégia Evolutiva (Evolution Strategies) desenvolvida pelo um grupo de estudantes em Berlim, Nienert, Rechenberg e Schwefel (JONG et al., 1997). Estas três técnicas de algoritmos evolutivos são conhecidas coletivamente como Evolutionary Algorithms (EAs) (COELLO et al., 2007).

Nos anos 1990, aconteceu o workshop Internacional Parallel Problem Solving from Nature, em Dortmund, onde houve a interação entre diversas comunidades de pesquisa em AE. A constante e crescente interação levou a terminologia conhecida por Computação Evolutiva (Evolutionary Computation), utilizada até os dias atuais (SCHWEFEL e MÄNNER, 1991).

Os Algoritmos Evolutivos foram usados para projetar e otimizar uma ampla variedade de produtos de diferentes setores, sendo um deles, objeto deste trabalho, o projeto arquitetônico. Nas últimas décadas, um dos principais ambientes de exploração na arquitetura é o uso de ferramentas computacionais aplicadas ao processo de projeto (KESTELIER e PETERS, 2006).

 

Definições e conceitos

Para melhor compreensão, serão apresentadas as definições de conceitos relacionados ao Algoritmo Evolutivo, como Algoritmo, Modelagem Algorítmica, Programação Visual, Desenho Paramétrico, Modelo Paramétrico e Desenho Generativo.

1. Algoritmo

Em seu célebre livro, Algorithmic Architecture, Terzidis define Algoritmo como (TERZIDIS, 2013): “Um algoritmo é um procedimento computacional para resolver um problema em um número finito de etapas. Envolve dedução, indução, abstração, generalização e lógica estruturada. É a extração sistemática de princípios lógicos e o desenvolvimento de um plano de solução genérico.” (TERZIDIS, 2006, p. 159).

2. Modelagem Algorítmica

Refere-se especificamente ao uso de linguagens de script que permitem ao designer avançar além das limitações da interface de software convencional de projeto, ampliando a capacidade de modelar através da manipulação direta não da forma, mas sim do código. Genericamente, a modelagem algorítmica pode ser performada através de linguagens de programação de computador, como RhinoScript, porém com a dificuldade de programação, aplicativos como Generative Components e Grasshopper possibilitam o uso de códigos com formas pictográficas (componentes) de automação (LEACH, 2014).

3. Programação Visual

A programação Visual permite a criação de algoritmos através da manipulação de componentes gráficos como, ícones, botões e símbolos. É possível executar a modelagem paramétrica com recursos de programação visual sem a necessidade de digitar uma linha de código em texto. Diferente do código tradicional onde são escritas as linhas de texto em um compilador, a programação visual utiliza programas que contém uma interface onde são introduzidos componentes que irão formar o código que realizará a tarefa. Um exemplo deste tipo de programa é o Grasshopper, um plugin para o programa Rhinoceros (CELANI e VAZ, 2012).

Figura: Programação Textual x Programação Visual – Start, Mid, End point de uma curva. Fonte: o autor.

4. Projeto Paramétrico

Softwares paramétricos utilizam parâmetros numéricos e geométricos, permitindo assim o ajuste incremental de um elemento que, consequentemente, afeta todo o modelo em cadeia. Em contraste ao processo tradicional, o desenho paramétrico inter-relaciona as partes do projeto e as alteram juntas, de forma integrada. Essa conexão permite mudanças, relações, adições e reparos no projeto, reduzindo retrabalho e facilitando possibilidades (LEACH, 2014).

5. Design Generativo

Concluem como principal definição de Design Generativo (DG) sendo uma abordagem de projeto que usa algoritmos para gerar projetos (CAETANO et al., 2020). DG é um ciclo iterativo de aplicação e avaliação de regras, ou seja, o projeto inicial sofre iterações por operações que implicam em transformações geométricas e topológicas evoluindo até o projeto resultante (BERNAL et al., 2015).

6. Algoritmo Evolutivo

Os Algoritmos Evolutivos (AE) têm a sua origem na ciência da computação, na área da inteligência artificial, reproduzindo computacionalmente o processo evolutivo da Teoria de Darwin. Baseado em quatro pilares (população, diversidade, hereditariedade e seleção) a sua principal característica é a reprodução artificial dos mecanismos evolutivos que possibilitam o comportamento adaptável (Adaptive Behavior). Assim como na Natureza, esse processo é caracterizado pela integração e interação entre o grande número de espécies e suas variações, que buscam atingir o equilíbrio com o meio através de uma disputa pela sobrevivência dos mais aptos. É este o principal enfoque para a utilização dos AE, ou seja, a busca por soluções que resolvam e satisfaçam simultaneamente os diferentes objetivos que envolvem um determinado problema (FLOREANO e MATTIUSSI, 2008).

Muitos algoritmos são simulações do funcionamento de processos naturais, que a partir da descoberta humana, não são concebidos e controlados pela mente humana, mas sim capturados, codificados e executados por um sistema de computador (TERZIDIS, 2006).

Os AE, utilizam os conceitos de mutação, seleção e herança, onde os indivíduos irão povoar (população) determinado contexto e os mais aptos, a partir dos princípios biológicos da teoria da evolução serão determinados como melhor resultado “fitness” (RUTTEN, 2013). Um AE consiste basicamente em uma população de soluções codificadas (indivíduos) manipuladas por um conjunto de operadores e avaliadas por alguma função de aptidão (COELLO et al., 2007).

 

Formas de Algoritmos Evolutivos

Existem vários tipos diferentes de algoritmos evolutivos, sendo três as principais técnicas aplicadas a partir do conceito de AE, conhecidos como Algoritmos Genéticos, Programação Evolutiva e Estratégias Evolutivas.

Tabela 1: Principais diferenças de implementação de AE

1. Algoritmos Genéticos

O primeiro algoritmo a usar essa ideia foi o Algoritmo Genético (AG), proposto por John Holland na década de 1960. AG é um algoritmo de busca que usa uma população de soluções potenciais e aplicam operadores como seleção, cruzamento e mutação para produzir novas gerações de soluções (JONG et al., 1997).

2. Programação Evolutiva

Idealizado por Lawrence J. Fogel em 1960 enquanto assistente especial na National Science Foundation (NSF), considerava que, então na época, a inteligência artificial ficava concentrada em torno da heurística e da simulação de redes neurais primitivas, abordagens limitadas pois modelam os humanos e não o processo de produção de indivíduos, relacionando ao processo de evolução. Assim, entendia que a inteligência teria que se basear na adaptação do comportamento perante uma variedade de ambientes (JONG et al., 1997).

Na PE o indivíduo de uma população é representado por uma máquina de estados finitos (MEF) e a reprodução da população e a geração de descendentes, a partir de todos os indivíduos, é realizada por operadores de mutação. Na seleção dos indivíduos para a geração subsequente, os descendentes competem com os pais e sobrevivem somente os indivíduos de maior fitness, tanto da geração atual quanto dos descendentes (GABRIEL, 2013).

3. Estratégias Evolutivas

A primeira versão de uma Estratégia Evolutiva aparece (EE) em 1964, realizada pelos estudantes da Technical University of Berlin, Bienert, Rechenberg e Schwefel, quando realizavam estudos de tecnologia aeroespacial. Depois de experimentos onde utilizavam estratégias manuais sem êxito, Rechenberg idealizou usar dados para decisões aleatórias, mais tarde sendo executado com sucesso por Schwefel em uma calculadora mecânica e por Bienert (1967) pela criação de um robô que realizava ações e decisões de forma automática (JONG et al., 1997).

Na EE, foi desenvolvida a chamada (1 + 1)-EE, onde um indivíduo gera apenas um descendente e tanto gerador quanto descendente disputam pela sobrevivência (GABRIEL, 2013). Nos anos 2000, um novo tipo de algoritmo evolutivo foi proposto, chamado de Programação Genética (PG). PG é semelhante a AG e PE, mas usa um conjunto diferente de operadores.

 

Ferramentas computacionais de Algoritmos Evolutivos

1. Galapagos

Desenvolvida por David Rutten, arquiteto formado pela Universidade Tecnológica de Delft, Galapagos é um plugin padrão do Grasshopper, utilizado em questões de otimização e design complexos com muitas variáveis. Este implementa dois solucionadores genéricos, um usando um algoritmo genético e outro usando um algoritmo de anelamento simulado (RUTTEN, 2013).

Diferente do plugin anterior, o Wallacei possibilita uma abordagem multi-objetos, o que expande trabalhar com diversos intervenientes dentro do mesmo algoritmo.

2. Wallacei

Inicialmente idealizada como uma ferramenta analítica por Mohammed Makki e posteriormente com a integração dos pesquisadores Milad Showkatbakhsh e Yutao Song, Wallacei se tornou um mecanismo evolutivo que permite usuários na execução de simulações evolutivas. Ainda permite que os usuários possam selecionar, reconstruir e produzir qualquer fenótipo da população resultante da simulação, conforme seus desenvolvedores em seu próprio manual, Wallacei Primer 2.0 (MAKKI, 2019).

Diferente do plugin anterior, o Wallacei possibilita uma abordagem multi-objetos, o que expande trabalhar com diversos intervenientes dentro do mesmo algoritmo.

 

Referências

BERNAL, Marcelo; HAYMAKER, John R.; EASTMAN, Charles. On the role of computational support for designers in action. Design Studies, [s. l.], v. 41, ed. Part B, p. 163-182, 2015.

CAETANO, Inês; SANTOS, Luís; LEITÃO, António. Computational design in architecture: Defining parametric, generative, and algorithmic design. Frontier of Architectural Research, [s. l.], v. 9, p. 287-300, 2020.

CARDOSO, Carmo Gonçalves Machado. Performance-based Design: From form making to form finding. 2017. Tese (Mestrado) - Instituto Técnico de Lisboa, [S. l.], 2017.

CELANI, G.; VAZ, C. E. V. Scripts em CAD e ambientes de programação visual para modelagem paramétrica: uma comparação do ponto de vista pedagógico. In: Cadernos Proarq. Revista do Programa de Pós-graduação em Arquitetura da UFRJ, Rio de Janeiro: v.1, n. 18, p. 177-194, 2012.

COELLO, Carlos A. Coello; LAMONT, Gary B.; VELDHUIZEN, David A. Van. Evolutionary Algorithms for Solving Multi-objective Problems. Springer, [s. l.], ed. Second Edition, 2007.

FLOREANO, Dario; MATTIUSSI, Claudio. Bio-Inspired Artificial Intelligence: Theories, Methods, and Technologies. Cambridge, Massachusetts London, England: The MIT Press, 2008.

FRASER, A.S. Simulation of Genetic Systems by Automatic Digital Computers. Australian Journal of Biological Sciences, vol 10, p 484-491, 1957.

FRIEDBERG, Richard M. A Learning Machine: Part I. IBM Journal of Research and Development, vol. 2, no. 1, p. 2-13, 1958.

FRIEDBERG, Richard M.; DUNHAM, Bradford; NORTH, J. H. A Learning Machine: Part II. IBM Journal of Research and Development, vol. 3, no. 3, p. 282-287, 1959.

GABRIEL, Paulo Henrique Ribeiro; DELBEM, Alexandre Cláudio Botazzo. Fundamentos de algoritmos evolutivos. [S.l: s.n.], 2008.

JONG, Kenneth De; FOGEL, David B.; SCHWEFEL, Hans-Paul. A history of evolutionary computation. In book: Handbook of Evolutionary Computation, Oxford University Press, p. A2.3:1-A2.3:12, 1997.

LEACH, Neil. Parametrics Explained. Next Generation Building, [s. l.], v. I, 2014.

MAKKI, M., SHOWKATBAKHSH, M. and SONG, Y. (2019) ‘Wallacei Primer 2.0’, [Online]. Available at https://www.wallacei.com/.

KESTELIER, Xavier de; PETERS, Brady. Computation Works: The Building of Algorithmic. Architectural Design, [s. l.], v. 83, ed. 2, p. 8-15, 2013.

ROHRMANN, Jacqueline. Design Optimization in Early Project Stages: A Generative Design Approach to Project Development. 2019. Dissertação (Mestrado em Engenharia Civil) - Technical University of Munich, Munich, 2019.

RUTTEN, David. Galapagos: On the Logic and Limitations of Generic Solvers. Architectural Design, v.83, n. 2, p. 132-135, 2013.

SCHWEFEL, Hans-Paul; MÄNNER, Reinhard. Parallel Problem Solving from Nature: 1st Workshop, PPSN I Dortmund, FRG, October 1–3, 1990 Proceedings. Lecture Noter in Computer Science, [s. l.], v. 496, 1991.

TERZIDIS, Kostas. Algorithmic Architecture. [S. l.]: Architectural Press, p. 159, 2006.

VOLTOLINI, Giovani. Design Paramétrico e Modelagem Algorítmica: Os Efeitos De Seus Conceitos e Técnicas em Académicos de Arquitetura. 2016. Tese (Mestrado) - Universidade Federal de Santa Catarina, [S. l.], 2016.

VOLTOLINI, Giovani; PUPO, Regiane Trevisan; QUEIROZ, Natália. Design paramétrico e modelagem algorítmica: os efeitos de seus conceitos e técnicas para o estudante de arquitetura. Revista Geometria Gráfica, [s. l.], v. 4, ed. 1, p. 75-93, 2020.

Autor

Alessandro Ferrari

Arquiteto | CanBIM P2 - Certified BIM Professional | MBA Project Management | Mgtr BIM Management | Msc BIM Algoritmos Evolutivos (estudando atualmente)