About a year ago I was asked to speak at the University of Oregon’s annual H.O.P.E.S. conference and lead a workshop demonstrating the computational approach to design we promote on this blog and at the Yazdani Studio. The workshop focused on the optimization tools we have been piecing together using Grasshopper for Rhino and its many add ons. Today we’re going to share an updated version of the Gh definition used in the workshop. A video that breaks down the definition and various steps involved is also included below. The goal here is to share a general framework for creating optimization tools with Grasshopper. My hope is that the script below, along with breakdown video, might be a useful guide for anyone interested in developing their own optimizations or tailoring them to specific situations. In the example provided, the definition is used to optimize a building form to receive the minimum possible total solar radiation given only the geographical location, building area, and number of floors.

To learn more about solar radiation analysis and optimization please take a look at some of our earlier blog posts. The focus of this entry is on the general framework for setting up the optimization and how it can be tweaked to accommodate various scenarios. To use the definition, create a new Rhino file with meters set as the default unit. Launch Grasshopper and open the file.


The Gh definition is divided into 6 steps. If you would like to duplicate the results shown in the optimization video above, just start the Galapagos component in step 4.  Optionally, you can save the output by setting a valid output directory under step 6. The script uses DIVA by Solema inc to perform the solar radiation analysis and HUMAN by Andrew Heumann to display data on screen. Please install both add-ons before running the definition.

In the videos below, I cover the general structure of the optimization script and explain how each step works. The framework is made up of 6 stages.

1. MASSING – a mass is produced through a series of variables (sliders) that can affect the shape. The flexibility of this form, and the way in which variables are used to manipulate it, establishes the range of options that can be considered during the optimization.

2. GENERATE BUILDING COMPONENTS – the mass is broken down into the architectural elements such as floor slabs, roofs, glazed panels and solid panels. Step 2 is packaged into two user objects called CORE and SHELL developed here in the studio. CORE requires the surface produced in step 1 along with a list of floor to floor heights. SHELL requires an exterior panel module as well as glazing height per floor.

3. ANALYSIS – components generated in step 3 are assigned properties and tested. In this case we use DIVA to assign material properties and measure Solar Radiation for a given location and period of time. We use Boston as our geographical location in the example looking at all but the winter months.

4. OPTIMIZE –  a score, or “fitness value”, derived from the analysis performed in Step 3 is used to optimize the massing towards a specific goal. Here we use Galapagos, an optimization component included with Grasshopper, to tune the massing variables created in step 1, to derive an optimum form. There are several optimization algorithms available for Grasshopper. Add on tools such as Octopus and Goat may also be used in place of Galapagos.

5. DATA VISUALIZATION  – this section displays relevant data on screen. Without good data vis it can be difficult to see what’s actually going on, where the trends are, and how to tune your analysis. As an example we include several relevant metrics and a radial bar graph that breaks total solar radiation down by orientation. This graphic helps us understand the relationship between massing variations and potential heat gain on various facades.

6. RECORD / CAPTURE – the outcome of the optimization stage is usually only a small part of the answer. Capturing the optimization process is important for getting the most out of the data being generated. The approach used here is to simply capture the screen at the end of each run. For this, we use the capture component by Frank Florian. Be aware of the bug mentioned on the Grasshopper forum. Pasting the component back into the file after all other elements are in place fixes the problem.

a few words in conclusion

It is our hope that this framework approach will be useful for more than just repeating the solar radiation optimization shown here. Different massing approaches can be used to study options on a more constrained site. Daylight analysis can be used instead of solar radiation to drive the optimization. Multi-goal optimization in Octopus can be used to study trade-offs between solar radiation and daylighting. Vector or distance based analysis metrics can be generated within grasshopper and used in place of DIVA . As an illustration of the many possibilities, I have included a view optimization tool developed by August Miller here in the studio. In this example, the quality of views from each unit is ranked and measured to derive optimum building configurations for two residential towers on a harbor adjacent site in Boston, MA

We’re fortunate to be practicing in a time where advancements in computation enable us to devise our own tools and conduct these types of experiments. Low cost processing power and accessible easy-to-use software allows us to answer questions like, “If all I know is the building type, how big it is, and where its located, can I determine the best shape for solar orientation? How about wind load? How about structural efficiency?” In an era where a substantive discussion of this type would usually necessitate an engineer, it is liberating to know that designers are regaining the ability to conduct their own inquiries. Dont get me wrong, this isn’t about replacing engineers with Grasshopper plugins, it is optimism that this kind of exploration will allow us to reinhabit the grey area that exists between the two disciplines.