Print

Print


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 :)

-Mike


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
> to
>         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.
>
> Sean
>
>
> 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
>