Print

Print


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