Цикл моделирования

Урок разбирает, через какие этапы проходит любая модель и почему моделирование — это цикл с возвратами.

Цикл моделирования — повторяющаяся последовательность шагов: постановка задачи → формализация → реализация → валидация → анализ → уточнение, после которого снова уточняют постановку.

Шесть этапов

Модель не пишется «сразу набело». Она проходит круг, и обычно не один.

  1. Постановка задачи. Что именно мы хотим узнать? «Поймём эпидемию» — не задача. «Оценим, на сколько дней карантин сдвигает пик заражений» — задача. От точности вопроса зависит всё остальное.
  2. Формализация. Переводим вопрос на язык математики: выбираем переменные, параметры, правила. Здесь рождаются допущения: «считаем, что все контактируют одинаково часто».
  3. Реализация. Пишем код или выводим формулу. Тут вылезают мелочи, которые формализация замела под ковёр: шаг времени, начальные условия, единицы измерения.
  4. Валидация и верификация. Верификация: «правильно ли я запрограммировал то, что задумал?» Валидация: «соответствует ли задуманное реальности?» Это разные вопросы (им посвящён отдельный раздел).
  5. Анализ. Прогоняем модель, смотрим результаты, отвечаем на исходный вопрос, проверяем чувствительность к параметрам.
  6. Уточнение. Почти всегда выясняется, что модель чего-то не учла или, наоборот, переусложнена. Возвращаемся к постановке или формализации — и идём по кругу снова.

Почему это цикл, а не прямая

Новички представляют моделирование как конвейер: поставил задачу → построил → получил ответ. На практике первый прогон почти всегда показывает либо чушь, либо что-то, чего вы не ожидали. И это не провал, а главный механизм улучшения. «Странный» результат заставляет вернуться и спросить: я ошибся в коде (верификация), или мир устроен иначе, чем я думал (валидация), или я задал не тот вопрос (постановка)?

Каждый виток сужает разрыв между моделью и реальностью. Опытный моделист ожидает три-четыре витка как норму. Поэтому первую версию делают намеренно простой: её цель — не дать ответ, а пройти полный круг и понять, чего не хватает.

Цикл на ASCII-схеме

   постановка
       |
       v
  формализация <----------+
       |                  |
       v                  |
   реализация             | уточнение
       |                  |
       v                  |
   валидация              |
       |                  |
       v                  |
    анализ ---------------+

Стрелка «анализ → уточнение → формализация» и есть та самая петля обратной связи, ради которой всё затевается.

Как работает под капотом

В коде цикл моделирования отражается на двух масштабах. Внутренний цикл — это сама симуляция (прокрутка времени, о ней говорили в прошлом уроке). Внешний цикл — это вы, переписывающий модель между прогонами. Хорошая практика — хранить параметры отдельно от логики (в словаре или константах сверху файла), чтобы внешний цикл «уточнения» сводился к правке нескольких чисел, а не к переписыванию алгоритма. Тогда виток занимает минуты, а не часы, и вы успеваете сделать их больше.

Частые ошибки

  • Пропустить постановку. Сразу кодить «модель чего-нибудь». Без чёткого вопроса вы не узнаете, когда модель готова, и будете шлифовать её бесконечно.
  • Строить сразу сложно. Большая модель с первого захода почти наверняка содержит ошибку, которую невозможно локализовать. Начинайте с минимальной версии.
  • Считать первый результат истиной. Первый прогон — это материал для следующего витка, а не финальный ответ.

Итоги

  • Модель проходит цикл: постановка → формализация → реализация → валидация → анализ → уточнение.
  • Это именно цикл: первый прогон почти всегда выявляет, что надо вернуться назад.
  • Первую версию делают намеренно простой, чтобы быстро пройти полный круг.
  • Параметры храните отдельно от логики — так каждый виток уточнения стоит дёшево.
Проверьте себя
1. Почему моделирование — это цикл, а не прямая последовательность?
AПотому что код всегда содержит баги
BПотому что первый прогон обычно выявляет, что надо вернуться к постановке или формализации
CПотому что так требуют стандарты
DПотому что компьютеры медленные
2. В чём разница между верификацией и валидацией?
AЭто синонимы
BВерификация — правильно ли запрограммировано задуманное; валидация — соответствует ли задуманное реальности
CВерификация про скорость, валидация про память
DВалидация делается до реализации
3. Почему первую версию модели стоит делать простой?
AЧтобы сэкономить время навсегда
BЧтобы быстро пройти полный цикл и понять, чего не хватает
CПростые модели всегда точнее
DТак требует Python