Print

Print


Dear Sean,
I'm trying to use the GP system to heavily switch between types, like
integers and FP-numbers, but this just doesn't seem to work.. I will try to
elaborate the problem and hopefully you will be able to help me..I've read
about similar problems on the forum, but the solutions presented there
apparantly don't apply to me.


I'm trying to go from arrays of FP numbers to single FP numbers to integers
I would like to have operators on integers (+,-,*,/), operators on
floats(+,-,*,/),  have declared them in seperate java files, two operators
to switch between float and int (<=, >=) and I would like for my root to
return an integer.

So Far I have got  the following:

#return type of the tree

gp.tc.0.returns = int
 gp.tc.0.init = ec.gp.build.Uniform
 gp.tc.0.init.min-size = 5
 gp.tc.0.init.max-size = 15

#3 atomic types
gp.type.a.size = 3
gp.type.a.0.name = float
gp.type.a.1.name = int
gp.type.a.2.name = nil

#different constraints set with the different atomic types
gp.nc.size = 6

gp.nc.0 = ec.gp.GPNodeConstraints
gp.nc.0.name = gene0
gp.nc.0.return = float
gp.nc.0.size = 0

gp.nc.1 = ec.gp.GPNodeConstraints
gp.nc.1.name = gene1
gp.nc.1.return = nil
gp.nc.1.size = 1
gp.nc.1.child.0 = nil


gp.nc.2 = ec.gp.GPNodeConstraints
gp.nc.2.name = float2
gp.nc.2.return = float
gp.nc.2.size = 2
gp.nc.2.child.0 = float
gp.nc.2.child.1 = float

gp.nc.3 = ec.gp.GPNodeConstraints
gp.nc.3.name = int2c
gp.nc.3.return = float
gp.nc.3.size = 2
gp.nc.3.child.0 = nil
gp.nc.3.child.1 = nil

gp.nc.4 = ec.gp.GPNodeConstraints
gp.nc.4.name = int2
gp.nc.4.return = int
gp.nc.4.size = 2
gp.nc.4.child.0 = int
gp.nc.4.child.1 = int


# We have ... functions in the function set.  They are:
gp.fs.0.size = 11

gp.fs.0.func.0 = ec.app.simpleclassifier.func.GetGeneFloat
gp.fs.0.func.0.nc = gene0

gp.fs.0.func.1 = ec.app.simpleclassifier.func.Add
gp.fs.0.func.1.nc = float2

gp.fs.0.func.2 = ec.app.simpleclassifier.func.Sub
gp.fs.0.func.2.nc = float2

gp.fs.0.func.3 = ec.app.simpleclassifier.func.Mult
gp.fs.0.func.3.nc = float2

gp.fs.0.func.4 = ec.app.simpleclassifier.func.Div
gp.fs.0.func.4.nc =float2

gp.fs.0.func.5 = ec.app.simpleclassifier.func.SmallerOrEqual
gp.fs.0.func.5.nc = int2c

gp.fs.0.func.6 = ec.app.simpleclassifier.func.GreaterOrEqual
gp.fs.0.func.6.nc = int2c

gp.fs.0.func.7 = ec.app.simpleclassifier.func.AddInt
gp.fs.0.func.7.nc = int2

gp.fs.0.func.8 = ec.app.simpleclassifier.func.SubInt
gp.fs.0.func.8.nc = int2

gp.fs.0.func.9 = ec.app.simpleclassifier.func.MultInt
gp.fs.0.func.9.nc = int2

gp.fs.0.func.10 = ec.app.simpleclassifier.func.DivInt
gp.fs.0.func.10.nc = int2


Having this in my params file result int a lot of warnings and a crash,
apparantly if my root returns anything else then nil(and maybe something
else like in the nil-and-root example- I get an
arrayIndexOutOfBoundsException.  Having the solution for nil-and-root the
only operations that the builder uses are the ones who return exactly that,
the others aren't even used for in between operations.

My datatype is of own creation
containing a array of floats:  pattern
a singular float : floatValue
a singular int : intValue

In which I store all my data, do I have to have a different datatype file
for each return type? If yes How does this work, especially if changing from
type to type. If no what am I doing wrong?

Regards,
Allan