Print

Print


On Jan 11, 2014, at 2:00 AM, Jake Ehrlich wrote:

> In the documentation for ec.gp.koza.CrossoverPipeline it says "Then a random 
> node is chosen in each tree such that the two nodes have the same return 
> type". Does "same return type" in that quote mean that the types "fit" by 
> GType's compatibleWith method?

The documentation is misleading.  The correct form is:

Two nodes M and N are chosen.  Let R(N) and R(M) be the return types of 
M and N respective.  Let A(N) and A(M) be the types of the argument slots
which N and M respectively fill in their parents.  Then M and N are only
valid if R(N) is type compatible with A(M) and R(M) is type compatible
with A(N).

> First off as I understand it GType.compatibleWith is assumed to be 
> commutative (that is t1.compatibleWith(init, t2) is true if and only if 
> t2.compatibleWith(init, t1) is true). Is this correct or is it just one way?

compatibleWith is commutative.


> Say you have a node X of type {string, int} (a set type) and another node Y of 
> type int (an atomic type). X and Y are being passed in as parameters of type 
> {string, int} and int respeticvlly. These return types are "compatible" ("fit") by 
> the definition of compatibleWith for GPAtomicType and GPSetType yet you 
> shouldn't be allowed to swap them sense the parameter type of X's parent 
> can't handle a string, only an int. 

Let me make sure I understand what you're saying.  Node X is of return type {s,i} and it's attached to an argument slot of type {s,i}.  And node Y is of return type i and is attached to an argument slot of type i. If you swapped them, then node X would now be in the argument slot i (which it is type-compatible with) and node Y would now be in argument slot {s,i} (which it is also type-compatible with) so everything would be fine.

Sean