In many cases our individual abilities, knowledge, intuition and even collaboration with other architects aren’t enough, in order to find the best solution for a given project. In the architectural design process we often have to accept the lack of information and time to test and examine more prototypes of a project, so we settle and work with the best idea that fits our current conditions and time frame. What if we instead of always taking every design decision by ourselves, we let a process found in nature – evolution – decide for us?
Figure 1. Here is an example from http://boxcar2d.com, where they use a genetic algorithm to create the optimal driving object. The algorithm iterates through different configurations of a design and the prototype that drives the furthest per seconds, get the highest score (fitness). After about 20 iterations, it starts again from zero but with a new population of configurations. The fittest children from the previous 20 iterations have now inherited some properties and make now up a new generation. This process will continue until the best object has been created for its environment. This concept has the potential to be applied to many parts of the architectural design process.
Genetic Algorithms (GA)
Evolution is the core concept that makes sense of everything we know about living organisms. It is the idea that the organisms living on Earth today are the modified descendants of common ancestors (Campbell et al. 2008, s. 3). Evolution could be look upon as a set of instructions, an algorithm, looped through for billions of years, shaping the world we experience today. Creating a vast and beautiful diversity of living organisms, where creatures are incredible suitable to the environments they operate in. There are three fundamental principles that evolution is based on; heredity, variation and natural selection and it is also these that make up a traditional genetic algorithm.
- Heredity. There must be a process in place by which children receive the properties of their parents. If creatures live long enough to reproduce, then their traits are passed down to their children in the next generation of creatures.
- Variation. There must be a variety of traits present in the population or a means with which to introduce variation. Without any variety in the population, the children will always be identical to the parents and to each other. New combinations of traits can never occur and nothing can evolve.
- Natural selection. There must be a mechanism by which some members of a population have the opportunity to be parents and pass down their genetic information and some do not. This is typically referred to as “survival of the fittest”. (The Nature of Code 2016)
“The natural world is vastly more complex than anything we could ever hope to design.” – Peter J. Bentley
What is a Genetic Algorithm (GA)?
An algorithm is a self-contained step-by-step set of instructions to be performed normally by a computer (Wikipedia 2016b). You could compare an algorithm to a recipe you use when you cook something you havent’ cooked before. Normally it is a list with step-by-step instructions about what you should include and when you need to do what in order to get the food you want.
The term genetic algorithm, in short GA refers to a specific method for solving optimization problems based on a natural selection process that mimics biological evolution (Mathworks 2016a).
In the late 1960s, professor John Holland advocated the idea of a genetic algorithm. It wasn’t until the late 1980s that the idea reached critical mass in the academic circles. (Flake 2000 s. 342) Today, you can find variations of genetic algorithms but they are all part of a wider field of research, often referred to as “Evolutionary Algorithms” or “Evolutionary Computing” (Wikipedia 2016).
Why use (GA)?
You have in many cases the possibility to optimize whatever you want to. A GA utilizes the process of evolution and the power of computing in order to find the optimal solution to a specific design problem. A well executed GA program could come up with a better design solution than you would by your own.
How does the (GA) work?
A GA program needs to contain the three fundamental principles of biological evolution: heredity, variation and natural selection. (If you are not familiar to programming the following could be hard to understand.)
General outline of a GA program:
Step 1: Initialize. Create a population of N elements, each with randomly generated DNA.
LOOP: (This happens over and over until one of the stopping criteria is met)
Step 2: Selection. Evaluate the fitness of each element of the population and build a mating pool.
Step 3: Reproduction. Repeat N times:
a) Pick two parents with probability according to relative fitness.
b) Crossover—create a “child” by combining the DNA of these two parents.
c) Mutation—mutate the child’s DNA based on a given probability.
d) Add the new child to a new population.
Step 4. Replace the old population with the new population and return to Step 2.
(The Nature of Code 2016)
There are a lot of parameters you can define. The initial population for example could be a population of windows or elements of a facade system. It all depends on what you are using the GA for.
What are the applications within architecture?
There are countless of applications for GA. Some examples where GA already have been used:
- Optimizing the layouts of floor plans and site plans
- Optimizing building façade designs
- Optimizing forms of building structure
The main challenges?
To optimize design problems with the help of GA, you will need to convert specific design problems into combinatorial and/or numerical problems that can be addressed by GA (ScienceDirect 2016). One main challenge within the GA program can be to describe the crossover mechanism.
A genetic algorithm is basically an optimization tool you can use in the architectural design process on your design or just on a part of it.
Want to learn?
For those who want to learn to make their own GA programs could begin with:
- Learn the programming language Java
- Go to Processing.org and learn to create basic programs in this environment
- Begin with Nature of Code and Daniel Shiffman YouTube series about GA
- Create a GA program in Grasshopper/Rhinoceros
If you want to optimize something with help of a GA I recommend:
- Checkout Galapagos for Grasshopper.
- For optimization challenges with more than one objective, explore Octopus for Grasshopper.
Campbell, Neil A. et al. (2008). Biology. 8. ed. San Francisco: Pearson. s. 3
Flake, Gary W. (2000). The Computational Beauty of Nature: Computer Explorations of Fractals, Chaos, Complex Systems, and Adaptation. A Bradford Book. ss.339-360
Bentley, Peter J. (2005). Climbing Through Complexity Ceilings. http://www0.cs.ucl.ac.uk/staff/ucacpjb/BES6.pdf [2016-08-30]
The Nature of Code (2016). Chapter 9. The Evolution of Code. http://natureofcode.com/book/chapter-9-the-evolution-of-code/ [2016-08-29]
Wikipedia (2016a). Genetic Algorithm. https://en.wikipedia.org/wiki/Genetic_algorithm [2016-08-29]
Wikipedia (2016b). Algorithm. https://en.wikipedia.org/wiki/Algorithm [2016-08-29]
Mathworks (2016a). Genetic Algorithm. http://se.mathworks.com/discovery/genetic-algorithm.html [2016-08-30]
ScienceDirect (2016). The optimization of architectural shape based on Genetic Algorithm. http://www.sciencedirect.com/science/article/pii/S2095263512000490 [2016-09-17]
Daniel Shiffman (2016). Genetic algorithm: How it works. https://www.youtube.com/watch?v=RxTfc4JLYKs [2016-09-17]
Boxcar2d (2016). Computation Intelligence Car Evolution Using Box2D Physics (v3.2). http://boxcar2d.com [2016-09-17]
Angelika Hinterbrandner (2015). Feature image [Photography]. http://www.ahinterbrandner.com/