В математике , интегрирование Монте-Карло является методом численного интегрирования с использованием случайных чисел . Это частный метод Монте-Карло , который численно вычисляет определенный интеграл . В то время как другие алгоритмы обычно оценивают подынтегральное выражение на регулярной сетке, [1] Монте-Карло случайным образом выбирает точки, в которых оценивается подынтегральное выражение. [2] Этот метод особенно полезен для многомерных интегралов. [3]
Существуют различные методы выполнения интегрирования Монте-Карло, такие как равномерная выборка , стратифицированная выборка , выборка по важности , последовательный Монте-Карло (также известный как фильтр частиц) и методы частиц среднего поля .
В численном интегрировании такие методы, как правило трапеций, используют детерминированный подход . Интеграция Монте-Карло, с другой стороны, использует недетерминированный подход: каждая реализация дает другой результат. В Монте-Карло конечный результат является приближением правильного значения с соответствующими планками погрешности, и правильное значение, скорее всего, будет находиться в пределах этих планок погрешности.
Задача, которую решает интегрирование Монте-Карло, заключается в вычислении многомерного определенного интеграла , где Ω, подмножество , имеет объем
Наивный подход Монте-Карло заключается в равномерной выборке точек на Ω: [4] при наличии N равномерных выборок,
Я могу быть приблизительно определен
Это потому, что закон больших чисел гарантирует, что
Учитывая оценку I из Q N , планки погрешностей Q N можно оценить по выборочной дисперсии, используя несмещенную оценку дисперсии .
что приводит к
Пока последовательность ограничена, эта дисперсия асимптотически уменьшается до нуля как 1/ N . Таким образом, оценка ошибки Q N равна , которая уменьшается как . Это стандартная ошибка среднего, умноженная на . Этот результат не зависит от количества измерений интеграла, что является обещанным преимуществом интегрирования Монте-Карло по сравнению с большинством детерминированных методов, которые экспоненциально зависят от размерности. [5] Важно отметить, что, в отличие от детерминированных методов, оценка ошибки не является строгой границей ошибки; случайная выборка может не раскрыть все важные особенности подынтегральной функции, что может привести к недооценке ошибки.
В то время как наивный Монте-Карло работает для простых примеров, улучшение по сравнению с детерминированными алгоритмами может быть достигнуто только с помощью алгоритмов, которые используют проблемно-специфические распределения выборки. При соответствующем распределении выборки можно использовать тот факт, что почти все многомерные интегранты очень локализованы, и только небольшое подпространство вносит заметный вклад в интеграл. [6] Большая часть литературы по Монте-Карло посвящена разработке стратегий для улучшения оценок ошибок. В частности, стратифицированная выборка — разделение области на подобласти — и выборка по важности — выборка из неравномерных распределений — являются двумя примерами таких методов.
Парадигматическим примером интеграции Монте-Карло является оценка π. Рассмотрим функцию и множество Ω = [−1,1] × [−1,1] с V = 4. Обратите внимание, что
Таким образом, грубый способ вычисления значения π с помощью интегрирования Монте-Карло состоит в том, чтобы выбрать N случайных чисел на Ω и вычислить
На рисунке справа относительная погрешность измеряется как функция N , что подтверждает .
Помните, что следует использовать настоящий генератор случайных чисел.
int i , throws = 99999 , insideCircle = 0 ; double randX , randY , pi ; srand ( время ( NULL ));для ( i = 0 ; i < throws ; ++ i ) { randX = rand () / ( double ) RAND_MAX ; randY = rand () / ( double ) RAND_MAX ; если ( randX * randX + randY * randY < 1 ) ++ insideCircle ; } пи = 4,0 * внутренний круг / броски ;
Сделано на Python .
из numpy импорт случайныйthrows = 2000 inside_circle = 0 i = 0 radius = 1 while i < throws : # Выбрать случайные X и Y с центром около 0,0 x = random.uniform ( -radius , radius ) y = random.uniform ( -radius , radius ) # Если точка находится внутри круга, увеличить переменную if x ** 2 + y ** 2 < = radius ** 2 : inside_circle + = 1 i + = 1 # Вычислить площадь и вывести ее на печать; она должна быть ближе к числу Пи с увеличением количества бросков площадь = ((( 2 * радиус ) ** 2 ) * внутренний_круг ) / броски печать ( площадь )
Приведенный ниже код описывает процесс интегрирования функции с использованием метода Монте-Карло в системе Mathematica :
func [ x_ ] := 1 / ( 1 + Sinh [ 2 * x ] * ( Log [ x ]) ^ 2 ); (*Выборка из усеченного нормального распределения для ускорения сходимости*) Distrib [ x_ , average_ , var_ ] := PDF [ NormalDistribution [ average , var ], 1.1 * x - 0.1 ]; n = 10 ; RV = RandomVariate [ TruncatedDistribution [ { 0.8 , 3 }, NormalDistribution [ 1 , 0.399 ]], n ]; Int = 1 / n Total [ func [ RV ] / Distrib [ RV , 1 , 0.399 ]] * Integrate [ Distrib [ x , 1 , 0.399 ], { x , 0.8 , 3 }] NIntegrate [ func [ x ], { x , 0.8 , 3 }] (*Сравните с реальным ответом*)
Рекурсивная стратифицированная выборка является обобщением одномерных адаптивных квадратур на многомерные интегралы. На каждом шаге рекурсии интеграл и ошибка оцениваются с использованием простого алгоритма Монте-Карло. Если оценка ошибки больше требуемой точности, объем интегрирования делится на подобъемы, и процедура рекурсивно применяется к подобъемам.
Обычная стратегия «деления на два» не работает для многомерных объемов, поскольку количество подобъемов растет слишком быстро, чтобы за ним следить. Вместо этого оценивается, по какому измерению подразделение должно принести больше всего дивидендов, и объем подразделяется только по этому измерению.
Алгоритм стратифицированной выборки концентрирует точки выборки в областях, где дисперсия функции наибольшая, тем самым уменьшая общую дисперсию и делая выборку более эффективной, как показано на иллюстрации.
Популярная процедура MISER реализует аналогичный алгоритм.
Алгоритм MISER основан на рекурсивной стратифицированной выборке . Этот метод направлен на уменьшение общей ошибки интеграции путем концентрации точек интеграции в областях с наибольшей дисперсией. [7]
Идея стратифицированной выборки начинается с наблюдения, что для двух непересекающихся областей a и b с оценками Монте-Карло интеграла и и дисперсий и дисперсия Var( f ) объединенной оценки определяется как:
Можно показать, что эта дисперсия минимизируется путем распределения точек таким образом, что
Таким образом, наименьшая оценка погрешности достигается путем распределения точек выборки пропорционально стандартному отклонению функции в каждой подобласти.
Алгоритм MISER действует путем деления области интегрирования пополам вдоль одной оси координат, чтобы получить две подобласти на каждом шаге. Направление выбирается путем изучения всех d возможных делений пополам и выбора той, которая минимизирует объединенную дисперсию двух подобластей. Дисперсия в подобластях оценивается путем выборки с долей общего числа точек, доступных для текущего шага. Затем та же процедура повторяется рекурсивно для каждого из двух полупространств из наилучшего бисекции. Оставшиеся точки выборки распределяются по подобластям с использованием формулы для N a и N b . Это рекурсивное распределение точек интегрирования продолжается до указанной пользователем глубины, где каждая подобласть интегрируется с использованием простой оценки Монте-Карло. Эти отдельные значения и их оценки ошибок затем объединяются вверх, чтобы дать общий результат и оценку его ошибки.
Существуют различные алгоритмы выборки по важности, такие как
Выборка по важности предоставляет очень важный инструмент для выполнения интеграции Монте-Карло. [3] [8] Главным результатом выборки по важности для этого метода является то, что равномерная выборка является частным случаем более общего выбора, при котором выборки берутся из любого распределения . Идея состоит в том, что можно выбрать для уменьшения дисперсии измерения Q N .
Рассмотрим следующий пример, в котором требуется численно интегрировать гауссову функцию с центром в 0, с σ = 1, от −1000 до 1000. Естественно, если выборки взяты равномерно на интервале [−1000, 1000], только очень малая их часть будет иметь значение для интеграла. Это можно улучшить, выбрав распределение, отличное от того, где были выбраны выборки, например, выбрав выборку в соответствии с гауссовым распределением с центром в 0, с σ = 1. Конечно, «правильный» выбор сильно зависит от подынтегрального выражения.
Формально, если задан набор выборок, выбранных из распределения, оценка для I задается как [3]
Интуитивно это означает, что если мы выбираем конкретный образец в два раза больше, чем другие образцы, мы весим его в два раза меньше, чем другие образцы. Эта оценка естественным образом верна для равномерной выборки, случай, когда является константой.
Алгоритм Метрополиса –Гастингса является одним из наиболее часто используемых алгоритмов для генерации из [3] , таким образом, обеспечивая эффективный способ вычисления интегралов.
Алгоритм VEGAS аппроксимирует точное распределение, выполняя ряд проходов по области интегрирования, что создает гистограмму функции f . Каждая гистограмма используется для определения распределения выборки для следующего прохода. Асимптотически эта процедура сходится к желаемому распределению. [9] Чтобы избежать роста числа ячеек гистограммы как K d , распределение вероятностей аппроксимируется разделимой функцией: так что число требуемых ячеек равно только K d . Это эквивалентно нахождению пиков функции из проекций подынтегральной функции на оси координат. Эффективность VEGAS зависит от обоснованности этого предположения. Он наиболее эффективен, когда пики подынтегральной функции хорошо локализованы. Если подынтегральную функцию можно переписать в форме, которая является приблизительно разделимой, это увеличит эффективность интегрирования с VEGAS. VEGAS включает в себя ряд дополнительных функций и объединяет как стратифицированную выборку, так и выборку по важности. [9]