Page 1

Generative systems MSc3 Design Studio Workshop Series


1st Workshop to 13th of September 2013 TU Delft Faculty of Architecture AE+T, HRG

Sougnmin Yu – Sina Mostafavi

Schedule Day1: Monday, 9/9 Lecture: Design ,Generative Systems And Design Computation Practice: OOP, Scripting, Rhino And Python Practice : Recursion And Iteration Design: Q&A, Group Brainstorming Session Day2: Tuesday, 9/10 Lecture: Implementations, State Of The Art, Case Introduction And Analysis Design: Design Brief Clarification Practice: More On OOP And Python In Grasshopper Practice : More On Recursion And Code Interpretation Design: Process Design, Site Studies, Pseudo Code Design Day3: Wednesday, 9/11 Lecture: L-systems, Theory And Implementations Practice: L-system Algorithms , Code Analysis Design: Design Hints, Initial Digital Prototyping, And Design Process Development Day4: Thursday, 9/12 Lecture: Cellular Automata, Complex Systems And Bottom-up Design Approaches Practice: CA Algorithms, Tests And Code Analysis Design: Digital Prototyping, Algorithm Developments Day5: Friday, 9/12 Design: Group Discussions, Design Process Enhancement Practice: Debugging Sessions Design: Groups Presentations

Day2 Content

Implementation and design brief

Project precedent: Introductions and interpretations Recursion, L-Systems, Cellular Automata, Agent Based Performance Measurement and Evaluation Design Brief Clarification

Introduction on python in Grasshopper Start-up Examples I / O settings


Example 1 on Recursion Example 2 on Recursion



Introduction and interpretation of some projects

Please note that projects are removed from the uploaded file on the internet You may take notes for further studies

Recursion, branching systems and fractal geometry can be found in different projects just as a morphological type!

You may find project in which designers have integrated Generative Systems for creating branching morphologies with simulation methods like CFD (computational Fluid Dynamic) . If you apply these techniques on a 3D faรงade system you can think of a new approach for envelope design. You may noticed that this means that we need for instance a list of points or lines as starting inputs of the recursion.

Here is another example with branching system like L-Systems but this time considering structural aspects. You may see that the end result is not necessarily completely similar to a tree. And it is more a network of branches that are connected. And the density of branching is changed and controlled with environmental parameters like solar access.

This project is the first look at the Cellular Automata(CA) &� We are going to show 4 examples of CA. These 4 project uses the same CA but some are more successful and creative in the way they use it compare to others. While you see them note the differences in the way they approach the projects.

Using cellular automata to create urban fabric • Objectives: Creates an urban ecology that provides for its residents within the given boundaries of the system via multi-scalar, to distributed food This project is using the Cellularlocal, Automata production. create an urban fabric, based on the proximity to Enhances agricultural production by food sources. reconnecting the traditional wastenutrient cyclelogics which was lost with By CA you can define the neighbouring industrial farming. with rules for growth you can generate design De-couples food/energy costs from alternatives with specified properties. fossil fuels by limiting food With parallel information visualization you atcan transportation all levels, from source to different table. compare Different iterations that shows •

mixture of productive and dwelling units

You usually might need parallel or post evaluations when you are implementing generative systems like CA, since your CA system does not necessarily cover other design objectives. When tackling multi faceted design problem, often there are more than one generative logic in the process. These sets of logics are implemented sequentially, creating an algorithmic process. The different elements considered in these generative logics form systems.

For example in an urban texture you can think of space syntax an apply some of the possible analysis in order to sort and rank different generated results. You can also think of superimposing different results of systems as resultant layers

Please not that in many cases these Generative systems are starting points of design procedures in different scales. And there is always a room and actually make sense to design on top of the generated result. Generative Systems and scripts are not magic buttons that you press and get the final result!

You may find example of CA in architectural scales and building blocks. The initial attempts can be done manually – this is actually a good way to quickly test out your ideas and the pseudo code you have in mind Note the cells can be something else other than cube. They can have their own simple set of geometric logic which can be further parametrically manipulated.

