Halton#
- класс scipy.stats.qmc.Halton(d, *, scramble=True, оптимизация=None, rng=None, seed=None)[источник]#
Последовательность Халтона.
Псевдослучайный генератор чисел, обобщающий последовательность Ван дер Корпута для многомерных случаев. Последовательность Холтона использует базовую двоичную последовательность Ван дер Корпута для первого измерения, троичную для второго и базу-\(p\) для его \(n\)-мерный, с \(p\) the \(n\)-е простое число.
- Параметры:
- dint
Размерность пространства параметров.
- scramblebool, необязательно
Если True, используйте случайное скремблирование из [2]. В противном случае скремблирование не выполняется. По умолчанию True.
- оптимизация{None, "random-cd", "lloyd"}, опционально
Использовать ли схему оптимизации для улучшения качества после выборки. Обратите внимание, что это постобработка, которая не гарантирует сохранение всех свойств выборки. По умолчанию None.
random-cd: случайные перестановки координат для уменьшения центрированной несоответствия. Лучшая выборка на основе центрированной несоответствия постоянно обновляется. Выборка на основе центрированной несоответствия демонстрирует лучшую устойчивость заполнения пространства для 2D и 3D подпроекций по сравнению с использованием других мер несоответствия.lloyd: Возмущение выборок с использованием модифицированного алгоритма Ллойда-Макса. Процесс сходится к равноотстоящим выборкам.
Добавлено в версии 1.10.0.
- rng
numpy.random.Generator, опционально Состояние генератора псевдослучайных чисел. Когда rng равно None, новый
numpy.random.Generatorсоздаётся с использованием энтропии из операционной системы. Типы, отличные отnumpy.random.Generatorпередаются вnumpy.random.default_rngдля создания экземпляраGenerator.Изменено в версии 1.15.0: В рамках SPEC-007 переход от использования
numpy.random.RandomStatetonumpy.random.Generator, этот ключевое слово было изменено с seed to rng. В течение переходного периода оба ключевых слова будут продолжать работать, хотя можно указать только одно за раз. После переходного периода вызовы функций с использованием seed ключевое слово будет выдавать предупреждения. После периода устаревания, seed ключевое слово будет удалено.
Методы
fast_forward(n)Быстрая перемотка последовательности на n позиции.
integers(l_bounds, *[, u_bounds, n, ...])Генерировать n целые числа от l_bounds (включительно) до u_bounds (исключительно), или если endpoint=True, l_bounds (включительно) до u_bounds (включительно).
random([n, workers])Генерировать n в полуоткрытом интервале
[0, 1).reset()Сбросить движок в базовое состояние.
Примечания
Последовательность Холтона имеет выраженные полосовые артефакты даже при умеренно больших размерностях. Их можно уменьшить с помощью скремблирования. Скремблирование также поддерживает оценку ошибок на основе репликации и расширяет применимость к неограниченным подынтегральным функциям.
Ссылки
[1]Халтон, «Об эффективности некоторых квазислучайных последовательностей точек при вычислении многомерных интегралов», Numerische Mathematik, 1960.
[2]A. B. Owen. "Рандомизированный алгоритм Холтона в R", arXiv:1706.02808, 2017.
Примеры
Сгенерировать выборки из последовательности Холтона с низким расхождением.
>>> from scipy.stats import qmc >>> sampler = qmc.Halton(d=2, scramble=False) >>> sample = sampler.random(n=5) >>> sample array([[0. , 0. ], [0.5 , 0.33333333], [0.25 , 0.66666667], [0.75 , 0.11111111], [0.125 , 0.44444444]])
Вычислите качество выборки с помощью критерия расхождения.
>>> qmc.discrepancy(sample) 0.088893711419753
Если требуется продолжить существующий дизайн, дополнительные точки можно получить повторным вызовом
random. В качестве альтернативы, вы можете пропустить некоторые точки, например:>>> _ = sampler.fast_forward(5) >>> sample_continued = sampler.random(n=5) >>> sample_continued array([[0.3125 , 0.37037037], [0.8125 , 0.7037037 ], [0.1875 , 0.14814815], [0.6875 , 0.48148148], [0.4375 , 0.81481481]])
Наконец, выборки могут быть масштабированы до границ.
>>> l_bounds = [0, 2] >>> u_bounds = [10, 5] >>> qmc.scale(sample_continued, l_bounds, u_bounds) array([[3.125 , 3.11111111], [8.125 , 4.11111111], [1.875 , 2.44444444], [6.875 , 3.44444444], [4.375 , 4.44444444]])