Evolutionary Algorithms and Analog Electronic Circuits
hforsten.com
hforsten.com
This was evolving an FPGA to do things like detect tones or voice commands. Weirdly reminiscent of DNA, logic cells which were apparently useless would cause the circuit to break when they were removed. Neither did the layout work when transferred to an identical FPGA.
Now that is quite fascinating. (The article goes into possible explanations, for those who care.)
Behold 80% of the appeal of evolutionary algorithms... people get so excited that they do anything that they are willing to overlook that you burned CPU-hours of time to produce something that doesn't do it very well. There's this weird disconnect between how people speak of them and the actual standards applied to them that gets applied to very few other things. (Neural nets, perhaps. Even if they recently got better, they still were grossly overrated for a long time.)
Some of the results are really impressive. There are domains where stochastic optimization works really well.
And even when it doesn't generate human competitive results, it's still cool. It's a computer program doing something previously only humans could do.
The results must be post-validated of course, since in some cases it will over-optimize to quirks of the Spice or other simulation that's used to implement the fitness function.
http://www.eecs.harvard.edu/~rad/courses/cs266/papers/koza-s...
With 0-ohm signal source impedance very strange things happen. For example, a common emitter amplifier will seem to have much better bandwidth than it actually does (hides miller and base capacitance).
* Manual placement of components, based on the designer's skill and knowledge
* Insertion of preexisting blocks from a library
* Specification of requirements for a generated block to satisfy, triggering evolutionary search as described in the article
I'm not sure how likely beginning with an existing design would impede the evolutionary algorithm from escaping a local optimum based on a bad decision, but one could integrate the third strategy in the above list with the first two in varying degrees.
Loosely related by analogy in the software domain: superoptimization. [1]
You mix automatic optimization with manual routing (using your skill and knowledge) and can switch between these modes at any given point. Your manual edits could be used in new generations or you could just say to autorouter: “keep away from this area”. I had some experience with it and was quite satisfied.
Indeed. It would also be interesting to see power consumption addressed in the cost function.