Hi Sean,

That worked!!!

I had to extend the condition as such:

if (child != null) { 
            newtree.child = (GPNode)(child.cloneReplacing());  // force a deep copy
            newtree.child.parent = newtree;
            newtree.child.argposition = 0;

It works perfectly now. Thanks :)


On 5/23/06, Sean Luke <[log in to unmask]> wrote:
It's a bug triggered by our changes of deep and light cloning to get
rid of protoClone.

In GPTree.java, try changing the line
        newtree.child = (GPNode)(child.cloneReplacing());  // force a deep copy
        if (child!=null) newtree.child = (GPNode)(child.cloneReplacing
());  // force a deep copy

The situation: when you read in an individual, ECJ clones a
prototypical individual and then fills its trees.  The prototypical
individual doesn't have any trees yet; thus the clone needs to be a
light clone which avoids trying to copy the (nonexisting) trees.  We
forgot to make it a light clone, and it's a little complicated at
this stage.  I'll Think Deeply about what the right way is to fix
this, but I think the fix above may do it for you.


On May 23, 2006, at 1:03 PM, Michael Solano wrote:

> Hello Everyone,
> I'm attempting to move some experiments from version 13 to version
> 15 and I've run into a problem. One of my custom problems requires
> I read an individual into the evaluator and compare it to the
> individuals in the population. I use the newIndividual
> (EvolutionState state, Subpopulation _population, Fitness -fitness,
> LineNumberReader reader) method in Species.java to accomplish this.
> This worked perfectly in version 13 but I get the following
> NullPointerException in version 15:
> Exception in thread "main" java.lang.NullPointerException
>         at ec.gp.GPTree.clone(GPTree.java:212)
>         at ec.gp.GPIndividual.clone (GPIndividual.java:295)
>         at ec.Species.newIndividual(Species.java:114)
>         at ec.app.solano_projects.unimodal_trap.Unimodal.evaluate
> (Unimodal.java:234)
>         at ec.simple.SimpleEvaluator.evalPopChunk
> (SimpleEvaluator.java:126)
>         at ec.simple.SimpleEvaluator.evaluatePopulation
> (SimpleEvaluator.java:76)        at
> ec.simple.SimpleEvolutionState.evolve(SimpleEvolutionState.java:75)
>         at ec.EvolutionState.run(EvolutionState.java:427)
>         at ec.Evolve.main(Evolve.java:599)
> Here is the code_segment that reads the individual into the evaluator:
> perfect_ind = (GPIndividual)state.population.subpops
> [0].species.newIndividual(
>                        state,
>                        state.population.subpops[0],
>                        (Fitness)(state.population.subpops
> [0].f_prototype.clone()),
>                        reader);
> Below are the contents of the file I'm attempting to read into the
> individual:
> Evaluated: F
> Fitness: f1064971090|0.9772235|i0|
> Tree 0:
>  (D (C (B (A x) (A x)) (B (A x) (A x)) (B (A x) (A x))) (C (B (A x)
> (A x)) (B (A x) (A x)) (B (A x) (A x))) (C (B (A x) (A x)) (B (A x)
> (A x)) (B (A x) (A x))) (C (B (A x) (A x)) (B (A x) (A x)) (B (A x)
> (A x))))
> Does anyone know what might be causing this error? Thanks :)
> -Mike