scipy.stats.qmc.

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.

rngnumpy.random.Generator, опционально

Состояние генератора псевдослучайных чисел. Когда rng равно None, новый numpy.random.Generator создаётся с использованием энтропии из операционной системы. Типы, отличные от numpy.random.Generator передаются в numpy.random.default_rng для создания экземпляра Generator.

Изменено в версии 1.15.0: В рамках SPEC-007 переход от использования numpy.random.RandomState to numpy.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]])