Esempio n. 1
0
def test_correct_training_data_length(python, input_size):
    data_input = np.arange(input_size).reshape((-1, 1))
    training_data = ImplicitTrainingData(data_input, data_input) \
                    if python \
                    else bingocpp.ImplicitTrainingData(data_input, data_input)

    assert len(training_data) == input_size
Esempio n. 2
0
def test_correct_partial_calculation_in_training_data_2(python):
    data_input = np.arange(20, dtype=float).reshape((20, 1)) * 2.0
    data_input = np.vstack((data_input, [np.nan], data_input))
    training_data = ImplicitTrainingData(data_input) \
                    if python \
                    else bingocpp.ImplicitTrainingData(data_input)
    expected_derivative = np.full((26, 1), 2.0)
    np.testing.assert_array_almost_equal(training_data.dx_dt,
                                         expected_derivative)
Esempio n. 3
0
def test_evaluate_fitness_vector_implicit():
    print("-----test_evaluate_fitness_vector_implicit-----")
    x_t = snake_walk()
    y = (x_t[:, 0] + x_t[:, 1])
    x = np.hstack((x_t, y.reshape([-1, 1])))

    py_training_data = ImplicitTrainingData(x)
    py_implicit_regressor = ImplicitRegression()
    c_training_data = bingocpp.ImplicitTrainingData(x)
    c_implicit_regressor = bingocpp.ImplicitRegression()

    py_manip = AGraphCpp.AGraphCppManipulator(3, 64, nloads=2)
    py_manip.add_node_type(2)
    py_manip.add_node_type(3)
    py_manip.add_node_type(4)
    c_manip = bingocpp.AcyclicGraphManipulator(3, 64, nloads=2)
    c_manip.add_node_type(2)
    c_manip.add_node_type(3)
    c_manip.add_node_type(4)

    temp = np.array([[1, 0, 0], [0, 0, 0], [0, 1, 1], [3, 2, 2], [4, 2, 3],
                     [4, 4, 0], [3, 2, 0], [3, 0, 0], [3, 4, 2], [3, 1, 4],
                     [2, 6, 0], [3, 8, 7], [2, 3, 11], [3, 7, 7], [3, 2, 7],
                     [2, 9, 5], [4, 4, 14], [3, 9, 1], [3, 4, 5], [0, 1, 1],
                     [4, 8, 4], [1, -1, -1], [3, 20, 5],
                     [2, 9, 17], [1, -1, -1], [4, 23, 4], [4, 25, 19],
                     [2, 26, 14], [4, 22, 10], [0, 0, 0], [2, 0, 17],
                     [2, 29, 16], [4, 23, 14], [4, 3, 22], [0, 2, 2],
                     [2, 31, 27], [2, 35, 28], [2, 25, 29], [2, 36, 28],
                     [3, 8, 29], [3, 4, 24], [2, 14, 9], [4, 25, 9], [0, 2, 2],
                     [3, 26, 10], [3, 12, 6], [0, 1, 1], [4, 42,
                                                          26], [3, 41, 6],
                     [3, 13, 1], [3, 42, 36], [3, 15, 34], [2, 14, 23],
                     [2, 13, 12], [0, 2, 2], [2, 28, 45], [3, 1, 12],
                     [3, 15, 30], [3, 34, 38], [3, 43, 50], [2, 31, 9],
                     [2, 54, 46], [1, -1, -1], [4, 60, 29]])

    py_1 = py_manip.generate()
    c_1 = c_manip.generate()
    py_1.command_array = np.copy(temp)
    c_1.stack = np.copy(temp)
    c_manip.simplify_stack(c_1)

    assert py_training_data.x.all() == pytest.approx(c_training_data.x.all())
    assert py_training_data.dx_dt.all() == pytest.approx(
        c_training_data.dx_dt.all())

    py_fit = py_implicit_regressor.evaluate_fitness(py_1, py_training_data)
    py_fit = py_implicit_regressor.evaluate_fitness_vector(
        py_1, py_training_data)

    c_fit = c_implicit_regressor.evaluate_fitness(c_1, c_training_data)
    c_fit = c_implicit_regressor.evaluate_fitness_vector(c_1, c_training_data)

    assert py_fit.all() == pytest.approx(c_fit.all())
