On the Origin of Circuits
The informatics researcher began his experiment by selecting a straightforward task for the chip to complete: he decided that it must reliably differentiate between two particular audio tones. A traditional sound processor with its hundreds of thousands of pre-programmed logic blocks would have no trouble filling such a request, but Thompson wanted to ensure that his hardware evolved a novel solution. To that end, he employed a chip only ten cells wide and ten cells across— a mere 100 logic gates. He also strayed from convention by omitting the system clock, thereby stripping the chip of its ability to synchronize its digital resources in the traditional way.
He cooked up a batch of primordial data-soup by generating fifty random blobs of ones and zeros. One by one his computer loaded these digital genomes into the FPGA chip, played the two distinct audio tones, and rated each genome’s fitness according to how closely its output satisfied pre-set criteria. Unsurprisingly, none of the initial randomized configuration programs came anywhere close. Even the top performers were so profoundly inadequate that the computer had to choose its favorites based on tiny nuances. The genetic algorithm eliminated the worst of the bunch, and the best were allowed to mingle their virtual DNA by swapping fragments of source code with their partners. Occasional mutations were introduced into the fruit of their digital loins when the control program randomly changed a one or a zero here and there.
Evolution is such an elegant way to solve a problem, and I’m hoping to find an excuse to learn evolutionary programming at some point in the future. The article is an interesting read, and gets bonus points for the joke in the title.