Topic outline

  • Algorithmic design explores design methodologies which heavily employ digital data structures and algorithms.

    Since the Renaissance and Leon Battista Alberti’s book “De re aedificatoria” from 1452, architect was defined as an author of the building solely based on his deliberate action of drawing up the design. Drawing itself became not only an authorship claim, but also an indispensable design tool for centuries to come. To build was to draw, and without a prior drawing, no building could be executed. Drawing became synonyms with the design, and design synonyms with the building. This rather simplified viewpoint neglected all the complexities of a large-scale building endeavor, be it a cathedral, aqueduct, a palace or urban-fortifications. In the idealistic, individual-centered philosophy of the Renaissance, only the design mattered, and the design was envisioned by a single creative mind through the means of a drawing. This position was only strengthen after the invention of the printing press in the late 15th century, little after Alberti published his book. Now drawings and designs they represent could be reliably reproduced and distributed to masses. 

    Today, computers became ubiquitous tools used by designers and architects. Still, to a large extent they are still being used as digital stand ins for drawing implements used for centuries: rulers, compasses, protractors and pantographs. But computers have much more to offer us. Their inbuilt Von Neuman architecture is used to process data as well as code instructions which operate on that data. Together with inventing a calculating machine, we invented formal languages with which we can communicate with them. It was the first time in history that we invented languages to communicate with machines. 

    This enables us to use computers not only as drawing implements, but actual, programmable drawing agents themselves. This “agency” of the computer enables us to explore designs previously exclusive to Nature herself.

    The course deals with methods of algorithmic design applied to the field of architecture, landscape and interior architecture, construction, as well as in the broad fields of industrial and product design. Although many architects still use computers much like they used analogue drawing boards, intrinsic capabilities of computers allow them to formalize their designs through code. This opens novel approaches in design thinking and articulation and gives designers powerful tools for formalizing their work. This approach also captures and exploits the inherent contemporary condition of creative practices - when designs become data, it becomes possible to create what was previously undrawable. Topics of the course are organized around programming fundamentals (Python programming language and syntax, data types, operators, conditionals, looping, functions, lists, classes, dictionaries), Rhino Python and modeling (using Python within Rhino, rhinoscriptsyntax library, RhinoCommon SDK, NURBS modeling, Boolean operations on solids, transformation matrices, mesh modeling) and computational design (random walk algorithms, attractor fields, vector fields, mapping geometry from external data, Lindenmayer systems, evolutionary algorithms, optimization algorithms, particle-spring systems, voxels, Monte Carlo method, curvature mapping, spatial aggregation of discrete parts, cellular automata systems, dynamic relaxation, agent-based modeling, machine learning). The course is taught through 12 weeks with lectures and hands-on computer exercises. At the end the students are required to develop and present a final project.

    Course Topics

    1. Fundamentals

    - object-oriented programming paradigm, Rhino Python programming language basics, vector math, matrices and transformations, geometry construction, curves and surfaces, randomness

    2. Continuous models

    - vector fields, multi-dimensional arrays, attractors, geometry evaluation, curvature, deformations, 3D texturing, meta-balls, topography, fluid dynamics

    3. Discrete models

    - L-systems, fractals, cellular automata, swarming, subdivision, panelization, folding

    4. Optimization

    - optimization strategies, topology optimization, structural optimization, dynamic relaxation, artificial evolution, genetic algorithms, material computation

    5. Learning

    - machine learning, neural networks, variational autoencoders, generative adversarial networks

    Learning Goals

    - basic familiarity with Rhino Python programming environment: variables and data types, basic operators, conditionals, lists, loops, functions and familiarity with classes, rhinoscriptsyntax and Rhino.Geometry libraries

    - ability to write simple Python scripts and compose and modify more complex ones from examples


    During the course students will develop computational projects inspired by the course topics and present them to the group at the very end. Evaluation of the course will be based on this project.