September 2008


Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Ondrej Pacovsky <[log in to unmask]>
Reply To:
ECJ Evolutionary Computation Toolkit <[log in to unmask]>
Sun, 28 Sep 2008 21:28:05 +0200
text/plain (62 lines)
adil raja wrote:
> Hi,
>    I presume that you are talking about converting the tree to a java source file and then compiling it and then executing it?
Basically yes. Albeit you can do this using runtime compilation where 
you're just passing a string to the java compiler ..
>  This surely is going to be slow. And then, ECJ is already in java. So what would this step save. 
(warning: My knowledge of hotspot and java optimization altogether very 
limited!). I presume that the optimizer cannot get much past one 
function boundary. So in order to evaluate and individual that's 
represented by a tree with say 10 nodes, you have to do quite a lot of 
computation, intermediate function calls etc. But then in symb 
regression, the actual individual is just a formula and except for the 
math function calls (like Math.exp), you don't have to do anything like 
tree traversal etc. So my thought was that evaluating a compiled string 
class RuntimeEvalMe implements RuntimeEval {
double eval(int x, int y, int z) {
    return x * x - Math.cos(z) + 123.;
could be quite fast. Given my problem settings (10^3 evaluations of the 
same evalMe function with different parameters), this could actually 
outweigh the cost of compiling.

> Symbolic regression can be made fast by opting for vector processing/evaluation by the interpreter. Much further improvements may be made by employing subtree caching. There is a paper by Maarten Keijzer that explains on this.
I am pretty sure subtree caching is effective when a single instance of 
"eval" is not called many times. I do not wish do dig into this any 
deeper, ecj is actually reasonably fast for what I need. My idea just 
looks reasonably easy to implement and could boost the computation speed 
quite noticeably (for my specific symb reg problem) if I needed too.

Thanks a lot for your comments,

> Regards,
> Adil Raja
> ----- Original Message ----
> From: Ondrej Pacovsky <[log in to unmask]>
> To: [log in to unmask]
> Sent: Saturday, September 27, 2008 3:29:43 AM
> Subject: runtime complilation for expensive eval ?
> Hi,
> I was wondering whether someone tried converting the GP individual to
> java (or other) code (perhaps by the ECJ to Java converter) and
> compiling it before actually running the evaluation. This is of course
> quite slow, but for symbolic regression on many training values could be
> interesting. Thinking of 10^3 and more evals per individual per generation.
> -- Ondrej