Цикл моделирования
Урок разбирает, через какие этапы проходит любая модель и почему моделирование — это цикл с возвратами.
Цикл моделирования — повторяющаяся последовательность шагов: постановка задачи → формализация → реализация → валидация → анализ → уточнение, после которого снова уточняют постановку.
Шесть этапов
Модель не пишется «сразу набело». Она проходит круг, и обычно не один.
- Постановка задачи. Что именно мы хотим узнать? «Поймём эпидемию» — не задача. «Оценим, на сколько дней карантин сдвигает пик заражений» — задача. От точности вопроса зависит всё остальное.
- Формализация. Переводим вопрос на язык математики: выбираем переменные, параметры, правила. Здесь рождаются допущения: «считаем, что все контактируют одинаково часто».
- Реализация. Пишем код или выводим формулу. Тут вылезают мелочи, которые формализация замела под ковёр: шаг времени, начальные условия, единицы измерения.
- Валидация и верификация. Верификация: «правильно ли я запрограммировал то, что задумал?» Валидация: «соответствует ли задуманное реальности?» Это разные вопросы (им посвящён отдельный раздел).
- Анализ. Прогоняем модель, смотрим результаты, отвечаем на исходный вопрос, проверяем чувствительность к параметрам.
- Уточнение. Почти всегда выясняется, что модель чего-то не учла или, наоборот, переусложнена. Возвращаемся к постановке или формализации — и идём по кругу снова.
Почему это цикл, а не прямая
Новички представляют моделирование как конвейер: поставил задачу → построил → получил ответ. На практике первый прогон почти всегда показывает либо чушь, либо что-то, чего вы не ожидали. И это не провал, а главный механизм улучшения. «Странный» результат заставляет вернуться и спросить: я ошибся в коде (верификация), или мир устроен иначе, чем я думал (валидация), или я задал не тот вопрос (постановка)?
Каждый виток сужает разрыв между моделью и реальностью. Опытный моделист ожидает три-четыре витка как норму. Поэтому первую версию делают намеренно простой: её цель — не дать ответ, а пройти полный круг и понять, чего не хватает.
Цикл на ASCII-схеме
постановка
|
v
формализация <----------+
| |
v |
реализация | уточнение
| |
v |
валидация |
| |
v |
анализ ---------------+
Стрелка «анализ → уточнение → формализация» и есть та самая петля обратной связи, ради которой всё затевается.
Как работает под капотом
В коде цикл моделирования отражается на двух масштабах. Внутренний цикл — это сама симуляция (прокрутка времени, о ней говорили в прошлом уроке). Внешний цикл — это вы, переписывающий модель между прогонами. Хорошая практика — хранить параметры отдельно от логики (в словаре или константах сверху файла), чтобы внешний цикл «уточнения» сводился к правке нескольких чисел, а не к переписыванию алгоритма. Тогда виток занимает минуты, а не часы, и вы успеваете сделать их больше.
Частые ошибки
- Пропустить постановку. Сразу кодить «модель чего-нибудь». Без чёткого вопроса вы не узнаете, когда модель готова, и будете шлифовать её бесконечно.
- Строить сразу сложно. Большая модель с первого захода почти наверняка содержит ошибку, которую невозможно локализовать. Начинайте с минимальной версии.
- Считать первый результат истиной. Первый прогон — это материал для следующего витка, а не финальный ответ.
Итоги
- Модель проходит цикл: постановка → формализация → реализация → валидация → анализ → уточнение.
- Это именно цикл: первый прогон почти всегда выявляет, что надо вернуться назад.
- Первую версию делают намеренно простой, чтобы быстро пройти полный круг.
- Параметры храните отдельно от логики — так каждый виток уточнения стоит дёшево.