BONABEAU APPS

evoDesign: evolving tiles

A reproduction of the tool in Anderson, Buchsbaum, Potter and Bonabeau, "Making Interactive Evolutionary Graphic Design Practical: A Case Study of Evolving Tiles" (Evolutionary Computation in Practice, 2008). Each tile is a stack of circles, rectangles, stripes and color grids drawn on a wrapped panel, so every design repeats seamlessly. Select the tiles you like, choose an operator, and press Go.

How it works

Genotype. A tile is a list of graphic elements, drawn in order, so later elements cover earlier ones. Every element has a color (red, green, blue, opacity, each 0 to 255). Circles add the top-left corner of their bounding box and a diameter between 0.05 and 0.5; rectangles add a corner, a width and a height of at least 0.05; vertical and horizontal stripes are rectangles that span the tile, with widths up to 0.3; a color grid is a fixed 4 × 4 grid of colored cells whose only genes are the cell colors. Coordinates run from 0 to 1, and elements that cross an edge reappear on the opposite edge.

Mutation. The element order is shuffled, then every gene that is not frozen moves to a uniform random value within a half-range of its current value, clipped to its bounds (Equation 1 of the chapter). With probability 1/3 a random element is removed and with probability 1/3 a new one is added. Defaults: position 0.05, RGB 5, opacity 60, diameter 0.1, width and height 0.05.

Crossover. For parents with ni ≤ nj elements, the child gets n elements, drawn uniformly between ni and nj. The first k, with k uniform between 0 and ni, are drawn without replacement from the smaller parent; the rest come from the larger one.

Modes. Mutation keeps the selected tile and fills the rest of the population with its mutants. Crossover needs two or more selected tiles and fills the next generation entirely with their offspring, each from two parents picked at random. Mutation and crossover creates each offspring by crossover with the probability on the slider, otherwise by mutation.

Implementation notes
  • The chapter does not give an upper bound for rectangle sides; 0.5 is used. Initial opacity is drawn between 128 and 255 so that new elements are visible; mutation can still take it anywhere from 0 to 255. Both are adjustable under Advanced settings.
  • Removal by mutation skips elements that have any frozen attribute, on the assumption that a frozen element is one the designer wants to keep. "Freeze number of components" turns off both removal and addition.
  • Following the chapter, color grids cannot be frozen; their cell colors always evolve. They can still be edited by hand.
  • With several tiles selected in mutation mode, all of them are kept and their mutants fill the remaining slots in turn. "Keep selected parents" adds the same elitism to the two crossover modes, which the chapter leaves without it.
  • The design tree records every generation. Going back and pressing Go starts a new branch rather than overwriting the old one; the tree list lets you jump to any node. Edits made in the editor change the generation you are viewing.
  • Fork opens a second copy of this page in a new tab, seeded with the current population, as the chapter's fork button does. Save writes the whole design tree and settings to a JSON file; Load reads it back.