
In late 2006, the famous economist, Brian Arthur, of the Santa Fe Institute, stood before an audience there and described an experiment he had performed in which a computer program spontaneously invented complex logic circuits for computers. The computer was given only elementary logic gates to work with and instructions to wire them together at random.
The only other instruction the computer was given was to test these random circuits against a list of possible functions parameters that would be useful for a computer to have, such as adding or comparing two numbers. The computer kept those that worked and discarded those that didn’t. Then, it continued wiring components together using both the original primitive components and any new and useful ones that survived previous rounds.
When the model was run, it quickly began inventing more and more complex — and useful — electronic components, without anyone ever telling it how to do it or to what use the components would be put. The computer, on its own, evolved new technologies that had real-world uses, such as adding two eight-bit numbers — a non-trivial feat of engineering.
This type of inventing, known as genetic programming, goes back to the evolutionary algorithms first described in 1954 by Nils Aall Barricelli in his efforts to simulate biological evolution. Then in the 1970s, John Holland, also of the Santa Fe Institute, began applying those methods to a wide variety of fields as a way of optimizing functions. But, according to a report in Salon.Com,1 because genetic programming uses tremendous amounts of computer power, it wasn’t until the late 1990s that it began to see widespread use.
Since then, it has been used in areas such as quantum computing, electronic design, game playing, sorting, and searching; and it has produced a number of patentable devices. As in Brian Arthur’s technology-evolving model, genetic programs don’t tell a computer how to solve a problem in the traditional way — that is, line by line with great specificity.
They describe a problem and create an environment in which small chunks of computer code can be randomly combined — like Arthur’s circuits — to produce devices that may or may not work. The best ones are kept and the worst are discarded. The computer then cross-breeds the best components...