CMA-ES / libcmaes

libcmaes is a multithreaded C++11 library with Python bindings for high performance blackbox stochastic optimization using the CMA-ES algorithm for Covariance Matrix Adaptation Evolution Strategy
Other
322 stars 78 forks source link

Performance assessment against existing implementations #82

Closed beniz closed 10 years ago

beniz commented 10 years ago

ES optimizers have the reputation of being slow, so libcmaes tries to yield the best performances both in terms of computational cost of the optimization step, and wrt the number of function evaluations.

This ticket is about benchmarking libcmaes against other existing implementations. My current list contains:

It will be possible to add others as needed.

beniz commented 10 years ago

Results and details are below. The main information being that libcmaes beats all other tested implementations above 10-D, and equals them for lower dimensions. Shark is last and the C version comes in between.

====Settings====

The code for running the benchmark can be reviewed here: https://gist.github.com/beniz/f5512f4be4526a7ef24a

====Results==== These are the mean values over 10 runs for all algorithms' successful runs only.

Note: the reported time use the system's clock and can be slightly affected by the operating system operations. In other words, the variance is higher on very low (~20 milliseconds) results.

bench_cmaes2

The graph above are in y-logscale: libcmaes is most of the time twice faster than Shark for standard CMA-ES, and one third faster than the C version. Differences slightly vary with dimension.

bench_cmaes_fevals

bench_vdcma

EDIT: table of results for CMA-ES in 100-D (mean over 10 runs), all timings in milliseconds:

Soft dim niter total_time step_time fevals
libcmaes 100 29967.8 115584 3.85736 509452
Shark 100 29910.4 141571 4.73233 508476
C 100 30596 121976 3.98683 520132