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