ENH: biteopt algorithm for global optimization
See original GitHub issueIs your feature request related to a problem? Please describe.
biteopt is a differential evolution like global optimizer which scored first in Scipy’s benchmark suite in an extensive recent benchmark . Besides great accuracy it is also very fast as it is completely implemented in C++: https://scipybiteopt.readthedocs.io/en/latest/Benchmark.html
A scipy.like API for biteopt is available at scipybiteopt based on this wrapper. The python wrapper is implemented based on Python’s C API. Currently, the wrapper does not properly handle Python exceptions or errors. Maybe a ctypes or Cython wrapper would be a more robust alternative?
Describe the solution you’d like.
A function scipy.optimize.biteopt
.
Describe alternatives you’ve considered.
No response
Additional context (e.g. screenshots, GIFs)
Using the same benchmarking code in the DIRECT PR, I get the following performance plots for biteopt: 180 solved problems. This is 13 more than for dual_annealing
and direct
which seem to perform best currently.
Issue Analytics
- State:
- Created 2 years ago
- Reactions:1
- Comments:80 (27 by maintainers)
Top GitHub Comments
I’ve updated BiteOpt: instead of virtualizing CBiteOpt I’ve went “C” way so that a function pointer can be passed via the biteopt_minimize() function, so it should be fairly easy to integrate uniform numpy RNG. This approach also did not increase overhead too much compared to virtualization.
The discussion about replacing the PRNG is not about quality. It’s about being able to use the same pseudorandom stream in all of one’s code. In all of the other places
scipy
uses pseudorandomness, we usenumpy
’s PRNG facilities. If we can at all avoid it, we do not want to introduce other PRNG facilities that the user will have to manage in other ways.