Global optimizer idea: using low-discrepancy quasi-random sampler
- Dominant language
- C++
- Stars
- 14.4k
- Forks
- 3.4k
- PR merge metrics
- No merged PRs in 30d
Description
I was playing around the optimizer a bit and noticed one thing: looking at how it picks new points to test, it's now done completely at random:
https://github.com/davisking/dlib/blob/e558318c9a23c4897191c8089e34570dbe3d84ad/dlib/global_optimization/global_function_search.cpp#L801
However, in higher dimensions, it's fairly well known that the uniform distribution is inferior to low-discrepancy sequences for optimization/search purposes since the latter provide more "uniform"/equidistant coverage; the simplest example would the [Sobol sequence](https://en.wikipedia.org/wiki/Sobol_sequence) (more generally, see [here](https://en.wikipedia.org/wiki/Low-discrepancy_sequence)).
This is a perfect application since the bounding region is basically an n-dimensional box (in the space where log-scale dimensions are log-transformed first), so you can just generate a Sobol sequence taking values within `(0; 1)` in all dimensions and then shift/scale/transform it to get to the original space.
I'm not very familiar with dlib, but could probably try contributing if noone else would and if anyone would find it useful.
// Not sure how many people are interested in it, but having a fast n-d Sobol sequence generator might be a nice addition to the library that aims to be versatile :)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.