Example #1
0
def GTreeInitializatorInteger(genome, **args):

    """ Integer initialization function of GTree
    This initializator accepts the *rangemin* and *rangemax* genome parameters.
    It accepts the following parameters too:

    *max_depth*
       The max depth of the tree

    *max_siblings*
       The number of maximum siblings of an node

    *method*
       The method, accepts "grow", "full" or "ramped".

    .. versionadded:: 0.6
       The *GTreeInitializatorInteger* function.
    """

    max_depth = genome.getParam("max_depth", 5)
    max_siblings = genome.getParam("max_siblings", 2)

    range_min = genome.getParam("rangemin", 0)
    range_max = genome.getParam("rangemax", 100)

    lambda_generator = lambda: prng.randint(range_min, range_max + 1) # HERE IT SHOULD BE INCLUSIVE

    method = genome.getParam("method", "grow")

    if method == "grow":
        root = tree.buildGTreeGrow(0, lambda_generator, max_siblings, max_depth)
    elif method == "full":
        root = tree.buildGTreeFull(0, lambda_generator, max_siblings, max_depth)
    elif method == "ramped":
        if utils.randomFlipCoin(0.5):
            root = tree.buildGTreeGrow(0, lambda_generator, max_siblings, max_depth)
        else:
            root = tree.buildGTreeFull(0, lambda_generator, max_siblings, max_depth)
    else:
        utils.raiseException("Unknown tree initialization method [%s] !" % method)

    genome.setRoot(root)
    genome.processNodes()
    assert genome.getHeight() <= max_depth
Example #2
0
def GTreeInitializatorAllele(genome, **args):

    """ Allele initialization function of GTree
    To use this initializator, you must specify the *allele* genome parameter with the
    :class:`GAllele.GAlleles` instance.
    .. warning:: the :class:`GAllele.GAlleles` instance **must** have the homogeneous flag enabled
    .. versionadded:: 0.6
       The *GTreeInitializatorAllele* function.
    """

    max_depth = genome.getParam("max_depth", 5)
    max_siblings = genome.getParam("max_siblings", 2)
    method = genome.getParam("method", "grow")

    allele = genome.getParam("allele", None)
    if allele is None:
        utils.raiseException("to use the GTreeInitializatorAllele, you must specify the 'allele' parameter")

    if not allele.homogeneous:
        utils.raiseException("to use the GTreeInitializatorAllele, the 'allele' must be homogeneous")

    if method == "grow":
        root = tree.buildGTreeGrow(0, allele[0].getRandomAllele, max_siblings, max_depth)
    elif method == "full":
        root = tree.buildGTreeFull(0, allele[0].getRandomAllele, max_siblings, max_depth)
    elif method == "ramped":
        if utils.randomFlipCoin(0.5):
            root = tree.buildGTreeGrow(0, allele[0].getRandomAllele, max_siblings, max_depth)
        else:
            root = tree.buildGTreeFull(0, allele[0].getRandomAllele, max_siblings, max_depth)
    else:
        utils.raiseException("Unknown tree initialization method [%s] !" % method)

    genome.setRoot(root)
    genome.processNodes()
    assert genome.getHeight() <= max_depth