Fork me on GitHub
Target Character
Current Best
Candidates
Speed

What is this?

This demonstration uses an evolutionary algorithm to "learn" how to draw alphabetic characters. It is inspired by the way children in the USA learn the written language: repetition and gradual improvement.

The algorithm "mutates" the current best drawing (the parent) by randomly adding and removing lines. If any of these children are closer to the target character, that child becomes the new parent. Over time, the parent "evolves" to be more similar to the target.

On each round, the most similar child is highlighted in the bottom row. If this child is closer than the parent, it is highlighted in green and replaces the current parent. Otherwise it is highlighted in yellow.

Observations

The algorithm seems to perform best on characters that are more "sparse" (i.e. A, T, C) than characters that are more "dense" (i.e. W, M, @).

It's fascinating to watch it learn foreign characters (Click to try):

Who created this?

This project was created by Zachary Wasserman

It is inspired largely by Boxcar2D