Also, (sorry, pressed <send> too fast) if you *cannot* modify LaTeX, feel free to send me suggested errata. I'm sure the manual's got a ton of errors in it. Also note that I've just modified the manual to reflect new changes I've made to the GP system coming up in response to the discussion we've had below. Sean On Dec 1, 2010, at 9:59 AM, Wei He wrote: > Hi Sean, > > By your revision and some additional debugging on other cooperative > classes, the code works as my intention now. I am very grateful for > your help. > > BTW, what is your plan about the ECJ manual? > I found some tiny spelling and typewriting errors in GP related > chapters. Do you need a errata sheet for later update? > > Wei > > 2010/11/30 Sean Luke <[log in to unmask]> > Wei, there are several basic Java errors in your class below. Here > is a revised version which fixes them but I've not tested it. > > Sean > > > > public class MyData extends GPData { > > public char char_val; > public Bike Bike_val = new Bike_val(); > > > public Object clone() { > MyData copy = (MyData) super.clone(); > copy.Bike_val = (Bike) (Bike_val.clone()); > return copy; > > } > > public GPData copyTo(GPData other) { > ((MyData) other).char_val = char_val; > other.Bike_val = (Bike) (Bike_val.clone()); > return other; > > } > } > > > On Nov 30, 2010, at 4:16 AM, Wei He wrote: > > Hi Sean, > > I tried to implement MyData. But, NullPointerException was thrown > when cloning the Bike_val which was used by the setup procedure of > MyGPProblem(BikeTestDataGe). > I mean: > > public class MyData extends GPData { > > public char char_val; > public Bike Bike_val; > > @Override > public Object clone() { > MyData copy = (MyData) super.clone(); > > // do any additional initialization required for deep > clone > copy.Bike_val = (Bike) copy.Bike_val.clone(); // > NullPointerException is thrown > > return copy; > } > > @Override > public GPData copyTo(GPData other) { > ((MyData) other).char_val = char_val; > > return other; > } > } > > > And the stacktrace is as follows, > java.lang.NullPointerException > at testdatagen.bike.gp.MyData.clone(MyData.java:24) > at ec.gp.ADFContext.setup(ADFContext.java:135) > at ec.gp.ADFStack.setup(ADFStack.java:113) > at ec.gp.GPProblem.setup(GPProblem.java:81) > at > testdatagen.bike.gp.BikeTestDataGen.setup(BikeTestDataGen.java:56) > at ec.Evaluator.setup(Evaluator.java:79) > at ec.simple.SimpleEvaluator.setup(SimpleEvaluator.java:36) > at ec.EvolutionState.setup(EvolutionState.java:313) > at > ec.simple.SimpleEvolutionState.startFresh(SimpleEvolutionState.java: > 50) > at ec.EvolutionState.run(EvolutionState.java:360) > at ec.Evolve.main(Evolve.java:655) > > > It seemed that I didn't get you. Can you please little elaborate? > > Thanks, > Wei > > > > 2010/11/29 Wei He <[log in to unmask]> > Thanks for your advice. I'll have a try. > > Best regards, > Wei > > > 2010/11/25 Sean Luke <[log in to unmask]> > On Nov 24, 2010, at 9:20 PM, Wei He wrote: > > > In the STGP example of the manual, the val variable can store both > boolean and real-valued data. However, in my case, the input from > the child (char data) and the the result (Bike data) of a GPNode can > not use the same val variable. Should I allocate different fields > for them as below? > > public class MyData extends GPData { > public char char_val; > public Bike Bike_val; > public GPData copyTo(GPData other) { > ((MyData)other).char_val = char_val; > ((MyData)other).Bike_val = Bike_val; > return other; > } > } > > Sure, that's how I'd do it. However I would clone Bike_val rather > than sharing the pointer. Also you'll need to implement the > MyData.clone() method and in it clone the Bike. I should show that > as an example in the manual. > > Now it may be the case that you have certain GPNodes which can > accept EITHER a char or a Bike. In that case I would have an > additional boolean which indicates which variable holds the real data. > > Sean > > >