1. Don't override checkConstraints. Get rid of that.
2. Verify that your parameter file is using a NodeConstraints for your class ("&&" I presume) that has two children.
Sean
On Jan 22, 2016, at 12:57 AM, bijoy patwal <[log in to unmask]> wrote:
> Hi,
> I am new to java and genetic programming and trying to write a GA for xor gate using functions and,or,not.
> I am getting an error :-
> Incorrect number of children for node ! at pop.subpop.0.species.ind, was expecting 1 but got 2.
>
> i would be thankful for any help.
>
> the definitions of some functions and regression class are as follows-
>
> NOT.java-
> public class Not extends GPNode
> {
> public String toString() { return "!"; }
>
> public int expectedChildren() { return 1; }
>
> public void eval(final EvolutionState state,final int thread, final GPData input,final ADFStack stack,
> final GPIndividual individual, final Problem problem)
> {
> boolean result;
> //Boolean_Data rd = ((Boolean_Data)(input));
>
> Boolean_Data rd = ((Boolean_Data)(input));
> children[0].eval(state,thread,input,stack,individual,problem);
> result = !rd.x;
>
>
> }
> }
>
> And.Java
>
> public class And extends GPNode
> {
> public String toString() { return "&&"; }
>
> public int expectedChildren() { return 2; }
>
> public void checkConstraints(final EvolutionState state,final int tree,
> final GPIndividual typicalIndividual,
> final Parameter individualBase)
> {
> super.checkConstraints(state,tree,typicalIndividual,individualBase);
> if (children.length!=2)
> state.output.error("Incorrect number of children for node " +
> toStringForError() + " at " +
> individualBase);
> }
>
> public void eval(final EvolutionState state,final int thread,
> final GPData input,final ADFStack stack,
> final GPIndividual individual, final Problem problem)
> {
> boolean result;
>
> Boolean_Data rd = ((Boolean_Data)(input));
> children[0].eval(state,thread,input,stack,individual,problem);
> result = rd.x;
>
> children[1].eval(state,thread,input,stack,individual,problem);
> rd.x=result && rd.x;
>
>
> }
> }
>
> REGRESSION.java
> public class MultiValuedRegression extends GPProblem implements SimpleProblemForm
> {
> public static final String P_DATA = "data";
>
> public boolean currentX;
> public boolean currentY;
> public boolean expected_result;
> double sum = 0;
> int hits=0;
>
> public Object clone()
> {
> MultiValuedRegression newobj = (MultiValuedRegression) (super.clone());
> newobj.input = (Boolean_Data)(input.clone());
> return newobj;
> }
>
> public void setup(final EvolutionState state,
> final Parameter base)
> {
> super.setup(state,base);
>
> if (!(input instanceof Boolean_Data))
> state.output.fatal("GPData class must subclass from " + Boolean_Data.class,
> base.push(P_DATA), null);
> }
> public void evaluate(final EvolutionState state, final Individual ind, final int subpopulation, final int threadnum)
> {
> Boolean_Data input = (Boolean_Data)(this.input);
> sum = 0;
> hits=0;
>
> currentX=false;
> currentY=false;
> expected_result= true;
> ((GPIndividual)ind).trees[0].child.eval(
> state,threadnum,input,stack,((GPIndividual)ind),this);
>
> if(expected_result == input.x)
> {
> sum++;
> hits++;
> }
>
> currentX=true;
> currentY=false;
> expected_result = false;
> ((GPIndividual)ind).trees[0].child.eval(
> state,threadnum,input,stack,((GPIndividual)ind),this);
> if(expected_result == input.x)
> {
> sum++;
> hits++;
> }
>
> currentX=false;
> currentY=true;
> expected_result = false;
> ((GPIndividual)ind).trees[0].child.eval(
> state,threadnum,input,stack,((GPIndividual)ind),this);
> if(expected_result == input.x)
> {
> sum++;
> hits++;
> }
> currentX=false;
> currentY=false;
> expected_result = true;
> ((GPIndividual)ind).trees[0].child.eval(
> state,threadnum,input,stack,((GPIndividual)ind),this);
> if(expected_result == input.x)
> {
> sum++;
> hits++;
> }
> KozaFitness f = ((KozaFitness)ind.fitness);
> f.setStandardizedFitness(state, sum/4);
> f.hits = hits;
> ind.evaluated = true;
> }
>
>
>
> }
>
|