Print

Print


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