I looked over tutorial4 which is a simple regression on:
x*x*y + x*y + y
and uses the functions and terminals +, -, *, X and Y. Although I've
revised it to work on a fixed domain [-1.0, 1.0] at 0.1 increments
instead of random sampling, the GP finds the solution, so far,
without fail and fairly quickly.
Now, if I try to use:
x^4 + x^3 + x^2 + x
from Koza I, and I use the functions and terminals that he used: X,
+, -, *, %, sin, cos, rlog, exp, on same domain as above (which is
what Koza used), I find that the GP does not find the solution, so
far, which is a bit of surprise. Additionally, I am sometimes running
into trouble with NaN with the message: Bad Fitness ( < 0, NaN or
Infinity): NaN setting fitness to 0 which results in a false positive
for the ideal individual.
My questions are:
1) Is this typical? Using that function set, is the quartic difficult
to find? If I use just X, +, *, I get results as quickly as tutorial4
but that seems like stacking the deck. I only have to add - to the
function set to make the problem so far unsolved.
2) What functions need to be protected in Java that didn't need to be
protected in LISP or need additional protections? What protections
Initial investigation suggests that Math.exp() goes to infinity very
quickly...as soon as Math.exp( 1000). What would be a reasonable
"protection" on exp? But I'm not sure what would be giving me a NaN
result. cos and sin should be defined over everything (although my
trig is a bit rusty). Perhaps the "0" protection on Math.log() is
insufficient? I don't know--just guessing--and was wandering if
anyone had run into similar problems.