This project is an example that uses the same set of rules as the previous project, �Game of Life�. Although this project may appear cool in terms of graphics and form, this can be an example of what not to do. These generative systems we deal with during the workshop should be used for more than aesthetical reasons. This project is completely devoid of analytical process. You need to comprehend and analyze the result.

You also think of using a generative system like CA for a faรงade system that moves responds and move based on the defined rules. This experimental example uses CA and also neuron network together so that the faรงade systems learns the suitable CA rules to find an optimum and desired environmental conditions .,

You can also think of multi objective optimization with environmental criteria, in multiple scales. You may also think of altering Generative Systems like Cellular Automata, based on functionality that you need in your design process. In this project we have 3 scales / 3 factors (input/generative/evaluative) Not a super long algorithm- sequence of algorithm that are linked through input & output 10 evaluation criteria – they are all coded individually. Some are linked.

In order to apply optimization, you need to have a better understanding of Genetic Algorithms. For different scales, different objectives, different criteria and different outcomes you may use separate or in some cases correlated optimization techniques and procedures.

You can find projects in which the designer or the design team has used generative systems and optimization in different scales with different criteria. These criteria in some design problems might be correlated. In cases like these interoperability between different design and simulation platform will play an important role.

You May also find example is practice and academia that have used Agent Based Modelling as a smart method for parameterization of design entities to find optimum design solutions. These examples can also be found at the small scale of the structure of a pavilion You can find many examples of Agent Based modelling at large urban scales. These systems and types of algorithms can be considered as generic methods. The way you define to implement these methods can be an important part of creativity in design process.

How you would take relevant benefits from these Generative Systems?

And How you can integrate these Generative systems with performance estimation and parallel evaluation ?

Design Brief




Sub-system2 Sub-system5

indoor environment

outdoor environment Faรงade

program circulation

urban proximity




Criteria/ objective


Solar radiation Heat gain heat lost Daylight Shadow Wind Ventilation/CFD Plants Ecosystem … …

Passive control Resource efficiency Natural Ventilation Sustainability Natural Lighting control integration


Primary Structure Secondary structure Anchor points Façade Structure Cladding …

Material Efficiency Tension free Fabricationability ….


Access Circulation Orientation ….

Comfort Accessibility …


Groups A


Obj.1(Climatic) + Obj.2 + Obj.3 +…


Obj.1(Climatic) + Obj.2 + Obj.3 +…


Obj.1(Climatic) + Obj.2 + Obj.3 +…


Obj.1(Climatic) + Obj.2 + Obj.3 +…


Obj.1(Climatic) + Obj.2 + Obj.3 +…

Design Brief The workshop to be held at the beginning of the semester focuses on generative systems and algorithmic approach to design problems together with multi-objective optimization techniques as form finding methods. This design assignment is to be carried out during the workshop for students to explore the design methods in a given scenario. Groups of four will explore the design of a pavilion in a given site near the TUDelft Architecture faculty. The geometric logic of both the global and local scales should address the aspects of Environmental, structural, spatial, functional and the fabrication of the pavilion. While the form finding processes take place, environmental aspects should be considered as one of the evaluation criteria. The design system of the pavilion should incorporate a system specific assembly logic which will result in physical models. The different aspects and the elements that make up the design of the pavilion and the evaluation criteria of the form should be interrelated systems where the variation of them would lead to morphological changes in the results. With this presumption that in architectural design processes we can consider sub-systems that could describe the building performance in its context, here we will try to define these subsystems and methodically study the correlations between them. For each of these sub-systems we can implement generative and evaluative design systems in which measurable objectives can be analyzed and optimized. With this goal students are asked to design a pavilion that should be approximately 400m2 minimum in footprint and provide different spatial conditions where one of which is an enclosed space protected from the outdoor conditions. The design should consider programmatic usage such as a cafÊ or other creative functions suitable for the site. The pavilion should have 5-8 anchor points which are the main structural supports on the ground or on the walls of the existing buildings. The design should be site sensitive and provide different qualities to respond to the environment of the site to control the amount of light, consider the effects wind, solar radiation, orientation etc for the enclosure. Students are encouraged to consider of contrasting conditions such as light/dark spaces, day/night, etc. Students should consider different generative systems for different aspects for the design of the pavilion. The integration and the hierarchy of the subsystems should form the system logic of the overall design. The students’ ability to set up the systems logic, use of a combination of algorithms and exploration of the relational approach to the design process should be evident in the final submission at the end of the workshop.