Esempio n. 4
0
def test_getting_subset_of_training_data(python):
    data_input = np.arange(5).reshape((5, 1))
    training_data = ImplicitTrainingData(data_input, data_input)\
                    if python \
                    else bingocpp.ImplicitTrainingData(data_input, data_input)
    subset_training_data = training_data[[0, 2, 3]]

    expected_subset = np.array([[0], [2], [3]])
    np.testing.assert_array_equal(subset_training_data.x,
                                  expected_subset)
    np.testing.assert_array_equal(subset_training_data.dx_dt,
                                  expected_subset)
Esempio n. 5
0
def test_correct_partial_calculation_in_training_data(python):
    data_input = np.arange(20, dtype=float).reshape((20, 1))
    data_input = np.c_[data_input * 0,
                       data_input * 1,
                       data_input * 2]
    training_data = ImplicitTrainingData(data_input) \
                    if python \
                    else bingocpp.ImplicitTrainingData(data_input)

    expected_derivative = np.c_[np.ones(13) * 0,
                                np.ones(13) * 1,
                                np.ones(13) * 2]
    np.testing.assert_array_almost_equal(training_data.dx_dt,
                                         expected_derivative)
Esempio n. 6
0
def test_implicit_get_item():
    print("-----test_implicit_get_item-----")
    n_lin = int(math.pow(500, 1.0 / 3)) + 1
    x_1 = np.linspace(0, 5, n_lin)
    x_2 = np.linspace(0, 5, n_lin)
    x_3 = np.linspace(0, 5, n_lin)
    x = np.array(np.meshgrid(x_1, x_2, x_3)).T.reshape(-1, 3)
    x = x[np.random.choice(x.shape[0], 500, replace=False), :]
    # make solution
    y_t = (x[:, 0] * x[:, 0] + 3.5 * x[:, 1])
    y = y_t.reshape(-1, 1)
    x = np.hstack((x, y))

    py_training_data = ImplicitTrainingData(x)
    c_training_data = bingocpp.ImplicitTrainingData(x)

    items = [5, 10, 15, 18, 64, 92, 129, 186, 201, 215, 293, 355, 389]

    py_result = py_training_data.__getitem__(items)
    c_result = c_training_data.__getitem__(items)

    assert py_result.x.all() == c_result.x.all()
    assert py_result.dx_dt.all() == c_result.dx_dt.all()
Esempio n. 7
0
def implicit_data_nan(request, dummy_sum_equation, dummy_sum_equation_cpp):
    x, y = init_x_and_dx_dt()
    x[0, 0] = np.nan
    if request.param == "python":
        return (SampleTrainingData(x, y), dummy_sum_equation)
    return (bingocpp.ImplicitTrainingData(x, y), dummy_sum_equation_cpp)
Esempio n. 8
0
def dummy_training_data_cpp():
    if bingocpp is None:
        return None
    x, dx_dt = init_x_and_dx_dt()
    return bingocpp.ImplicitTrainingData(x, dx_dt)
