Thanks for the fast response. I think you're right. I got confused by
looking at the example programs like lawnmower etc.
There, the ADF only takes terminals as argument. So the ADFs there are all
"pre-terminals".
Like I said, what I want is an ADF that accepts a function as argument. Like
depicted here:
http://www.cs.bham.ac.uk/~txs/teaching/2001/EC/gp-adf/slide9.html
http://www.cs.bham.ac.uk/~txs/teaching/2001/EC/gp-adf/slide12.html
I've changed my params file so that the argument of the ADF takes a specific
function as argument. It works, however I get some errors when running this:
-------------------
WARNING:
There is no argument terminal for argument #0 for the node ADF0[1] in
individual pop.subpop.0.species.ind
WARNING:
There is no argument terminal for argument #1 for the node ADF0[1] in
individual pop.subpop.0.species.ind
WARNING:
There is no argument terminal for argument #2 for the node ADF0[1] in
individual pop.subpop.0.species.ind
WARNING:
There is no argument terminal for argument #0 for the node ADF0[1] in
individual pop.subpop.0.species.ind
WARNING:
There is no argument terminal for argument #1 for the node ADF0[1] in
individual pop.subpop.0.species.ind
WARNING:
There is no argument terminal for argument #2 for the node ADF0[1] in
individual pop.subpop.0.species.ind
ONCE-ONLY WARNING:
A GPNodeBuilder has been requested at least once to generate a one-node tree
with a return value type-compatable with a certain type; but there is no
NON-TERMINAL which is type-compatable in this way. As a result, the
algorithm was forced to use a TERMINAL, making the tree larger than
requested, and exposing more child slots to fill, which if not carefully
considered, could recursively repeat this problem and eventually fill all
memory.
ONCE-ONLY WARNING:
class ec.gp.koza.HalfBuilder can't find a terminal type-compatable with nil
-------------------
I suppose my way of working now is the correct one, here's what I put in my
params file:
gp.fs.1.func.2 = ec.app.my_prog.functions.If #is simply a function
gp.fs.1.func.2.nc = if-constraint #defined above
gp.fs.1.func.2.arg = 0 # meaning it's ARG0
When I run this, I don't see an 'If', I only see 3 arguments where the
arguments have the same constraints as those of 'If'. So I suppose when I
see an individual with ADF0[1] it means the name If got replaced with
ADF0[1], that's all? If so, that's what I need.
Now, I still have one problem. The ADF tree gets out of control. It becomes
way too big eventhough I try to limit the max-depth
Also, this doesn't seem to work:
gp.tc.0.init.max-depth = 3
gp.koza.half.max-depth = 3
it gives the following error:
-------------------
FATAL ERROR:
The Max Depth for a KozaBuilder must be at least 1.
PARAMETER: gp.tc.0.init.max-depth
ALSO: gp.koza.half.max-depth
-------------------
Removing these lines will result in trees of max-depth 17 as by default.
A quick search revealed that other have had the same problem, they solved it
by using an 'hack', i.e. by using pop.subpop.0.species.pipe.source.0.maxdepth
|