I've always been fascinated by genetic programming, and I've always wondered why it isn't more prominent. Is it not actually that useful? Is it too hard to use? Does building magic black boxes scare people?
I'd love to hear from anyone who's used genetic programming for... well, anything really.
- GPs are normally used in problems where you don't know what the answer looks like, but you know it when you see it, and it is a Global Search algorithm. The biggest problem is the search space of which GPs are used is enormous, so it takes a long time to find a solution. In the practical world this isn't very practical because there are many other good enough approaches that give you approximately the same answer, but there are obviously edge cases (see point 3).
- Tuning GPs is also very difficult, there are simply too many control parameters such as population size, crossover rate, mutation rate, crossover method, mutation method, selection method, do you adjust the parameters on the fly or make it fixed from the beginning etc... you get the idea. These parameters play a role into how fast you might find the answer but there are no guarantees because of the randomness nature of the algorithm, example, one set of optimal parameters might be really bad the next run.
- In terms of application GP is actually being used in the industry, but you probably don't hear about it because it is either a trade secret or people want a more deterministic solution. One example is testing, a particular company uses it to test their compiler technology, instead of just having humans write test code to test every possible bug, GP can be used to create valid* programs that intentionally make the compiler fail. Others include the great work done at Nutonian (http://www.nutonian.com/), where they use GP to evolve equations out of data (aka Symbolic Regression).
Lastly, a shameless plug but if you want to play around with GPs I have written my own GP framework here: http://chutsu.github.io/playground/ (very much a work in progress)
Thanks for posting - I've had a quick skim and it looks really interesting. Bookmarked for weekend reading :)
Have you seen Clojush? It's "the Push programming language and the PushGP genetic programming system implemented in Clojure." I haven't had a chance to play with it yet, but it seems to be in active development. https://github.com/lspector/Clojush
I wonder as well; I was really interested in it back when I was in college, but that was like 15 years ago, and it seems that the field has been pretty dead for most of that time. I thought it showed a lot of promise, so I'm pretty disappointed.
The field has not really been publicized that much, but it is by no means dead. Take the research done at Cornell for example, they are doing some really interesting work with Evolutionary Algorithms (https://www.youtube.com/watch?v=lMkHYE9-R0A), of which one PhD graduate (Michael Schmidt) has even started his own startup called Nutonian (http://www.nutonian.com) where they have a large list of customers (check it out).
Agreed that Evolutionary Algorithms are taking a backseat at the moment, but you can argue that Neural Networks also was very dormant until some thing like Deep Neural Networks came out, which is essentially the same idea but with a new learning method (http://www.newyorker.com/news/news-desk/is-deep-learning-a-r...). I believe there will be a break through at some point, just don't think it is dead yet ;)
Awesome, thanks :-) It was a field that I really liked, and had I continued in CS I would have definitely focused on it. But didn't really see much happening when I'd look into it periodically. I'm glad that it's continuing :-)
I ran some experiments with genetic programming some years ago. It turns out that the time taken to evolve a program is exponential in the size of the program, which unfortunately makes the technique not actually that useful.
I used it to evolve soccer robot team programs for the RoboCup simulator league in 1997. My entry, which was entirely done through genetic programming and coevolution, beat half of the field.
True, but that's talking about genetic algorithms, not genetic programming. I'm oversimplifying, but GA involves evolving parameters in a system to find a solution, where GP involves evolving the code itself.
Yes, I didn't quite grasp GP initially, but it simply appears to be using a GA to find an optimal syntax tree (code) that has the desired properties. From the GA perspective, wither the cost/fitness test involves executing code or not seems like just a detail of the GA optimization step.
In terms of how they behave, yeah, they're pretty similar—have a population of individuals, evaluate them for fitness, perform copy / mutation / crossover for highly fit individuals, repeat until fitness is high enough, or you get tired of it.
But, the arbitrary nature of the code being executed in GP (vs a fixed set of parameters in a GA), gives the GP system a lot more flexibility in finding an effective solution. The potential solution space is a lot larger.
I'd love to hear from anyone who's used genetic programming for... well, anything really.