Control strategies

Danil Nagy
Generative Design
Published in
3 min readFeb 12, 2017

As discussed previously, one of the most critical aspects of the generative design workflow is the parameterization of the design space, in which you specify a finite set of input parameters which define the full set of possible solutions in the design space. The way in which the chosen parameters affect the design solution can be thought of as a ‘control strategy’, because it establishes the way in which the search algorithm can control the design as it searches through all the possible solutions.

Thinking back to our reference from the natural world, we can think of the control strategy as the process which translates the ‘genotype’ of each design (its parameters) to its ‘phenotype’ (the final geometric form). In an organism, the process of translating a genotype based on a sequence of DNA to a fully-developed organism occurs through an extremely complex development process which is also influenced by other inputs coming from the organism’s environment. This process of development in nature is called morphogenesis, which is derived from the roots morpho- meaning ‘form’ and -genesis meaning ‘emergence’.

Morphogenesis in nature

While complex and not completely deterministic, this process is also not random. This ensures that there is a direct connection between the organism’s genotype which is acted on by the process of evolution and its phenotype which dictates the organism’s performance in its environment.

Which control strategies you use in describing your design space is not a trivial question. Because they dictate the way in which the search algorithm can tune design iterations as it explores the design space, these strategies have a direct impact on the success of the algorithm in finding solutions that are both interesting and high performing.

On its own, Grasshopper only gives you access to two very basic control strategies:

  • Morphological strategies use continuous inputs from a number slider to control continuous shape changes in geometry. For example, you can use a continuous parameter to change the size of a room in a building.
  • State-change strategies use integer inputs with conditionals to switch between different versions of a component. For example, you might have a façade where each panel can be one of three types, and you can use a single parameter to control the type of each one.

These direct control strategies can be very effective in giving direct control to the geometries in a design space model. However, because they rely on the parameterization of each individual component, they often either don’t produce enough variation in the design space, or require so many parameters that effectively navigating the design space becomes impossible.

By embedding the full-scale object-oriented Python programming language into the Grasshopper environment, we gain access to the full set of possibilities of the 5 basic elements of programming. With this set of tools we can describe two additional higher level control strategies for parameterizing our design space models:

  • Recursive strategies use a series of parameters to control complex behaviors defined by one or more recursive functions.
  • Behavioral strategies parameterize behaviors of discrete agents who then interact over a series of time-steps to create the final geometry.

These two strategies are powerful because they describe complex processes which can be controlled using a smaller set of more abstract (less direct) input parameters. This enables your design space model to produce more complex designs without significantly adding to the dimensionality of the design space. In effect they make it easier for the search algorithm to explore a wider set of possibilities using a smaller set of parameters.

Traditionally, such strategies are difficult to design with because it can be difficult for human designers to intuit the relationship between the abstract input parameters and the final form. However, since the search algorithms we’re using operate on ‘black box’ design spaces, they don’t need an intuitive understanding of the system’s behavior in order to effectively search the design space and discover the best results. The next series of articles will describe these three complex control strategies and demonstrate how we can implement them using Python code in Grasshopper.

Definition of four computational control strategies with related advantages and disadvantages

--

--