Dates: ● the workshop will take place during the 2nd and 4th week of September (September 9th-13th and 23rd – 27th) ● Final presentation will take place on Friday the 27th of September. ● Final submission is in the form of documentation (A4 report) which is due on Friday 4th of October. Requirements for the final presentation: ● Slides for presentation – 10 to 15minutes max ● Process diagram, model, experiments, site analysis ●Other supporting diagrams to explain the proposal, and process ● Diagram describing system logic, design concept, environmental/structural/programmatic approach, set up of algorithm, etc. ● Sketch Physical models describing the design system ●Computational logic describing the associative logic of the design ●Rendering to show the design proposal Requirements for the Final submission: ●A4 booklet (both physical and digital copy) ● Process diagram site, analysis, model, experiments, site analysis ●Other supporting diagrams to explain the proposal, and process ● Diagrams describing system logic, design concept, environmental/structural/programmatic approach, set up of algorithm, etc. ● 1:5 scale physical model(1mx1m max size) demonstrating the assembly and fabrication logic ● 1:50 scale physical model showing the global geometry of the design proposal. The scale may vary depending on the design. The model should show structural stability, spatial logic and quality of the design ● Photographs of the physical models ● Renderings of the design proposal ● Written description of the work to accompany the images to elaborate the process ● Essay demonstrating the conceptual placement of the work either as a part of introduction and/or conclusion of the submission which should address: ●how and when the generative methods are used ●understanding of the systems approach ●understanding of the Techno-theoretical background of genetic algorithm in the context of multi-objective optimization ●The final documentation should show incorporation/response to the feedback from the final presentation.

Python in Grasshopper

we started with Rhino Python Editor‌

You have your input and output like all the other components in grasshopper. GhPython is the Python interpreter component that works inside Grasshopper which mean you can use in combination with other components in GH

Our simple code inside the GH_Python Editor!:

letter = text[i] Letter (in this example letter =C)

Error! Solution exception: expected index value, got float

Set the correct type for the input Item Access List Access Tree Access Type Hint: bool, float, integer, string, point3d,vector etc‌

Now it works!

Now let’s write the same recursion script in GhPython…

Rhino Python Editor

Can you spot the difference in the codes?


You can start to do more things in grasshopper easier‌

What about having the cover on the top of this structure parametrically inside the GH python code? And what about having a series of trees that support a continuous structure or a membrane cover ?

Let’s try another recursion example in GhPython…

Code(s) import rhinoscriptsyntax as rs pt1 = rs.AddPoint([2,0,0]) #print pt1 pt2 = rs.AddPoint([0,3,0]) #print pt2 vect1=rs.VectorAdd(pt1,pt2) print (vect1,'vect1') vect2=rs.VectorSubtract(pt1,pt2) print (vect2,'vect2') vect3=rs.VectorCrossProduct(pt1, pt2) print (vect3,'vect3')

Vectors operations

import rhinoscriptsyntax as rs import math import scriptcontext

srfList=[] def Broccoli(pt1, pt2, pt3,Generation): midPt12= (pt1+pt2)/2 midPt23=(pt2+pt3)/2 midPt31=(pt3+pt1)/2 scale=rs.Distance(pt1,pt3)/4 print scale vec12= rs.VectorSubtract(pt2,pt1) vec13=rs.VectorSubtract(pt3,pt1) vecNormal= rs.VectorCrossProduct(vec12, vec13) vecNormal=rs.VectorUnitize(vecNormal) vecNormal=rs.VectorScale(vecNormal,scale)

midUp12=rs.PointAdd(midPt12, vecNormal) midUp23=rs.PointAdd(midPt23,vecNormal) midUp31=rs.PointAdd(midPt31,vecNormal)

