Thanks for the prompt reply Sean.I forgot to change the no of children in the parameter file. I am always getting the same fitness for every evolution though . Can u please have a look at fitness function and give me any suggestions on how I should approach the problem. Currently i increment sum on each hit. Generation: 0 Best Individual: Subpopulation 0: Evaluated: true Fitness: Standardized=0.25 Adjusted=0.8 Hits=1 Tree 0: (! (! (&& (! (|| y x)) (&& (&& x x) (|| x y))))) Generation: 1 Best Individual: Subpopulation 0: Evaluated: true Fitness: Standardized=0.25 Adjusted=0.8 Hits=1 Tree 0: (&& (&& (|| (|| (&& x y) (! x)) (&& (&& y x) (&& x y))) (|| (|| (|| y y) (|| y x)) (|| (&& x x) (&& y x)))) (|| (|| (! (&& x x)) (! (|| x x))) (! (! (|| y x))))) Generation: 2 Best Individual: Subpopulation 0: Evaluated: true Fitness: Standardized=0.25 Adjusted=0.8 Hits=1 Tree 0: (&& y x) On Fri, Jan 22, 2016 at 11:48 AM, Sean Luke <[log in to unmask]> wrote: > 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; > > } > > > > > > > > } > > >