Beautiful CoffeeScript code for metaheuristic optimization. The visualizations are done in Protovis. A common misconception is that Protovis has its own language, since Protovis code is usually in
That design decision made a lot of sense before CoffeeScript existed, since standard JavaScript becomes extremely unwieldy in a Protovis context. I expect to see a lot more Protovis code done in CoffeeScript in the future.
This is very detailed and chock full of great visualizations, but I still can't figure out how harmony search is fundamentally different than your run-of-the-mill genetic algorithm. What am I missing?
It's not different. Both are random search algorithms packaged in a (somewhat complex) human abstraction. The convergence properties are the same as for other search algorithms using meta heuristics, including the classic simulated annealing algorithm.
It looks to me like a GA that can mix and match chromosomes from a set of fit candidates instead of just mutating them individually. In other words, sex.
The metaphor with jazz music isn't terribly illuminating.
The short of the algorithm is that it generates a set of random vectors and evaluates the objective for each one. It then stochastically chooses between perturbed components from elements in that set and new random components to build a test vector. If that vector performs better than the worst one in the set, it replaces the worst one.
I'm pretty sure that process doesn't look very similar to jazz improvisation. It's also not nearly as complicated as it's made out to be. I also am a little frustrated that neither of his problems were good fits for an algorithm like this and so I dunno if I can walk away calling this a neat algorithm.
While it doesn't have the demo or Coffeescript code, I found the wikipedia page much easier to comprehend what the algorithm actually does. http://en.wikipedia.org/wiki/Harmony_search
That design decision made a lot of sense before CoffeeScript existed, since standard JavaScript becomes extremely unwieldy in a Protovis context. I expect to see a lot more Protovis code done in CoffeeScript in the future.