From 9ded4522e4be2b018172c0563b2acf9d5cdc5b44 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 17 Sep 2018 20:58:41 +0000 Subject: Add benchmark Safe version for Alpha complex 3d (missing part if not weighted and not periodic) Need to fix Alpha_complex_3d_unit_test git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/alpha_complex_3d_module_vincent@3893 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 304c9f89826008eab67a72f3742caa8d6d80f36b --- .../benchmark/Alpha_complex_3d_benchmark.cpp | 162 +++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp (limited to 'src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp') diff --git a/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp b/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp new file mode 100644 index 00000000..18802ee5 --- /dev/null +++ b/src/Alpha_complex/benchmark/Alpha_complex_3d_benchmark.cpp @@ -0,0 +1,162 @@ +#include +// to construct a simplex_tree from alpha complex +#include +#include +#include + +#include +#include +#include +#include // for numeric limits + +#include +#include + +template +void benchmark_points_on_torus_3D(const std::string& msg ) { + using K = CGAL::Epick_d< CGAL::Dimension_tag<3> >; + std::cout << msg << std::endl; + for (int nb_points = 1000; nb_points <= /*12*/5000 ; nb_points *= 5) { + std::cout << "### Alpha complex 3d on torus with " << nb_points << " points." << std::endl; + std::vector points_on_torus = Gudhi::generate_points_on_torus_3D(nb_points, 1.0, 0.5); + std::vector points; + + for(auto p:points_on_torus) { + points.push_back(typename Alpha_complex_3d::Point_3(p[0],p[1],p[2])); + } + + Gudhi::Clock ac_create_clock("benchmark_points_on_torus_3D - Alpha complex 3d creation"); ac_create_clock.begin(); + Alpha_complex_3d alpha_complex_from_points(points); + ac_create_clock.end(); std::cout << ac_create_clock; + + Gudhi::Simplex_tree<> simplex; + Gudhi::Clock st_create_clock("benchmark_points_on_torus_3D - simplex tree creation"); st_create_clock.begin(); + alpha_complex_from_points.create_complex(simplex); + st_create_clock.end(); std::cout << st_create_clock; + } + +} + +template +void benchmark_weighted_points_on_torus_3D(const std::string& msg ) { + using K = CGAL::Epick_d< CGAL::Dimension_tag<3> >; + + CGAL::Random random(8); + + std::cout << msg << std::endl; + for (int nb_points = 1000; nb_points <= 125000 ; nb_points *= 5) { + std::cout << "### Alpha complex 3d on torus with " << nb_points << " points." << std::endl; + std::vector points_on_torus = Gudhi::generate_points_on_torus_3D(nb_points, 1.0, 0.5); + + using Point = typename Weighted_alpha_complex_3d::Point_3; + using Weighted_point = typename Weighted_alpha_complex_3d::Triangulation_3::Weighted_point; + + std::vector points; + + for(auto p:points_on_torus) { + points.push_back(Weighted_point(Point(p[0],p[1],p[2]), 0.9 + random.get_double(0., 0.01))); + } + + Gudhi::Clock ac_create_clock("benchmark_weighted_points_on_torus_3D - Alpha complex 3d creation"); ac_create_clock.begin(); + Weighted_alpha_complex_3d alpha_complex_from_points(points); + ac_create_clock.end(); std::cout << ac_create_clock; + + Gudhi::Simplex_tree<> simplex; + Gudhi::Clock st_create_clock("benchmark_weighted_points_on_torus_3D - simplex tree creation"); st_create_clock.begin(); + alpha_complex_from_points.create_complex(simplex); + st_create_clock.end(); std::cout << st_create_clock; + } + +} + +template +void benchmark_periodic_points(const std::string& msg ) { + std::cout << msg << std::endl; + for (double nb_points = 10.; nb_points <= 40. ; nb_points += 10.) { + std::cout << "### Periodic alpha complex 3d with " << nb_points*nb_points*nb_points << " points." << std::endl; + using Point = typename Periodic_alpha_complex_3d::Point_3; + std::vector points; + + for (double i = 0; i < nb_points; i++) { + for (double j = 0; j < nb_points; j++) { + for (double k = 0; k < nb_points; k++) { + points.push_back(Point(i,j,k)); + } + } + } + + Gudhi::Clock ac_create_clock("benchmark_periodic_points - Alpha complex 3d creation"); ac_create_clock.begin(); + Periodic_alpha_complex_3d alpha_complex_from_points(points, 0., 0., 0., nb_points, nb_points, nb_points); + ac_create_clock.end(); std::cout << ac_create_clock; + + Gudhi::Simplex_tree<> simplex; + Gudhi::Clock st_create_clock("benchmark_periodic_points - simplex tree creation"); st_create_clock.begin(); + alpha_complex_from_points.create_complex(simplex); + st_create_clock.end(); std::cout << st_create_clock; + } + +} + +template +void benchmark_weighted_periodic_points(const std::string& msg ) { + std::cout << msg << std::endl; + CGAL::Random random(8); + + for (double nb_points = 10.; nb_points <= 40. ; nb_points += 10.) { + std::cout << "### Weighted periodic alpha complex 3d with " << nb_points*nb_points*nb_points << " points." << std::endl; + + using Point = typename Weighted_periodic_alpha_complex_3d::Point_3; + using Weighted_point = typename Weighted_periodic_alpha_complex_3d::Triangulation_3::Weighted_point; + std::vector points; + + for (double i = 0; i < nb_points; i++) { + for (double j = 0; j < nb_points; j++) { + for (double k = 0; k < nb_points; k++) { + points.push_back(Weighted_point(Point(i,j,k), random.get_double(0., (nb_points*nb_points)/64.))); + } + } + } + + Gudhi::Clock ac_create_clock("benchmark_weighted_periodic_points - Alpha complex 3d creation"); ac_create_clock.begin(); + Weighted_periodic_alpha_complex_3d alpha_complex_from_points(points, 0., 0., 0., nb_points, nb_points, nb_points); + ac_create_clock.end(); std::cout << ac_create_clock; + + Gudhi::Simplex_tree<> simplex; + Gudhi::Clock st_create_clock("benchmark_weighted_periodic_points - simplex tree creation"); st_create_clock.begin(); + alpha_complex_from_points.create_complex(simplex); + st_create_clock.end(); std::cout << st_create_clock; + } + +} + +int main(int argc, char **argv) { + /* + benchmark_points_on_torus_3D>("### Fast version"); + benchmark_points_on_torus_3D>("### Safe version"); + benchmark_points_on_torus_3D>("### Exact version"); + + benchmark_weighted_points_on_torus_3D>("### Fast version"); + benchmark_weighted_points_on_torus_3D>("### Safe version"); + benchmark_weighted_points_on_torus_3D>("### Exact version"); + */ + benchmark_periodic_points>("### Fast version"); + benchmark_periodic_points>("### Safe version"); + benchmark_periodic_points>("### Exact version"); + + benchmark_weighted_periodic_points>("### Fast version"); + benchmark_weighted_periodic_points>("### Safe version"); + benchmark_weighted_periodic_points>("### Exact version"); + return 0; +} -- cgit v1.2.3