Алгоритмы: Метод Монте-Карло
Методы Монте-Карло (ММК) — группа численных методов для изучения случайных процессов. Суть метода заключается в следующем: процесс моделируется при помощи генератора случайных величин. Это повторяется много раз, а потом на основе полученных случайных данных вычисляются вероятностные характеристики решаемой задачи. Например, чтобы узнать, какое в среднем будет расстояние между двумя случайными точками в круге, методом Монте-Карло, нужно взять много случайных пар точек, для каждой пары найти расстояние, а потом усреднить.
Используется для решения задач в различных областях физики, химии, математики, экономики, оптимизации, теории управления и др.
Метод имеет две основных особенности. Первая — простая структура вычислительного алгоритма. Вторая — ошибка вычислений, как правило, пропорциональна
, где
— некоторая постоянная, а
— число испытаний.
Ясно, что добиться высокой точности на таком пути невозможно. Поэтому обычно говорят, что метод Монте-Карло особенно эффективен при решении тех задач, в которых результат нужен с небольшой точностью.
Однако одну и ту же задачу можно решать различными вариантами метода Монте-Карло, которым отвечают различные значения
. Во многих задачах удается значительно увеличить точность, выбрав способ расчета, которому соответствует значительно меньшее значение
.
Общая схема
Допустим, что нам требуется вычислить какую-то неизвестную величину m. Попытаемся придумать такую случайную величину
, чтобы
. Пусть при этом
.
Рассмотрим
независимых случайных величин
(реализаций), распределения которых совпадают с распределением
. Если
достаточно велико, то согласно центральной предельной теореме распределение суммы
будет приблизительно нормальным с параметрами
,
.
На основе Центральной предельной теоремы (или если хотите предельной теоремы Муавра-Лапласа) не трудно получить соотношение:
где
— функция распределения стандартного нормального распределения.
Это — чрезвычайно важное для метода Монте-Карло соотношение. Оно дает и метод расчета
, и оценку погрешности.
В самом деле, найдем
значений случайной величины
. Из указанного соотношения видно, что среднее арифметическое этих значений будет приближенно равно
. С вероятностью близкой к
ошибка такого приближения не превосходит величины
. Очевидно, эта ошибка стремится к нулю с ростом
.
В зависимости от целей последнее соотношение используется по разному:
- Если взять k=3, то получим так называемое «правило
»:
- Если требуется конкретный уровень надежности вычислений
,
Точность вычислений
Как видно из приведенных выше соотношений, точность вычислений зависит от параметра
и величины
– среднеквадратичного отклонения случайной величины
.
В этом пункте хотелось бы указать важность именно второго параметра
. Лучше всего это показать на примере. Рассмотрим вычисление определенного интеграла.
Вычисление определенного интеграла эквивалентно вычислению площадей, что дает интуитивно понятный алгоритм вычисления интеграла (см. статью в Википедии). Я рассмотрю более эффективный метод (частный случай формулы для которого, впрочем, тоже есть в статье из Википедии). Однако не все знают, что вместо равномерно распределенной случайной величины в этом методе можно использовать практически любую случайную величину, заданную на том же интервале.
Итак, требуется вычислить определенный интеграл:
Выберем произвольную случайную величину
с плотностью распределения
, определенной на интервале
. И рассмотрим случайную величину
.
Математическое ожидание последней случайной величины равно:
Таким образом, получаем:
Последнее соотношение означает, что если выбрать
значений
, то при достаточно большом
:
Таким образом, для вычисления интеграла, можно использовать практически любую случайную величину
. Но дисперсия
, а вместе с ней и оценка точности, зависит от того какую случайную величину
взять для проведения расчетов.
Можно показать, что
будет иметь минимальное значение, когда
пропорционально |g(x)|. Выбрать такое значение
в общем случае очень сложно (сложность эквивалентна сложности решаемой задачи), но руководствоваться этим соображением стоит, т.е. выбирать распределение вероятностей по форме схожее с модулем интегрируемой функции.
Вычисление числа Пи
С помощью метода Монте-Карло можно вычислить число Пи.
Вписав круг в квадрат (диаметр круга равен стороне квадрата), можно выразить отношение площади круга к площади квадрата следующим образом:
Если мы сможем вычислить это отношение, значит, мы сможем получить значение числа Пи.
Заполним квадрат точками со случайными координатами. Рассчитаем отношение количества точек, попавших в круг, к общему количеству точек. Умножим результат на 4, чтобы получить значение числа Пи.
Чем больше количество точек, тем ближе полученное значение к истинному значению числа Пи.
Этот простой пример демонстрирует метод Монте-Карло в действии.