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