Esempio n. 9
0
def compare_cpp_agcpp_implicit(X, Y, operator, params):
    """does the comparison"""
    X = np.hstack((X, Y.reshape([-1, 1])))
    Y = None
    # make solution manipulator
    sol_manip = bingocpp.AcyclicGraphManipulator(X.shape[1], 16, nloads=2)
    sol_manip.add_node_type(2)
    sol_manip.add_node_type(3)
    sol_manip.add_node_type(4)
    sol_manip.add_node_type(5)
    sol_manip.add_node_type(6)
    sol_manip.add_node_type(7)
    sol_manip.add_node_type(8)
    sol_manip.add_node_type(9)
    sol_manip.add_node_type(10)
    sol_manip.add_node_type(11)
    sol_manip.add_node_type(12)

    # make true equation
    equ = sol_manip.generate()
    stack = np.copy(equ.stack)
    stack[0] = (0, 0, 0)
    stack[1] = (0, 1, 1)
    stack[2] = (0, 2, 2)
    stack[3] = (operator, params[0], params[1])
    stack[-1] = (3, 3, 2)
    equ.stack = np.copy(stack)
    sol_manip.simplify_stack(equ)

    print(stack)
    print("equstack\n", equ.stack)

    # make predictor manipulator
    pred_manip = fpm(32, X.shape[0])

    # make training data
    training_data = bingocpp.ImplicitTrainingData(X)

    # make fitness_metric
    explicit_regressor = bingocpp.ImplicitRegression()

    # make and run island manager
    islmngr = SerialIslandManager(N_ISLANDS,
                                  solution_training_data=training_data,
                                  solution_manipulator=sol_manip,
                                  predictor_manipulator=pred_manip,
                                  fitness_metric=explicit_regressor)
    epsilon = 1.05 * islmngr.isles[0].solution_fitness_true(equ) + 1.0e-10
    print("EPSILON IS - ", epsilon, equ.latexstring())
    converged = islmngr.run_islands(MAX_STEPS,
                                    epsilon,
                                    step_increment=N_STEPS,
                                    make_plots=False)

    if not converged:
        # try to run again if it fails
        islmngr = SerialIslandManager(N_ISLANDS,
                                      solution_training_data=training_data,
                                      solution_manipulator=sol_manip,
                                      predictor_manipulator=pred_manip,
                                      fitness_metric=explicit_regressor)
        epsilon = 1.05 * islmngr.isles[0].solution_fitness_true(equ) + 1.0e-10
        print("EPSILON IS - ", epsilon, equ.latexstring())
        converged = islmngr.run_islands(MAX_STEPS,
                                        epsilon,
                                        step_increment=N_STEPS,
                                        make_plots=False)
Esempio n. 10
0
def implicit_regression_cpp():
    training_data = cppBackend.ImplicitTrainingData(TEST_X_PARTIALS, TEST_DX_DT)
    return cppBackend.ImplicitRegression(training_data)
