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