예제 #1
0
 def runTest(self):
     from dcgpy import symbolic_regression, generate_koza_quintic, kernel_set_double, es4cgp
     import pygmo as pg
     import pickle
     X, Y = generate_koza_quintic()
     # Interface for the UDPs
     udp = symbolic_regression(points=X,
                               labels=Y,
                               rows=1,
                               cols=20,
                               levels_back=21,
                               arity=2,
                               kernels=kernel_set_double(
                                   ["sum", "diff", "mul", "pdiv"])(),
                               n_eph=2,
                               multi_objective=False,
                               parallel_batches=0)
     prob = pg.problem(udp)
     pop = pg.population(prob, 10)
     # Interface for the UDAs
     uda = es4cgp(gen=20, mut_n=3, ftol=1e-3, learn_constants=True, seed=34)
     algo = pg.algorithm(uda)
     algo.set_verbosity(0)
     # Testing some evolutions
     pop = algo.evolve(pop)
     # In parallel
     archi = pg.archipelago(prob=prob, algo=algo, n=16, pop_size=4)
     archi.evolve()
     archi.wait_check()
     # Pickling.
     self.assertTrue(repr(algo) == repr(pickle.loads(pickle.dumps(algo))))
예제 #2
0
def run(dataset_train, dataset_test, cols, gen):
    ss = dcgpy.kernel_set_double([
        "sum", "diff", "mul", "pdiv", "sin", "cos", "tanh", "log", "exp",
        "psqrt"
    ])

    Xtrain, ytrain = dataset_train[:, :-1], dataset_train[:, -1]
    Xtest, ytest = dataset_test[:, :-1], dataset_test[:, -1]

    udp = dcgpy.symbolic_regression(points=Xtrain,
                                    labels=ytrain[:, np.newaxis],
                                    kernels=ss(),
                                    rows=1,
                                    cols=cols,
                                    levels_back=21,
                                    arity=2,
                                    n_eph=3,
                                    multi_objective=False,
                                    parallel_batches=0)

    uda = dcgpy.es4cgp(gen=gen)  #, mut_n = 1)

    algo = pg.algorithm(uda)
    pop = pg.population(udp, 4)
    pop = algo.evolve(pop)

    return RMSE(udp.predict(Xtrain, pop.champion_x),
                ytrain), RMSE(udp.predict(Xtest, pop.champion_x), ytest)
예제 #3
0
파일: tutorial1.py 프로젝트: fagan2888/dcgp
def main():
    # Some necessary imports.
    import dcgpy
    import pygmo as pg
    # Sympy is nice to have for basic symbolic manipulation.
    from sympy import init_printing
    from sympy.parsing.sympy_parser import parse_expr
    init_printing()
    # Fundamental for plotting.
    from matplotlib import pyplot as plt

    # We load our data from some available ones shipped with dcgpy.
    # In this particular case we use the problem chwirut2 from
    # (https://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml)
    X, Y = dcgpy.generate_chwirut2()

    # And we plot them as to visualize the problem.
    _ = plt.plot(X, Y, '.')
    _ = plt.title('54 measurments')
    _ = plt.xlabel('metal distance')
    _ = plt.ylabel('ultrasonic response')

    # We define our kernel set, that is the mathematical operators we will
    # want our final model to possibly contain. What to choose in here is left
    # to the competence and knowledge of the user. A list of kernels shipped with dcgpy
    # can be found on the online docs. The user can also define its own kernels (see the corresponding tutorial).
    ss = dcgpy.kernel_set_double(["sum", "diff", "mul", "pdiv"])

    # We instantiate the symbolic regression optimization problem (note: many important options are here not
    # specified and thus set to their default values)
    udp = dcgpy.symbolic_regression(points=X, labels=Y, kernels=ss())
    print(udp)

    # We instantiate here the evolutionary strategy we want to use to search for models.
    uda = dcgpy.es4cgp(gen=10000, max_mut=2)

    prob = pg.problem(udp)
    algo = pg.algorithm(uda)
    # Note that the screen output will happen on the terminal, not on your Jupyter notebook.
    # It can be recovered afterwards from the log.
    algo.set_verbosity(10)
    pop = pg.population(prob, 4)

    pop = algo.evolve(pop)

    # Lets have a look to the symbolic representation of our model (using sympy)
    parse_expr(udp.prettier(pop.champion_x))

    # And lets see what our model actually predicts on the inputs
    Y_pred = udp.predict(X, pop.champion_x)

    # Lets comapre to the data
    _ = plt.plot(X, Y_pred, 'r.')
    _ = plt.plot(X, Y, '.', alpha=0.2)
    _ = plt.title('54 measurments')
    _ = plt.xlabel('metal distance')
    _ = plt.ylabel('ultrasonic response')

    # Here we get the log of the latest call to the evolve
    log = algo.extract(dcgpy.es4cgp).get_log()
    gen = [it[0] for it in log]
    loss = [it[2] for it in log]

    # And here we plot, for example, the generations against the best loss
    _ = plt.semilogy(gen, loss)
    _ = plt.title('last call to evolve')
    _ = plt.xlabel('metal distance')
    _ = plt.ylabel('ultrasonic response')
예제 #4
0
파일: tutorial1.py 프로젝트: hejung/dcgp
_ = plt.ylabel('ultrasonic response')

# We define our kernel set, that is the mathematical operators we will
# want our final model to possibly contain. What to choose in here is left
# to the competence and knowledge of the user. A list of kernels shipped with dcgpy
# can be found on the online docs. The user can also define its own kernels (see the corresponding tutorial).
ss = dcgpy.kernel_set_double(["sum", "diff", "mul", "pdiv"])

# We instantiate the symbolic regression optimization problem (note: many important options are here not
# specified and thus set to their default values)
udp = dcgpy.symbolic_regression(points = X, labels = Y, kernels=ss())
print(udp)


# We instantiate here the evolutionary strategy we want to use to search for models.
uda  = dcgpy.es4cgp(gen = 10000, mut_n = 2)

prob = pg.problem(udp)
algo = pg.algorithm(uda)
# Note that the screen output will happen on the terminal, not on your Jupyter notebook.
# It can be recovered afterwards from the log.
algo.set_verbosity(10)
pop = pg.population(prob, 4)

pop = algo.evolve(pop)

# Lets have a look to the symbolic representation of our model (using sympy)
parse_expr(udp.prettier(pop.champion_x))

# And lets see what our model actually predicts on the inputs
Y_pred = udp.predict(X, pop.champion_x)