Математика модели социальных сил

Основу проекта составляет модель Дирка Хельбинга и Петера Мольнара, опубликованная в 1995 году. В ней человек рассматривается как физическое тело массой от 60 до 80 килограммов, на которое действуют несколько виртуальных сил. Тебе предстоит перевести эти формулы в программный код.

Движение каждого агента в каждый момент времени определяется суммой трёх векторных величин.

  • Сила собственного желания двигаться к выходу, которая стремится разогнать человека до комфортной скорости порядка 1,34 метра в секунду за заданное время релаксации.
  • Сила отталкивания от других агентов, которая экспоненциально возрастает по мере сокращения дистанции между их центрами масс.
  • Сила взаимодействия со стенами коридора, удерживающая людей от столкновения с неподвижными границами препятствий.
  • Силы упругого контакта и трения, которые включаются при непосредственном касании агентов телами в условиях давки.

Программная архитектура симулятора

Систему удобно разделить на три логических слоя. Первый слой отвечает за векторную математику. Лучше всего использовать встроенный класс Pygame Vector2, который поддерживает сложение, нормализацию и расчет длины вектора. Второй слой включает в себя класс самого агента. Агент хранит свои текущие координаты, вектор скорости, массу, радиус личного пространства и координаты целевой точки выхода.

Третий слой представляет собой менеджер симуляции. Он организует пространственный цикл, пересчитывает взаимодействия по методу Эйлера с фиксированным шагом времени и отрисовывает кадры на экране. Если количество агентов превышает сотню, вложенный цикл расчета сил попарного взаимодействия начнет снижать частоту кадров. В проектной части можно объяснить, почему алгоритмическая сложность здесь составляет O(N²) и как разбиение поля на сетку помогает ускорить расчет.

Экспериментальная часть и проверка гипотез

Проект по информатике ценен не только красивой анимацией, но и серией вычислительных экспериментов. Модель социальных сил знаменита тем, что воспроизводит реальные явления плотной толпы без прямого указания на них в правилах.

В расчетной главе нужно зафиксировать результаты нескольких симуляций.

  • Поведение толпы у сужения коридора с замером зависимости пропускной способности от ширины прохода.
  • Эффект образования спонтанных дорожек при встречном движении двух групп людей в одном коридоре.
  • Парадокс замедления при панике, когда чрезмерное увеличение желаемой скорости агентов приводит к заклиниванию выхода и снижению общей скорости эвакуации.
  • Влияние колонны-препятствия перед выходом на снижение давления в толпе и общее время освобождения помещения.

Что оценивает преподаватель

В работах по агентному моделированию комиссия проверяет адекватность заложенных алгоритмов. Преподаватель смотрит на привязку виртуальных пикселей к реальным физическим единицам измерения. Если агент имеет радиус 50 пикселей, скорость 200 пикселей в кадр и проходит коридор за долю секунды, модель признают декоративной.

Второй критерий оценки — устойчивость численного интегрирования. При запуске стресс-теста с высокой плотностью агенты не должны вылетать за пределы стен или бесконечно сжиматься в одну точку. На защите нужно показать графики зависимости времени эвакуации от начальной плотности потока, построенные на основе данных, выгруженных из симуляции в файл CSV.

Где брать данные и источники

Для теоретической главы используй базовую статью Helbing, Molnár «Social force model for pedestrian dynamics», опубликованную в журнале Physical Review E в 1995 году. В ней приведены точные аналитические уравнения сил и стандартные значения коэффициентов.

Для проверки реалистичности получаемых скоростей используй методику оценки пожарных рисков МЧС России или нормативный документ ГОСТ 12.1.004-91. Там указаны фактические таблицы соотношения плотности людского потока в коридорах и скорости его перемещения. Сравнение кривой из твоей программы с таблицей из нормативного документа подтвердит научную состоятельность проекта.

Частые вопросы

Нужно ли программировать алгоритм поиска пути вроде A*?

Для прямого коридора с простыми стенками сложный волновой алгоритм избыточен. Достаточно задать целевую точку на выходе, к которой направлен базовый вектор желания агента. Если же коридор имеет повороты или перегородки, в качестве промежуточных целей расставляют статические точки пути (waypoints).

Как связать виртуальные пиксели с метрами?

Введи глобальный масштабный коэффициент, например, 30 пикселей соответствуют одному метру. Все физические формулы рассчитывай строго в метрах, килограммах и секундах, а перевод в пиксели выполняй только на этапе отрисовки спрайтов на экране.