Eric, I'm pretty sure that you may be misunderstanding here. In the
example listed below, the node labeled "ADF" would be an *ADF* class,
not an *ADFArgument* class. The (in this case: one) ADFArgument node
would not be in the function set of the result-producing branch, but in
the ADF branch.
For example, let's say the result branch is the one you listed below.
I'll put it in Lisp form:
(if xx (adf (if yx yy yz)) xy)
When the 'adf' node is called, we first call its subtree (if yx yy yz)
and store that in a variable called, say, foo0. Then ccontrol is
transferred to its corresponding ADF tree. Let's say that tree looks
ADF: (* (sin adfargument0) (+ x 1))
When the adfargument0 terminal is called, it returns the value of foo0.
Ultimately the ADF tree returns a value, let's say it's 'bar'.
Control then returns to the result branch and the 'adf' node returns the
value bar, and we continue on our merry way.
Eric B wrote:
> On Wed, 25 Feb 2009 15:08:05 -0500, Sean Luke <[log in to unmask]> wrote:
>> 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.
> I don't want to use ADFArgument because with ADFArugment only terminals are
> accapted as argument. It's in the code of ADFArgument itself!
> What I want is an ADF that takes as argument a subtree! I know the type of
> the root of that tree (it's the If function which takes 3 arguments). So
> basically I want to be able to have the following trees.
> This is the result producing branch:
> | | |
> xx ADF xy
> | | |
> yx yy yz
> I hope the lay out won't be messed up.