EMR Pattern Breeder

generation 0 render -- server load -- Settings

How it works

You breed pictures by choosing the ones you like. Each picture comes from a small network, its genome, which evolution changes a little at every generation, and your choices are the only score: nothing else judges the pictures. Evolving networks rather than training them is called neuroevolution; in substrate mode it is adaptive substrate neuroevolution, where evolution also shapes where a network's nodes go.

The CPPN, the genome you breed

Each picture's genome is a CPPN, a compositional pattern-producing network: a small network that takes coordinates in and gives numbers out. Each of its nodes applies a function to what it receives: sin repeats, gauss makes a bump, tanh squashes. Composing a few of them builds structure such as symmetry, repetition and gradients. Open a picture and choose its Topology tab to see its CPPN; click a node to see what it paints.

Breeding

Select one or more pictures and press "Breed selected". Each new picture is a copy of one of your picks with small random changes: weights nudged, a function redrawn, now and then a new connection or node. When you pick two or more, about half of the new pictures mix two of your picks before those changes. Every step stays in the session tree: go back to any of them and breed in another direction.

CPPN mode: the CPPN paints

The CPPN is evaluated at every pixel. In go the pixel's x, y, its distance from the center and a constant; out comes one number per channel (three in color, one in gray), and the color map turns them into the pixel's color.

pixel (x, y) → CPPN → color

Substrate mode: the CPPN builds a network, which paints

Here the CPPN answers another question: for two points of a plane, how strongly should the first connect to the second? That is HyperNEAT's idea, a small genome describing a large network by its geometry. EMR-HyperNEAT, the engine behind this page, reads the answers to build that network, the substrate: it puts hidden nodes where the answers vary across the plane, so the network's shape comes from the pattern (ES-HyperNEAT's idea), turns the answers into connection weights, and can read each hidden node's functions from extra outputs. Then the substrate paints: each pixel's x, y and a constant go in, its color comes out.

CPPN → substrate (nodes, weights, functions); pixel (x, y) → substrate → color

The controls

The switches change how the same genomes are drawn and bred without editing them: flip one back and the pictures return exactly. The palettes choose the functions nodes may use. The CPPN's palette shapes what breeding draws, so it shows over the next breeds, or at once with its drawing switch on. In substrate mode the Substrate section changes how the substrate is read, applied with "Redraw under these". Every "?" explains its control; "Hints" at the top hides them.

Try this

  1. Select two or three pictures you like and breed a few times.
  2. Open one ("open" on a picture), choose Topology, and click a node of its CPPN to see what it paints. Left and Right step through the other pictures.
  3. Switch to substrate mode, open a picture's Topology again and choose Substrate: it shows the network the CPPN builds, on its own plane; its card "What this substrate draws" shows the same picture, and what a hidden node you click computes at each pixel.
  4. In the Substrate section, start from mono4 and press "Redraw under these": the same genomes, read with four functions.

A picture's line as a GIF

What each frame shows

breeding...
Session