Topic outline

  • What is algorithmic design?


    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.



    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 adverserial 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


    Evaluation


    In the first week of the course (June) students will attend whole day input lectures paired with practical exercises in the computer lab. During the second week of the course (August) students will develop mini-projects inspired by the course topics and present them to the group.