Print

Print


It looks like your function sets are all messed up.  You don't seem to 
have ADFArgument nodes in the function set of the ADF tree you created. 
  And you may be using types (it's not clear) but are missing 
nonterminals entirely for a certain function set.  Perhaps gp.fs.0.size 
or gp.fs.1.size or whatnot has the wrong number?

Take a look not at the lawnmower problem but the two-box problem, which 
actually has an ADF that takes some arguments.

Sean

Eric B wrote:
> 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