El Problema

El 2020 sin duda es un año de cambios inesperados debido a la contingencia que vivimos, en especial para incorporar el distanciamiento social y medidas preventivas. Sin embargo, eventualmente volveremos a una "nueva normalidad". Pensando en esto y aprovechando que estaba pensando en nuevo contenido para los cursos de Academia BIM, se me ocurrió darle una vuelta a las nuevas herramientas que vienen en #Revit2021, en especial en lo respectivo a Diseño Generativo.

El diseño generativo tiene muchas aplicaciones. La idea central es que las computadoras son bastante buenas ejecutando tareas que parten de un set predefinido de reglas, con esto se logra generar un conjunto de opciones de diseño que cumplan ciertas reglas. De dichas opciones se puede seleccionar la que más valor aporte para el escenario en análisis.

La aplicación más popular de este tipo de análisis en arquitectura es para estudio con masas, cuyo objetivo general suele ser maximizar la cantidad de espacio respetando la cabida del proyecto. Sin embargo, existen muchas más variables que se deben considerar. Si se tienen variables predefinidas y variables a optimizar (espacio) el diseño generativo suele ser una excelente alternativa.  

Image caption

Otra aplicación de diseño generativo es para optimización de ubicación de objetos en espacios. Wstos pueden ser muebles de oficina, árboles, estacionamientos, entre muchos otros. Los ejemplos a continuación son parte de la excelente documentación que ha realizado Generative Design Primer , junto con ejemplos para la aplicación de diseño generativo en Revit.

Image caption

Considerando los recursos que ya están disponibles para aplicación de diseño generativo, se me ocurrió tratar de aplicar los conceptos al distanciamiento social; esto luego de leer un reportaje de Euronews sobre cómo algunos países de europeos están reabriendo bares y restaurantes utilizando espacios públicos para maximizar el distanciamiento físico entre clientes. En particular en este post aplicaremos ciertas reglas que permitan maximizar el número de camas que se pueden colocar en cierto espacio, pues considero que representa un escenario más inmediato a medida nos aproximamos al peak de contagios. 

Escenario de Aplicación

Supongamos el escenario en que tenemos cierto espacio que representa una instalación provisional de salud que se utilizará para atender personas infectadas. La pregunta sería cuántas personas o camas se pueden albergar en un lugar respectando el distanciamiento establecido por las autoridades. Una vez se tiene este número, la siguiente pregunta es ¿cuál debería ser el layout de su ubicación?


El espacio de análisis se muestra en la siguiente imagen y consta de 1593 m2, con una forma como la que se muestra en la imagen.

Image caption

Lo interesante del diseño generativo es que se pueden generar muchas opciones para cumplir reglas de distanciamiento entre camas u objetos. Sin embargo, para ellos es necesario establecer un rango de valores mínimos que deben cumplirse. Para este caso partí evaluando un radio de 2.5 metros para determinar el número máximo de camas en el recinto, posteriormente bajé el número a 2 para evaluar variaciones en los resultados. 

Image caption

De nuevo, este valor es a modo de ejemplo, puede modificarse sin ningún problema para obtener otros resultados. 

Diseño Generativo

A principios de año me encontré un post muy interesante de Autodesk respecto a su estructura de de soluciones en la industria para mejorar productividad, automatizar y optimizar tareas. En dicho post se muestra el siguiente diagrama.

Image caption

Dicho diagrama representa los requerimientos previos para cada una de las tecnologías. Para diseño generativo es necesario el modelado y automatización como base. En la fecha de publicación del artículo aún se tenía a Project Refinery como alternativa para diseño generativo en Dynamo. Como Autodesk suele hacer, ese proyecto era una de los experimentos que luego incorporaron directamente en Revit 2021, tal y como pasó con Dynamo en su momento. Por cierto, en Academia BIM tenemos un curso de Dynamo: Automatización en Revit, para quienes estén interesados en programación visual.

