- Fix the GP ephemeral regeneration bug. Ephemeral.regen() function is removed, and regeneration shall now be done by creating a new Ephemeral object, which ensure correct
divergence between terminals, without changing the deepcopy procedure.
By tuning a bit the mutTypedEphemeral with the Tree.iter method, the overhead created by the systematic creation of new Ephemeral objects is more than compensated from previous
revisions.
The new code has been tested with GP (symbreg) and STGP (spambase) examples.
Except the regen() function removal, this revision should not change at all the user code (however, it will obviously change the results, as the mutation is now correctly
performed...).
Minor modification in the GP module (use of enumerate instead of a manually defined index).
Merge.
Merge.

--HG--
branch : dev
Simplified tools.migRing.

--HG--
branch : dev
Fixed a typo in base.Tree.NodeProxy.__eq__.
Merge.

--HG--
branch : dev
Modified gp.genGrow (and gp.genRamped) to fit more closely to Koza grow initialization method. Basically, it adds an option, use_koza_grow_, which does not allow the algorithm
to choose a terminal as root and thus making a single-node tree. Doc was also updated.
Following DEAP guidelines, this option does not have a default value; however, it makes current GP examples invalid. As the approach may change, gp_symbreg is currently the
only one modified to fit the new parameters.

--HG--
branch : dev
Backed out changeset 763f9c166118

--HG--
branch : dev
Fixed the problem where min_ params in genGrow was not respected.

The variable names have also been fixed to properly identify what
they represent. Therefore, now an "height" is generated randomly
between min_ and max_. Then recursively, the depth is incremented
as the grows. The generate condition functions now take two
arguments : height and depth.

--HG--
branch : dev
Introduces a new implementation of tree for GP.

The base.Tree class was bloated and inefficient which
contradicts most of DEAP principles. We therefore put
an end to it, and started from scratch.

The GP tree is now a simple list where the node can
be found in depth-first order. The arity of the
primitives is used to delimitate the subtrees.

The STGP and normal GP operators have also been merged,
which simplifies the API without impacting the performance.

The new representation can provide a speedup up to 3x-4x
on some problems, mostly when the evaluation times used to
be smaller than the crossover-mutation-copy times.

--HG--
branch : dev
Fixed a problem with GP and ADFs.

With the last modification, builtins were added to
pset.functions, which is not desirable. The
evaluateADF functions now works as expected and
pset.functions no longer get filled with builtins.

--HG--
branch : dev
Forgot a import gc and gc.disable().

--HG--
branch : dev
Added an example of symbolic regression with vectorial operators.

gp_symbreg_numpy uses NumPy as its operators instead of Python
builtins. The operations are done on vectors instead of single
points, therefore allowing to evaluate much more samples in
much less time.

--HG--
branch : dev
Fix bug in cxOnePointBiased (missing imports and some typos).

--HG--
branch : dev
Merge

--HG--
branch : dev
Adjusted documentation of GP operators and changed a forgotten searchSubtreeDF

--HG--
branch : dev
gp.mutShrink was erroneously reintroduced without proper modifications to fit the new tree structure and to comply with STGP requirements. While it will be rewrited in a near future, I delete it for now to avoid some confusion.

--HG--
branch : dev
Splitted the operator table between normal and gp ones.

--HG--
branch : dev
Merge

--HG--
branch : dev