Software that evolves houses
In the last article, I wrote about Christopher Alexander's Pattern Language, the related field of Software Design Patterns, and then speculated that Evolutionary Computation using a Pattern Language as fitness criteria might just be made to work for designing domestic buildings.
A Form Language for adaptive domestic design
Here are some questions that I asked myself: Can we find a way to design usable buildings using Darwinian evolution? How would this work in practice? Pattern Languages could be the fitness criteria for an Evolutionary Computation that designs buildings. But what kind of building? Not just any kind of building. It's difficult to imagine a credible Pattern Language for a tower block, something that could be dropped anywhere, or something with mass repetition on a regular grid. In a real environment everything that has an influence is a gradient, no place will be exactly the same as any other place, so any building that has been optimised for that environment will be unique, it will be custom fitted at every scale.
What is needed is a complementary Form Language that is adaptable on a human scale, that is sufficiently expressive to be able to represent a diverse number of possible configurations, but which always describes something that is buildable. Such a Form Language isn't going to be based on standard grids, or interchangeable modules, it will be closer to existing informal vernacular building styles than a style based on formal symmetries.
The basic unit of building is the 'plot', an area of ground with a defined perimeter. Within this perimeter we can build anything that can be described by the form language. For an evolutionary approach, we can't just take a single instance of this plot, put a building in it, then make random changes and hope for the best. We need a population of instances of this plot, all still the same, but different instances, multiple realities, each with different versions of our building on them.
Figure: A Population of a single house after thirty two generations
Crossover and mutation
Our population initially consists of simple individuals; these individuals are just empty space, or a plot containing a basic one room house. This population is then ready for evolution. One way to drive evolution is to throw in some random mutations, tinkering with the genetic code of individuals: splitting a room in two, moving a partition, or adding another storey. But most mutation has a negative influence, the main driver of evolution is recombination. Recombination is sex, the creation of a new individual that inherits from two parents. Recombination can create new possibilities from old, it allows different genes to exist in parallel within a population, whereas evolution entirely through mutation has to happen sequentially. The process of recombination for our house is a crossover, where rooms, groups of rooms, or entire storeys are simply swapped.
Selecting with a Pattern Language
These processes increase the variety within the population, but in this simulated artificial evolution, most new individuals are failures. There needs to be some way to choose the individuals that will be used to create the next generation. Specifically, for each individual house, somehow answering the question: how well does it 'fit' the environment? So far we have determined that the 'environment' for the house is going to consist of a Pattern Language, plus the geometry of the place around it and the way it affects daylight. Each of these environmental factors is a gradient, a field that pushes and pulls the shape of the building during evolution.
But Pattern Languages are not the same as software Design Patterns, here there are multiple patterns that need to be considered simultaneously in the fitness calculation, balancing with each other rather than any single pattern dominating – We need to multiply scores for each pattern together and use the resulting number for the fitness measure.
But that's not all, we can't have a building that just delivers patterns for living but which is impractical to construct. Remember that efficient buildings consume the least amount of space and materials for the most amount of utility. There needs to be two sides to this equation; on one side there are human needs met represented by the patterns, and on the other are costs in terms of material quantities and of space occupied.
What do we get?
Here we can make some sense of the Agile Design concept of 'choosing the change that makes future changes easier'. If we take our final evolved 'design', work backwards and look at its ancestors, i.e. the minority of individuals in each generation that were successful passing on some aspect of their genetic code, we can see that every successful change was successful because it enabled a further successful change.
Figure: Animation of some stages of a single house evolution
Maybe you think an evolutionary architecture would have a more 'organic' look? There is a sci-fi vision of the future where buildings look like bits of insects, or translucent seashells, this isn't that future. These are modest, domestic, ordinary buildings, designed in an extraordinary way. The extraordinary aspect doesn't come from new materials or clever manufacturing techniques, it is simply in the arrangement. These houses can in fact be 'in' one of any number of styles, but only if this style is consistent with an adaptive Form Language. Buildings that evolve in this way are never going to make use of Form Languages that consist of monumental geometrical shapes, modular components, freeform blobs, or mass repetition on a grid.
Do we need it?
I hope I have demonstrated that Evolutionary Computation really can design credible domestic buildings to a Pattern Language – so long as we use an adaptive Form Language to describe these buildings. These human-scale houses are modest, even ordinary. Perhaps unsurprisingly, these houses closely resemble the kind of buildings found in preserved historical cities. Before the nineteenth century, houses in these cities tended to be constructed incrementally, over a period of time – assembled adaptively as their occupants responded to immediate needs.
If so, is this computational method necessary? Do we just need to go back to an earlier age where people built their own houses using materials to hand – A simpler adaptive approach?
But spend more time in such a historical city and the sheer crappiness of the buildings themselves becomes evident. Surely they are picturesque, but inside there are bedrooms without windows, toilets crammed under stairs, low ceilings and changes in level that are a menace to life. A simple adaptive method that involves building and adapting real buildings in-place has lots of virtues, but also some real disadvantages.
The Compact City
As anyone who has wandered around a compact old town of narrow winding streets and public squares can attest, distances for people are very significant. When space is sparsely occupied, travel distances are further. When buildings are close together, there are more destinations within reach; conversely, for a market or a café or a church, there are more people within reach – making these institutions more viable.
These features reinforce themselves in a process of positive feedback, a market with more potential customers flourishes, which in turn increases the attractiveness of the neighbourhood as a place to live – increasing the number of potential customers.
I don't have the exact quote to hand since it is behind a paywall, so I'll paraphrase, but the architect Léon Krier makes the excellent point that even if through some magic we had plentiful clean energy, flying cars, teleportation booths and all that other stuff, we should still live in walkable human-scale cities like this.
Going back to our method of domestic design using Evolutionary Computation; it works, and it gets us one step closer to putting the design of buildings on a scientific footing, but the real advantage is that it enables the adaptive design of the compact city.
I'm not talking about 'urban design' or the 'masterplan', these concepts are out of scope for a technology that is fundamentally local and human scale. However, no house in a high density city can be designed in isolation; a building plot isn't an island, it is physically connected to the street and to adjacent plots. Our prospective building forms part of the environment for nearby buildings, just as these nearby buildings form the environment for ours.
This entangled nature is the reason why historical cities, even with all their material deficiencies, succeed as humane environments – they were built adaptively over time, each building has a negotiated relationship with its neighbours, complementing each other in a dance of daylight, privacy and give-and-take – sharing the combined place rather than dominating it.
Figure: Rendered view of a group of generated houses
With the computational approach that I'm proposing, we can design houses on adjacent plots in parallel with each other, then tear them down, virtually, again and again. At each of these iterations the environment for each house changes because the adjacent houses are also changing in-step at the same time. This evolving virtual environment forms our houses, analogous to the way the real environment forms real living organisms. A process of co-evolution like this is exactly what is needed to create the entangled urban fabric of a living city where every building is unique. The buildings are unique, not for arbitrary aesthetic effect, but necessarily, because they have each been designed to fit a unique situation.
What happens next?
This approach can be useful at many scales: from a self-builder who tweaks the Pattern Language to suit their individual taste, iterating until they get what they need; up to a larger scale where multiple buildings are constructed speculatively with no specific occupants in mind. I have my own ideas about how this should work, of course, but excuse me for not being specific; this technology is never going to be any use creating the kind of monumental, regimented, inhuman architecture that we are familiar with – We already know how to do this. What it does do is to create buildings that are well adapted, but in a state that makes future changes easier – It can't work any other way.
I want to finish this article with a proposed Design Pattern for a domestic architecture:
Laying out buildings to create the maximum utility in a finite space is a hard problem; there are many human needs, represented by a Pattern Language, that need to be balanced simultaneously.
When a problem has a large number of conflicting requirements, recognise that an optimal solution has to be arrived at incrementally, in an adaptive fashion. Computers are good at this sort of thing, so use them wherever appropriate.
The images above and below are unaltered output from an existing software codebase. This is Free Software at an early but functional stage, code contributions and computation capacity are actively solicited; to have a hand steering the future of all this, please get involved.
For more technical detail on exactly how this software works, I have a published paper in the Journal of Biourbanism, An Adaptive Approach to Domestic Design.
- The final article in this series has some good reasons for doing cities like this.
- The previous two articles are a brief introduction) and how Pattern Languages fit in.
Figure: Rendered view of a group of generated houses