## ECJ-INTEREST-L@LISTSERV.GMU.EDU

#### View:

 Message: [ First | Previous | Next | Last ] By Topic: [ First | Previous | Next | Last ] By Author: [ First | Previous | Next | Last ] Font: Proportional Font

Subject:

Re: Infinite values in GPNodes, why?

From:

Date:

Fri, 26 May 2006 12:36:18 +0200

Content-Type:

text/plain

Parts/Attachments:

 text/plain (150 lines)
 ```It's funny how the things always work just after asking for help, I've made some modifications to the tutorial4 and it works. Anyhow, someone knows what was I doing wrong? Alberto Alberto Cuesta escribió: > Seems that I can't go without help, these days. I'm trying to make a > GP symbolic regression problem, this is the equation: > > y(n) = 2x(n) - 0.5y(n-1) + 0.4y(n-2) + 3x(n-1)2 > > The data comes from a communication channel, being a double for each > time step, that is represented by the x array, so x(n) is the current > value in the channel, and x(n-1) is the value in the channel 1ms ago. > Similarly, y represents the output of the function, so y(n-1) is the > value the gp tree gave 1 timestep ago and y(n-2) the output 2 > timesteps ago. > > Seems not very difficult, I implemented two arrays in the Problem > class, one which hold the input, and another one that hold the output, > so when evaluating the nodes would access to them. I attach at the end > the code. > > The problem is that I keep having problems, the tree gets evaluated to > Infinite, or to NaN, without apparent reason. In fact I check the > values that every node keeps, and they are always right, but at the > end I receive some strange value. > > Has anybody made this before? there is anything that I'm missing? How > should I code it? > > Alberto > > P.D: Code explanation: Only 3 node types, Add, X and Y, all of them > extend GPNode, they only implement toString(), checkConstraints(...) > and eval(...). If I take out Y and run the experiment with X and Add > no errors are produced, but I've been unable to find the error in Y. I > suppose that is some pointer thing I don't see. > ------------------------------------------------------------------------------------------------------------------------------------------ > > > public class NodeData extends GPData{ > public static final long serialVersionUID = 789456151; > public double value; > public GPData copyTo(final GPData gpData){ > ((NodeData)gpData).value = value; > return pGPData; > } > } > > ------------------------------------------------------------------------------------------------------------------------------------------ > > (In TestProblem.java) > > public void evaluate(final EvolutionState state, > final Individual individual, > final int threadNum){ > if (individual.evaluated) return; > y = 0d; // Defined as static Double > x = 0d; // Idem > > float error = 0; > for(int i = 0; i < inputSamples.length; i++){ > x = inputSamples[i]; > ((GPIndividual)individual).trees[0].child.eval(state, > threadNum, input, stack, (GPIndividual)individual, this); > if(Double.POSITIVE_INFINITY == > error)state.output.fatal("Infinite at input.value\n"); // This is > the one which fails > if(Double.isNaN(Math.abs(error)))state.output.fatal("NaN!!!"); > y = input.value; > error += Math.abs(goalSamples[i] - input.value); > } > > ((SimpleFitness)individual.fitness).setFitness(state, > 1/(1+error), false); > individual.evaluated = true; > } > > ------------------------------------------------------------------------------------------------------------------------------------------ > > > (In Add.java) > public void eval(final EvolutionState state, > final int thread, > final GPData input, > final ADFStack stack, > final GPIndividual individual, > final Problem problem){ > double tmp; > > children[0].eval(state, thread, input, stack, individual, > problem); > tmp = ((NodeData)input).value; > children[1].eval(state, thread, input, stack, individual, > problem); > ((NodeData)input).value += tmp; > > > if(Double.isNaN(((NodeData)input).value))state.output.fatal("NaN at > input.value\n" + toStringForHumans()); > if(Double.POSITIVE_INFINITY == > ((NodeData)input).value)state.output.fatal("Infinite at input.value\n" > + toStringForHumans()); // Never fails > } > --------------------------------------------------------------------------------------------------------------------------------------- > > > > (In X.java) > public void eval(final EvolutionState state, > final int thread, > final GPData input, > final ADFStack stack, > final GPIndividual individual, > final Problem problem){ > ((NodeData)input).value = ((GPTestProblem)problem).x; > > > if(Double.isNaN(((NodeData)input).value))state.output.fatal("NaN at > input.value\n" + toStringForHumans()); > if(Double.POSITIVE_INFINITY == > ((NodeData)input).value)state.output.fatal("Infinite at input.value\n" > + toStringForHumans()); // Never fails > } > > > ----------------------------------------------------------------------------------------------------------------------------------------- > > > (In Y.java) > > public void eval(final EvolutionState state, > final int thread, > final GPData input, > final ADFStack stack, > final GPIndividual individual, > final Problem problem){ > ((NodeData)input).value = ((GPTestProblem)problem).y; > > > if(Double.isNaN(((NodeData)input).value))state.output.fatal("NaN at > input.value\n" + toStringForHumans()); > if(Double.POSITIVE_INFINITY == > ((NodeData)input).value)state.output.fatal("Infinite at input.value\n" > + toStringForHumans()); // Never fails > } > ```