Esempio n. 11
0
def main(max_steps, epsilon, data_size):
    """main function which runs regression"""
    comm = MPI.COMM_WORLD
    rank = comm.Get_rank()

    # load data on rank 0
    if rank == 0:
        # make data
        # n_lin = int(math.pow(data_size, 1.0/3)) + 1
        # x_1 = np.linspace(0, 5, n_lin)
        # x_2 = np.linspace(0, 5, n_lin)
        # x_3 = np.linspace(0, 5, n_lin)
        # x = np.array(np.meshgrid(x_1, x_2, x_3)).T.reshape(-1, 3)
        # x = x[np.random.choice(x.shape[0], data_size, replace=False), :]

        # make solution
        # y = (x[:,0]*x[:,0]+3.5*x[:,1])
        # x_true = x
        # y_true = y

        x = snake_walk()
        y = (x[:, 0] + x[:, 1])
        x_true = np.hstack((x, y.reshape([-1, 1])))
        y_true = None
    else:
        x_true = None
        y_true = None
    # then broadcast to all ranks
    x_true = MPI.COMM_WORLD.bcast(x_true, root=0)
    y_true = MPI.COMM_WORLD.bcast(y_true, root=0)

    # make solution manipulator
    # sol_manip = agm(x_true.shape[1], 64, nloads=2)
    # sol_manip.add_node_type(AGNodes.Add)
    # sol_manip.add_node_type(AGNodes.Subtract)
    # sol_manip.add_node_type(AGNodes.Multiply)
    # sol_manip.add_node_type(AGNodes.Divide)
    # sol_manip.add_node_type(AGNodes.Exp)
    # sol_manip.add_node_type(AGNodes.Log)
    # sol_manip.add_node_type(AGNodes.Sin)
    # sol_manip.add_node_type(AGNodes.Cos)
    # sol_manip.add_node_type(AGNodes.Abs)
    # sol_manip.add_node_type(AGNodes.Sqrt)


    # make solution manipulator
    # y_true = y_true.reshape(-1, 1)
    # sol_manip2 = AGraphCpp.AGraphCppManipulator(x_true.shape[1], 64, nloads=2)
    sol_manip2 = bingocpp.AcyclicGraphManipulator(x_true.shape[1], 64, nloads=2)
    # sol_manip2 = bingocpp.AcyclicGraphManipulator(x_true.shape[1], 64, nloads=2, opt_rate=0)

    # sol_manip.add_node_type(2)  # +
    # sol_manip.add_node_type(3)  # -
    # sol_manip.add_node_type(4)  # *
    # sol_manip.add_node_type(5)  # /
    # sol_manip.add_node_type(6)  # sin
    # sol_manip.add_node_type(7)  # cos
    # sol_manip.add_node_type(8)  # exp
    # sol_manip.add_node_type(9)  # log
    # # sol_manip.add_node_type(10)  # pow
    # sol_manip.add_node_type(11)  # abs
    # sol_manip.add_node_type(12)  # sqrt


    sol_manip2.add_node_type(2)  # +
    sol_manip2.add_node_type(3)  # -
    sol_manip2.add_node_type(4)  # *
    sol_manip2.add_node_type(5)  # /
    sol_manip2.add_node_type(6)  # sin
    sol_manip2.add_node_type(7)  # cos
    sol_manip2.add_node_type(8)  # exp
    sol_manip2.add_node_type(9)  # log
    # sol_manip2.add_node_type(10)  # pow
    sol_manip2.add_node_type(11)  # abs
    sol_manip2.add_node_type(12)  # sqrt

    # make predictor manipulator
    pred_manip = fpm(128, data_size)

    # make training data
    # training_data = ImplicitTrainingData(x_true)
    training_data = bingocpp.ImplicitTrainingData(x_true)
    # training_data = ExplicitTrainingData(x_true, y_true)
    # training_data2 = bingocpp.ExplicitTrainingData(x_true, y_true)

    # make fitness metric
    # implicit_regressor = ImplicitRegression()
    implicit_regressor = bingocpp.ImplicitRegression()
    # explicit_regressor = StandardRegression(const_deriv=True)
    # explicit_regressor2 = bingocpp.StandardRegression()


    # make and run island manager
    islmngr = ParallelIslandManager(#restart_file='test.p',
        solution_training_data=training_data,
        solution_manipulator=sol_manip2,
        predictor_manipulator=pred_manip,
        solution_pop_size=64,
        fitness_metric=implicit_regressor)
        # fitness_metric=explicit_regressor)

    # islmngr2 = ParallelIslandManager(#restart_file='test.p',
    #     solution_training_data=training_data,
    #     solution_manipulator=sol_manip,
    #     predictor_manipulator=pred_manip,
    #     solution_pop_size=64,
    #     fitness_metric=explicit_regressor)


    # islmngr = ParallelIslandManager(#restart_file='test.p',
    #     data_x=x_true, data_y=y_true,
    #     solution_manipulator=sol_manip,
    #     predictor_manipulator=pred_manip,
    #     solution_pop_size=64,
    #     fitness_metric=StandardRegression)

    # islmngr2 = ParallelIslandManager(#restart_file='test.p',
    #     data_x=x_true, data_y=y_true,
    #     solution_manipulator=sol_manip,
    #     predictor_manipulator=pred_manip,
    #     solution_pop_size=64,
    #     fitness_metric=StandardRegression)
    non_one = time.time()
    islmngr.run_islands(max_steps, epsilon, min_steps=500,
                        step_increment=500, when_update=50)
    non_two = time.time()
    non_time = non_two - non_one
    
    timesN.append(non_time)
    agesN.append(islmngr.age)