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.
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.
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.
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
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 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.
New here? How it works explains the pictures, the two modes and what to try first. Dismiss