QMCEngine#
- класс scipy.stats.qmc.QMCEngine(d, *, оптимизация=None, rng=None, seed=None)[источник]#
Универсальный класс квази-Монте-Карло сэмплера, предназначенный для наследования.
QMCEngine является базовым классом для создания конкретного квази-Монте-Карло сэмплера. Не может использоваться напрямую как сэмплер.
- Параметры:
- dint
Размерность пространства параметров.
- оптимизация{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()Сбросить движок в базовое состояние.
Примечания
По соглашению выборки распределены по полуоткрытому интервалу
[0, 1)Экземпляры класса могут обращаться к атрибутам:dдля размерности; иrngдля генератора случайных чисел.Создание подклассов
При наследовании
QMCEngineдля создания нового сэмплера,__init__иrandomдолжно быть переопределено.__init__(d, rng=None): по крайней мере, исправить размерность. Если сэмплер не использует преимуществаrng(детерминированные методы, такие как Halton), этот параметр можно опустить._random(n, *, workers=1): drawnот движка.workersиспользуется для параллелизма. См.Haltonнапример.
Опционально, два других метода могут быть переопределены подклассами:
reset: Сбросить движок в исходное состояние.fast_forward: Если последовательность детерминирована (как последовательность Холтона), тоfast_forward(n)пропускаетnпервый розыгрыш.
Примеры
Чтобы создать случайный сэмплер на основе
np.random.random, мы бы сделали следующее:>>> from scipy.stats import qmc >>> class RandomEngine(qmc.QMCEngine): ... def __init__(self, d, rng=None): ... super().__init__(d=d, rng=rng) ... ... ... def _random(self, n=1, *, workers=1): ... return self.rng.random((n, self.d)) ... ... ... def reset(self): ... super().__init__(d=self.d, rng=self.rng_seed) ... return self ... ... ... def fast_forward(self, n): ... self.random(n) ... return self
После создания подкласса
QMCEngineчтобы определить стратегию выборки, которую мы хотим использовать, можно создать экземпляр для выборки из.>>> engine = RandomEngine(2) >>> engine.random(5) array([[0.22733602, 0.31675834], # random [0.79736546, 0.67625467], [0.39110955, 0.33281393], [0.59830875, 0.18673419], [0.67275604, 0.94180287]])
Мы также можем сбросить состояние генератора и выполнить повторную выборку.
>>> _ = engine.reset() >>> engine.random(5) array([[0.22733602, 0.31675834], # random [0.79736546, 0.67625467], [0.39110955, 0.33281393], [0.59830875, 0.18673419], [0.67275604, 0.94180287]])