El proceso de diseño generativo se ilustra en la siguiente imagen, la cual fue tomada del post de Autodesk en Medium mencionado.

Image caption

Como se ilustra en la imagen, el primer paso es definir las variables iniciales, las cuales plateamos en el caso de estudio particular; por lo cual ahora tenemos que generar el proceso de optimización y opciones. Para ello necesitaremos de un script de Dynamo y las herramientas de diseño generativo en Revit 2021.

Script Dynamo

Por suerte, Generative Design Primer ya cuenta con ejemplos relacionados a optimización de ubicación de elementos en espacios, por lo que en lugar de comenzar de 0, tomé su script, lo estudié y adapte según mi escenario de aplicación descrito.

Image caption

La lógica del script de optimización consiste en generar circunferencias en cada objeto de interés con un radio fijo. Además de eso, se extrae la geometría del espacio (room) y se realiza una suerte de interferencia para lograr determinar el área de círculos sobrepuesta con el espacio. 

La gran diferencia que tiene un script de Dynamo normal con uno de diseño generativo es que en diseño generativo el script representa la configuración del análisis que será enviado al motor de diseño generativo; no representa por sí mismo la solución de optimización.

El punto más importante del script son los valores base o Seed Values. Estos representan las condiciones de borde que entrarán a diseño generativo. Para el caso de optimización de camas en el espacio de interés las condiciones de borde son:
  • Distancia de camas a pared.
  • Distancia en X entre camas.
  • Distancia en Y entre camas. 
La siguiente imagen muestra las condiciones de borde iniciales.

Image caption

La razón por la que se utiliza Sliders para asignar estos valores es debido a que representan un rango de valores que será optimizado en el motor de diseño generativo. No representan los valores finales, sino el rango entre los que se moverán los objetos a la hora de presentar las opciones de colocación. Si se selecciona el espacio de análisis, una cama y se corre el script lo que se mostrará sera el layout de puntos base inicial en Dynamo.

Image caption

Image caption

De nuevo, este layout no está optimizado y representa solamente el punto de partida y configuración de diseño generativo. 

Configuración y Generación de Diseño Generativo

Una vez configurado el script, es necesario exportarlo para ser utilizado en la herramienta de diseño generativo de Revit. El proceso se muestra en las siguientes imágenes.

Image caption

Primero, es necesario exportar asignando una imagen y descripción:

Image caption

Es de tener en cuenta que los valores seed del script se cambiarán en futuras iteraciones para mejorar el diseño o evaluar nuevas alternativas, por lo cual asignar una descripción que illustre la iteración que se está realizando es muy buena practica.

Posteriormente, se crea un estudio, lo cual presentará el siguiente diálogo:

Image caption

Al seleccionar la opción de estudio correspondiente al script configurado, se desplegarán las siguientes opciones:

Image caption

A continuación, se describen los grupos de variables a configurar.

Variables Iniciales (Seed)

Estas representan los valores configurados en los sliders del script de Dynamo:

Image caption

Metas

Como el nombre lo indica, representan el objetivo final en el estudio. Para este paso es necesario maximizar el número de camas. El resto de valores (Coverage) están relacionados con el número de objetos, por lo cual maximizaremos también el porcentaje de cobertura. El parámetro de Coverage dentro del Room puede ser maximizado; sin embargo, no presenta un cambio a la hora de correr el análisis. Finalmente, se tiene la distancia en X y Y. El objetivo es minimizar esta distancia dentro del rango de valores seed proporcionados.

Image caption

Constrains

Representan otra alternativa para considerar condiciones de borde (máximos y mínimos) para algunos de los valores. Por ejemplo si se tuviera un número limitado de camas a utilizar, se podría establecer el Number of Objetcs con un valor máximo igual a las camas disponibles. Para este análisis no se establecen Constrains, ya que están consideradas dentro de los Seed Values en el script.

Image caption

Configuración de Generación

