Print

Print


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