if Generation > 0: Broccoli(pt1,midUp12,midUp31,Generation-1) Broccoli(pt2,midUp23,midUp12,Generation-1) Broccoli(pt3,midUp31,midUp23,Generation-1) Broccoli(midUp12,midUp23,midUp31,Generation-1) else: srfList.append(rs.AddSrfPt([pt1,pt2,pt3])) Broccoli(point1,point2,point3,maxGeneration)

YOU CAN READ THE CODES! First we import the needed libraries to have access to their methods. Then we create an empty list. Then we want to define a function called Broccoli. This function will get four arguments. The first three are three input point and the last one is the number of iteration. We find the midpoint between three points. Then we scale the distance between two of these points to have reference number for next proportional translations. In order to have the cross product or the normal vector of the surface that contains all three points. Then with this normal vector we always perpendicularly will move the midpoints in each levels of iteration. Then we will replace the original midpoint with new midpoints for the next step of iteration, where the xyz values are the summation of the fist midpoint and the cross product vector that can be considers as a point. In our conditional iterative modules(if-else structure) we want to have the Broccoli Function four times. In order to divide the surfaces in the list of surfaces into four triangles with corners on the midpoints. Each of these four function in the conditional loop will take four arguments and the last argument in each of these four is generation -1. when the input generation value is 5 for instance it will run five times the Broccoli function recursively till the generation become zero and consequently the division will stop. After each generation, since the list are mutable, we will add the generated surfaces to the initial list (last step of iteration) After the function was ready to operate will call it to operate.

import rhinoscriptsyntax as rs import math

#make a list which will contain the output surfaces srfList=[] #define function called Broccoli def Broccoli(pt1,pt2,pt3,Generation):

Try to comment on codes Make your own pseudo codes first And turn them into real codes

#define the mid point midPt12=(pt1+pt2)/2 midPt23=(pt2+pt3)/2 midPt31=(pt3+pt1)/2 #define the scale proportionately scale=rs.Distance(pt1,pt3)/4 #creating two vectors between 3 points to define a surface #creating the normal vector of the surface and unitizing it #we are then scaling the unitized vector with owr scale factor vec12=rs.VectorSubtract(pt2,pt1) vec13=rs.VectorSubtract(pt3,pt1) vecNormal=rs.VectorCrossProduct(vec12,vec13) vecNormal=rs.VectorUnitize(vecNormal) vecNormal=rs.VectorScale(vecNormal,scale) #creating new midpoints with owr vectorNormals midUp12=rs.PointAdd(midPt12,vecNormal) midUp23=rs.PointAdd(midPt23,vecNormal) midUp31=rs.PointAdd(midPt31,vecNormal) #lets have a part for iteration #for the iteration we will define a condition # and with the same logic that we use in recursions we are calling the source function(Broccoli) as many time as needed # we are calling the funcion iteratively four times to creat four surfaces on the source surface in each generation if Generation >0: Broccoli(pt1,midUp12,midUp31,Generation-1) Broccoli(pt2,midUp23,midUp12,Generation-1) Broccoli(pt3,midUp31,midUp23,Generation-1) Broccoli(midUp12,midUp23,midUp31,Generation-1) else: srfList.append(rs.AddSrfPt([pt1,pt2,pt3])) # we are adding the generated surfaces to our empty list Broccoli(point1,point2,point3,maxGeneration) # out side of the funciton we are calling it to operate with our inputs from rhino-grasshopper


Some of the references : Links:       … Books  Think Python, by Allen B Downey  PYTHON 101 PRIMER , by Skylar Tibbits  Beginning Python Book, by by magnus lie hetland  IronPython in Action Book, by Michael Foord and Christian Muirhead  Python Essential References Book by david m beazley  BIM handbook by EASTMAN, C., TEICHOLZ, P., SACKS, R. & LISTON, K.  Perforamtive Architecture, Beyond Instrumentality by Kolarevic, B. & Malkawi,(2005) A.M.,  … Essays …





Including: Design Problem Interpretation Site Strategies Systems and Correlations Topology

Generative Systems Workshop_Day 2/5  

10/9/2013 TU Delft, AE+T, HRG MSc3, Design Studio Workshops