Software Overview

This is computationally heavy software, it is designed to be run unattended on remote machines, it doesn’t (yet) have a Graphical User Interface, it isn’t even clear that such a graphical interface would actually do anything useful.

So the toolchain consists of a collection of related command-line tools and libraries supporting the workflow described below.

Files and Folders

Each building ‘plot’ is represented by a folder in the filesystem, so multiple adjacent plots are represented by multiple folders in a project folder.

Typical files are:

Crossover and Mutation

Population diversity is created through crossover and mutation, typically two individuals are selected to exchange a part of their genetic code, creating two new files. Mutation is random and is applied in addition to Crossover.

Note that crossover and mutation happen to individuals without reference to the fitness environment.

Fitness

Each individual is ‘scored’ based on their fitness in the environment defined by the configuration, these scores are cached as additional files in the folder so they don’t need to be recalculated for individuals that survive into the next generation.

Selection

Selection is based entirely on fitness scores, and individuals are removed from the population by deleting files. Selection doesn’t necessarily just retain the highest scoring individuals as this may not maintain diversity.

Iteration

This Crossover, Fitness, Selection process repeats for a fixed number of generations or until stopped manually.

Reiteration

It needs to be emphasised that in optimisation terms, the result of this process is a ’local minima’, the resulting building is a good fit for the environment such that there are no further small changes likely to improve fitness. This doesn’t mean that the result is ‘perfect’, running the entire process from the beginning may produce different ’local minima’ and these also can be explored.

More than this, each building is evolved within an environment of surrounding buildings. If the project involves creating more than one building then this environment will change as the buildings change, so further iterations will be required.

Generation of 3D geometry

The population individuals contain ‘genetic code’ that defines the steps needed to construct the building geometry in three dimensional space. This genetic code doesn’t resemble an actual building in any way, so further steps are needed to unfold something that looks like a building:

  1. Each step of the construction, a wall, ceiling, roof, stair etc… is described in an intermediate format and written as a separate .molior file.
  2. A tool from the Molior module takes each of these components and turns them into DXF fragments of 3D surface geometry.
  3. Another tool from the File::DXF module joins these together into a single DXF file.
  4. Optionally other tools from File::DXF can be used to create Collada files for importing into Blender or Sketchup, STL files for 3D printing, or RIB Renderman files.

Alternatively there is partially implemented IFC (Industry Foundation Classes) export available using the experimental File::IFC module.

Collada model rendered in Blender:

Render 02

Current development

A from-scratch Python rewrite of the evolution engine is in active development, alongside the Perl toolchain described above — see Related tools for what’s changing and why. Everything above is a fully automated, hands-off process; for an interactive, human-driven design tool built on the same form language and IFC output, see Homemaker add-on and homemaker-web. For the practical, step-by-step version of everything above, see the Homemaker walkthrough; for a plain feature list, see Features.