Está compuesto por tres parámetros:
  • Population Size: refleja el número de configuraciones a evaluar:

Image caption

  • Generations: por cada configuración a evaluar se realiza un proceso de selección, mutación, evolución y reevaluación, igual al número de generaciones. Esto con el objetivo de mejorar los layouts de camas de cada generación.

Image caption

  • Seed: número de configuraciones iniciales a evaluar. En este caso tomamos una configuración inicial a optimizar.
El tiempo que tomará generar las opciones de diseño generativo será proporcional al número utilizado en estos 3 campos. Entre más seeds, generaciones y muestras, más tiempo tardará el estudio. Para más información sobre estos valores, visitar la página de Autodesk. 
Otro buen recurso para entender el concepto de Generaciones, Tamaño de Muestra y Optimizacion en general, es el video de Code Bullet (no trata diseño generativo en sí pero los conceptos son similares y la aplicación es mucho mas divertida):
Ver video.
El paso final es correr el estudio. El tiempo que tome en presentar resultados dependerá de la potencia del computador y los parámetros de configuración.

Image caption

Resultados

Luego de 15 minutos para los datos iniciales proporcionados, se tienen los siguientes resultados:

Image caption

La forma en que se estructuran los resultados es muy útil, ya que se pueden ordenar para presentar las configuraciones con mayor cantidad de objetos en la parte superior. Luego de ordenar por cantidad de camas, se pueden establecer filtros en las columnas de Distancia en X, Distancia en Y y Cantidad de Objetos para crear rangos de datos de interés que cumplan con nuestras condiciones iniciales y objetivos de diseño.

Image caption

Si se quiere verificar dicha alternativa de diseño directamente en el modelo de Revit, se puede enviar la configuración a Dynamo para crear la colocación de camas en el modelo según la configuración seleccionada. 

Image caption

Con esto se puede volver a correr el proceso de optimización con nuevos valores (seeds) derivadas de la mejor configuración previa, o cambiar variables de generaciones, número de muestra o seed inicial, según sea el caso.

Para este ejemplo procedí a crear las camas en los puntos optmizados. Para ello solo es necesario cambiar el parámetro Data Gate en el script a Open. 

Image caption

El resultado final se muestra en la siguiente imagen:

Image caption

Conclusión

El diseño generativo suelo ser uno de esos términos "futuristas" en la industria de la construcción como también lo son IoT, Machine Learning, AI, Computer Vision. Sin embargo, es difícil encontrar aplicaciones prácticas puntuales de estas tecnologías en nuestra industria. En este caso, creo que el diseño generativo será pionera en abrir campos de aplicación puntual de estas nuevas tecnologías y seguro en un futuro será más y más utilizado en las distintas etapas del ciclo de vida de proyectos BIM. 

En cuanto a la herramienta de diseño generativo en Revit 2021, aún está en su primera iteración. En lo personal, tuve problemas fuertes de desempeño en Revit y mi máquina en general al correr los estudios.

Image caption

Otra limitante es el tema de las licencias. Existen 2 formas de correr diseño generativo en Revit:
  • Desde Dynamo: no se necesitan licencias adicionales, hasta donde he podido hacer pruebas a la fecha.
  • En Revit: esta requiere  una licencia de collection, la cual son muchas lukas $_$. Esto es una limitante fuerte para el uso de la herramienta de diseño generativo. 
Finalmente, el caso que realicé es para ilustrar una aplicación de los flujos y herramientas de diseño generativo utilizando el nuevo escenario que la contingencia del Covid-19 presenta. Al final del día estas herramientas no van a sustituir a nuestros profesionales, sino más bien ayudarles a hacer la pega más rápido y con mayor precisión.

Si tienen otra aplicación que consideren interesante para diseño generativo me encantaría escucharla e igual si tienen ideas o sugerencias que les gustaría ver en nuestros cursos BIM en Academia BIM quedo atento! 
Saludos. 
Ricardo
Creado con