Benchmark =================== Test device: E5 2680 v4, 14 core. Package Comparison ::::::::::::::::::: This comparison for different packages ( `gplearn `_, `BindingGP `_) speed. Test datasets: boston datasets from ``scikit-learn`` . ===================== ============ ============ ================= pop*gen times (s) fastgplearn gplearn BindingGP --------------------- ------------ ------------ ----------------- 1000*10 0.15 4.91 29.09 10000*10 1.49 50.66 295.34 10000*10 (8 core) 1.45 57.01 126.20 100000*10 15.8 490.00 3053.01 100000*10 (8 core) 11.5 422.67 1452.58 ===================== ============ ============ ================= Backend Comparison ::::::::::::::::::::: This comparison for different backend and their parallelization performance. **Conclusion** 1. For large ``samples`` datasets (more than 1000), ``torch`` > ``numpy``. 2. For any ``population`` variation, ``numpy`` > ``torch``. 3. For "c_torch", keep n_jobs==1. c_torch is already well parallelized in c++ level, and does not need to be parallelized in python code. **Code** >>> np.random.seed(0) >>> deps = generate_random(func_num=13, xs_num=10, pop_size=10000, depth_min=1, depth_max=3) >>> deps = deps.tolist() >>> "p_numpy" >>> rs1 = p_np_score(deps, x, y, func_index=func_index) >>> "p_numpy" >>> rs2 = p_np_score_mp(deps, x, y, func_index=func_index, n_jobs=4) >>> "c_numpy" >>> rs3 = c_np_score(deps, x, y, func_index=func_index) >>> "c_numpy" >>> rs4 = c_np_score_mp(deps, x, y, func_index=func_index, n_jobs=4) >>> "p_torch" >>> rs1 = p_torch_score(deps, x2, y2, func_index=func_index) >>> "p_torch" >>> rs2 = p_torch_score_mp(deps, x2, y2, func_index=func_index, n_jobs=4) >>> "c_torch" >>> rs3 = c_torch_score(deps, x2, y2, func_index=func_index) >>> "c_torch" >>> rs4 = c_torch_score_mp(deps, x2, y2, func_index=func_index, n_jobs=4) .. image:: Graph1.png :scale: 40 .. image:: Graph2.png :scale: 40 .. image:: Graph3.png :scale: 40