I don't know if this will help with the issues that are really motivating this thread, but for what it's worth I've written a couple of genetic programming systems (genetic algorithms in which the genomes are programs that are run as part of the fitness tests) in Clojure and I generally use agents to compute fitnesses across multiple threads and "await" to synchronize generations... which I gather is a different approach than was taken in the code being discussed, but in case it interests anyone see:
https://github.com/lspector/Clojush (this is a fairly mature research system that evolves Push programs) or https://github.com/lspector/taggp (this is a much simpler and more traditional genetic programming system with one novel feature, involving "code tagging" -- which is implemented in a pretty ugly way in "eval-with-tagging" but the multithreading part, using "pmapall", is pretty straightforward) BTW I put an even simpler, almost minimal genetic programming system at https://gist.github.com/1452484 -- this one isn't even multithreaded (although one could easily use the "pmapall" approach from above) and it does have one non-traditional feature (called "trivial geography", which limits who can compete/mate with whom based on distance in the population), but it may be a good example for people who want to see one simple way of doing genetic programming in Clojure. Yes, scandalously, it uses "eval" in the error function. -Lee -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en