Beispiel #1
0
    if input: return output1
    else: return output2

pset.addPrimitive(operator.lt, ["float", "float"], "bool")
pset.addPrimitive(operator.eq, ["float", "float"], "bool")
pset.addPrimitive(if_then_else, ["bool", "float", "float"], "float")

# terminals
pset.addEphemeralConstant(lambda: random.random() * 100, "float")
pset.addTerminal(0, "bool")
pset.addTerminal(1, "bool")

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax, pset=pset)

tools = toolbox.Toolbox()
tools.register("expr", gp.generateRamped, pset=pset, type_=pset.ret, min_=1, max_=2)
tools.register("individual", creator.Individual, content_init=tools.expr)
tools.register("population", list, content_init=tools.individual, size_init=100)
tools.register("lambdify", gp.lambdify, pset=pset)

def evalSpambase(individual):
    # Transform the tree expression in a callable function
    func = tools.lambdify(expr=individual)
    # Randomly sample 400 mails in the spam database
    spam_samp = random.sample(spam, 400)
    # Evaluate the sum of correctly identified mail as spam
    result = sum(bool(func(*mail[:57])) is bool(mail[57]) for mail in spam_samp)
    return result,
    
tools.register("evaluate", evalSpambase)
def refFunc(x):
    return x**4 + x**3 + x**2 + x


def evalSymbReg(expr, data):
    # Transform the tree expression in a callable function
    func = tools_gp.lambdify(expr=expr)
    # Evaluate the sum of squared difference between the expression
    # and the real function : x**4 + x**3 + x**2 + x
    values = data
    diff_func = lambda x: (func(x) - refFunc(x))**2
    diff = sum(map(diff_func, values))
    return diff,


tools_ga = toolbox.Toolbox()

tools_ga.register("float", random.uniform, -1, 1)
tools_ga.register("individual",
                  creator.IndGA,
                  content_init=tools_ga.float,
                  size_init=10)
tools_ga.register("population",
                  list,
                  content_init=tools_ga.individual,
                  size_init=200)

tools_ga.register("select", toolbox.selTournament, tournsize=3)
tools_ga.register("mate", toolbox.cxTwoPoints)
tools_ga.register("mutate", toolbox.mutGaussian, mu=0, sigma=0.01, indpb=0.05)