Учебник Математическое моделирование и симуляции для начинающих
Полный курс по математическому моделированию и компьютерным симуляциям на чистом Python. Вы научитесь превращать реальные процессы — распространение эпидемий, рост популяций, очереди, дорожный трафик, поведение толпы — в работающие модели и прогонять их на компьютере. Разберём метод Монте-Карло, случайные блуждания и диффузию, модели роста и хищник-жертва, клеточные автоматы (Игра «Жизнь», лесной пожар, сегрегация Шеллинга), теорию очередей и марковские цепи, а в финале — как проверять модели на прочность, оценивать неопределённость и пользоваться ими честно. Все симуляции исполнимы прямо в браузере: код на стандартной библиотеке Python с воспроизводимым выводом.
Курс «Математическое моделирование и симуляции» состоит из 9 разделов и 35 уроков: Что такое модель и зачем моделировать, Метод Монте-Карло, Генерация случайности, Случайные блуждания, Модели роста и динамика популяций, Эпидемиология: модели распространения болезней, Клеточные автоматы, Очереди, события и марковские цепи и Валидация, неопределённость и реальные кейсы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Что такое модель и зачем моделировать
- Что такое математическая модель
Математическая модель как упрощённое представление реальности: зачем нужны модели и чем отличается модель от реального объекта.
- Цикл моделирования
Этапы построения модели: постановка задачи, формализация, реализация, валидация, анализ и уточнение — почему это цикл, а не прямая.
- Типы моделей
Классификация моделей: детерминированные и стохастические, статические и динамические, непрерывные и дискретные, аналитические и имитационные.
- Допущения, валидность и границы применимости
Почему любая модель держится на допущениях, что такое область применимости и как принцип «все модели неверны, но некоторые полезны» работает на практике.
- Что такое математическая модель
2 Метод Монте-Карло
- Идея метода Монте-Карло
Идея метода Монте-Карло: вместо аналитической формулы бросаем случайные точки и считаем долю удачных. История метода (Улам, нейтроны, казино), оценка числа π на чистом Python.
- Интегрирование методом Монте-Карло
Интегрирование методом Монте-Карло: оценка определённого интеграла как среднего значения функции, умноженного на длину отрезка. Пример на чистом Python и сила метода в многомерных задачах.
- Оценка вероятностей сложных событий
Оценка вероятностей сложных событий методом Монте-Карло: когда формула трудна, симулируем событие тысячи раз и берём долю. Разбор парадокса дней рождения на чистом Python.
- Точность Монте-Карло: закон 1/√N
Точность метода Монте-Карло и закон 1/√N: почему ошибка убывает как корень из числа испытаний, в чём сила (независимость от размерности) и слабость (медленная сходимость) метода. Эксперимент на чистом Python.
- Идея метода Монте-Карло
3 Генерация случайности
- Псевдослучайные числа и зачем нужен seed
Что такое генератор псевдослучайных чисел (ГПСЧ), почему случайность «псевдо», что такое период и seed. Линейный конгруэнтный генератор на Python и воспроизводимость прогонов через random.seed.
- Равномерное распределение и его преобразования
Равномерное распределение как фундамент случайности: random.random() на [0,1), масштабирование на отрезок [a, b] формулой a+(b-a)*u, случайный выбор random.choice и бросок кубика randint в Python.
- Метод обратной функции
Метод обратной функции (inverse transform sampling): как из равномерного распределения получить любое другое через обратную функцию распределения. Генерация экспоненциального распределения формулой x = -ln(1-u)/lambda в Python.
- Метод отклонения (rejection sampling)
Метод отклонения (rejection sampling): генерация выборки из распределения, когда обратную CDF не выписать. Точки в прямоугольнике, принятие под кривой плотности, эффективность метода на примере f(x)=2x в Python.
- Псевдослучайные числа и зачем нужен seed
4 Случайные блуждания
- Одномерное случайное блуждание
Одномерное случайное блуждание на Python: шаги +1/-1, траектория, нулевое среднее смещение и растущий разброс. Базовая модель случайных процессов.
- Двумерное блуждание и закон √N
Двумерное случайное блуждание и закон корня из N: среднее расстояние от старта растёт как sqrt числа шагов. Связь с диффузией, моделирование на Python.
- Диффузия и броуновское движение
Диффузия и броуновское движение как случайное блуждание молекул: капля чернил, дрожание пыльцы, теория Эйнштейна 1905 года, линейный рост среднего квадрата смещения.
- Применения: цены акций и блуждание частиц
Случайное блуждание как модель цены акции: гипотеза случайного блуждания, эффективный рынок, где модель работает и где ломается — тренды, скачки, толстые хвосты.
- Одномерное случайное блуждание
5 Модели роста и динамика популяций
- Экспоненциальный рост
Экспоненциальный рост популяции: на каждом шаге умножаем на (1+r). Имитация на Python, постоянный темп удвоения, правило 70, где встречается в природе и почему долго невозможен.
- Логистический рост и ёмкость среды
Логистический рост популяции и ёмкость среды K: формула N = N + r*N*(1 - N/K), S-образная кривая, замедление у потолка. Имитация на Python пошагово.
- Хищник-жертва (Лотка-Вольтерра)
Модель хищник-жертва Лотки-Вольтерры: две связанные популяции, колебания с запаздыванием, циклы. Дискретная имитация на Python методом явного Эйлера, смысл параметров a, b, c, d.
- Конкуренция и сосуществование видов
Конкуренция двух видов за общий ресурс: модель конкуренции, принцип конкурентного исключения и сосуществование, коэффициенты влияния. Дискретная имитация на Python.
- Экспоненциальный рост
6 Эпидемиология: модели распространения болезней
- Модель SIR
Модель SIR в эпидемиологии: три группы S, I, R, потоки заражения и выздоровления, коэффициенты beta и gamma, пик эпидемии. Реализация на Python.
- Базовое репродуктивное число R0
Базовое репродуктивное число R0 = beta/gamma: порог эпидемии R0>1, затухание R0<1, порог коллективного иммунитета 1-1/R0 и зависимость размера эпидемии от R0.
- SEIR и эффект карантина
Модель SEIR с инкубационным классом E и коэффициентом sigma, болезни с инкубацией, эффект карантина: снижение beta и сглаживание кривой (flatten the curve).
- Модель SIR
7 Клеточные автоматы
- Идея клеточного автомата
Что такое клеточный автомат: сетка клеток, локальные правила, окрестность фон Неймана и Мура, эмерджентность. Элементарный 1D-автомат Rule 90 и треугольник Серпинского на Python.
- Игра «Жизнь» Конвея
Игра «Жизнь» Конвея на Python: правила рождения и выживания клеток, окрестность Мура, планер (glider) как движущаяся фигура. Эмерджентность из локальных правил, ASCII-визуализация поколений.
- Лесной пожар
Модель лесного пожара как клеточный автомат: три состояния клетки (пусто, дерево, горит), распространение огня фронтом, перколяция и критическая плотность леса. Реализация на Python с ASCII-выводом.
- Модель сегрегации Шеллинга
Модель сегрегации Шеллинга на Python: агенты двух типов на сетке, порог толерантности, переезд недовольных. Как умеренные локальные предпочтения дают сильное глобальное разделение — эмерджентность и нобелевская работа Шеллинга.
- Идея клеточного автомата
8 Очереди, события и марковские цепи
- Дискретно-событийное моделирование
Дискретно-событийное моделирование (DES) на Python: событийный цикл, список будущих событий на куче heapq, прыжки часов от события к событию вместо шага по времени.
- Теория очередей и модель M/M/1
Модель массового обслуживания M/M/1 на Python: пуассоновский поток приходов, экспоненциальное обслуживание, загрузка rho = lambda/mu, среднее число в системе L и время ожидания W, DES-симуляция и сравнение с теорией.
- Марковские цепи
Марковские цепи на Python: состояния, матрица переходов, марковское свойство, умножение вектора на матрицу как шаг во времени и сходимость к стационарному распределению на примере погоды.
- PageRank как марковская цепь
PageRank как марковская цепь на Python: веб как граф ссылок, случайный сёрфер, стационарное распределение, коэффициент затухания d и телепортация — связь марковских цепей с алгоритмом ранжирования Google.
- Дискретно-событийное моделирование
9 Валидация, неопределённость и реальные кейсы
- Анализ чувствительности и распространение неопределённости
Анализ чувствительности модели «по одному параметру» (торнадо-анализ) и распространение неопределённости через Монте-Карло на примере модели дохода стартапа: какой параметр критичнее и каков честный разброс прогноза.
- Валидация, верификация и калибровка
Чем верификация модели (правильно ли запрограммирована) отличается от валидации (соответствует ли реальности), что такое калибровка параметров по данным методом наименьших квадратов и почему опасно переобучение. Афоризм Бокса: все модели неверны, но некоторые полезны.
- Ансамбли прогонов и доверительные интервалы
Почему один прогон стохастической модели обманчив, как ансамбль из многих прогонов с разными seed даёт надёжную оценку, и как построить 95% доверительный интервал по разбросу прогонов (среднее ± 1.96·стд), чтобы отличить настоящий эффект от случайного шума.
- Этика моделирования и реальные кейсы
Этика математического моделирования: модель не равна реальности, ограничения прогнозов (пандемии, климат), как моделями манипулируют подбором допущений, ответственность моделиста. Реальные кейсы: S-образное распространение слуха и пробка на дороге как клеточный автомат. Финал курса.
- Анализ чувствительности и распространение неопределённости