Eureqa and Symbolic Regression
Friday, December 4, 2009 at 10:53PM In the mid 90's I worked at a company called Optimax. They had a really brilliant solution for solving manufacturing scheduling problems -- especially problems that didn't fit into traditional O.R. models.
The Optimax approach was to mash an uber-fast truth maintenance system with a genetic algorithm solver. Also throw in a scripting language so humans could use it. The end result was that you could simply declare your scheduling problem in the scripting language, the genetic algorithm solver would attempt to produce a more optimal schedule and the TMS would keep the solver honest by quickly scoring schedules and determing feasibility. Lather, rinse, repeat. In a short amount of time you wound up with a very good schedule. If you wanted to, you could even attempt to modify that schedule manually and the TMS would warn you if you produced an infeasible schedule.
It worked really well. Having just come from American Airlines' hardcore O.R. group (AADT) I was really impressed and learned quite a bit.
Back to the present... yesterday I actually spent a little time looking for a tool to help me synthesize some low-level x86 SSE instructions from a table of raw input and output data and thought about how it was a variation of what was built at Optimax. I didn't immediately find anything...
... and then today my friend Sam sent me the link to Cornell's Eureqa tool.
Here's the summary from the Eureqa site:
Eureqa is a software tool for detecting equations and hidden mathematical relationships in your data. Its primary goal is to identify the simplest mathematical formulas which could describe the underlying mechanisms that produced the data. Eureqa is free to download and use. Below you will find the program download, video tutorial, user forum, and other and reference materials.
I'm excited to see if it can help me solve my problem!
Allan MacKinnon
After digging into Eureqa, I learned that bitwise operators aren't supported (yet) and the models, unsurprisingly, are based on real numbers since that's the focus of the tool.
I've suggested an enhancement to the Eureqa team but I can guess that it would require updating their "chromosome" representation quite a bit.
I also quickly skimmed Discipulus but it does not appear to include bitwise operators.
I'll keep looking for existing tools but in the meantime I should probably estimate how large of a code sequence I'm trying to synthesize. It might be small enough to brute force.
Reader Comments