p_hoist_mutation=0.0001,
    p_point_mutation=0.0001,
    max_samples=1.0,
    verbose=1,
    function_set=('add', 'sub', 'mul', 'div', gp_tanh, 'sqrt', 'log', 'abs',
                  'neg', 'inv', 'max', 'min', 'tan', 'cos', 'sin'),
    #function_set = (gp_tanh, 'add', 'sub', 'mul', 'div'),
    metric='mean absolute error',
    warm_start=True,
    n_jobs=1,
    parsimony_coefficient=0.0001,
    random_state=111)

if (os.path.exists(f'est_gp.pickle')):
    pickle_in = open(f'est_gp.pickle', 'rb')
    est_gp = pickle.load(pickle_in)
    print("Model Loaded")

est_gp.generations = est_gp.generations + 9
est_gp.fit(X_tr, y_tr)

with open(f'est_gp.pickle', 'wb') as f:
    pickle.dump(est_gp, f)
    print('Model Saved')

print("gpLearn Program:", est_gp._program)
y_gp = est_gp.predict(X_tr)
gpLearn_MAE = mean_absolute_error(y_tr, y_gp)
print("gpLearn MAE:", gpLearn_MAE)
print(y_tr, y_gp)