Skip to content
/ map Public

Комплексная система для генерации реалистичных траекторий перемещения людей в городской среде. Проект сочетает паттерны проектирования, пространственный анализ с OSMnx и статистическую валидацию против реальных данных

Notifications You must be signed in to change notification settings

Shirouky/map

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

Исследовательский проект: Генерация и анализ реалистичных траекторий перемещения людей

О проекте

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

Архитектура системы

Паттерн проектирования: Builder + Factory Method

Проект реализует сложную систему генерации персонажей с использованием комбинации паттернов:

  • Builder - для пошагового конструирования объектов Person
  • Factory Method - для создания различных профессиональных классов
  • Strategy - для определения поведения различных профессий

Основные компоненты

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   PersonBuilder │ ─> │   Profession     │ ─> │     Person      │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                              ▲                         │
         ┌────────────────────┴──────────────────┐      │
         │                                       │      │
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   Schoolchild   │ │     Doctor      │ │  OfficeWorker   │
└─────────────────┘ └─────────────────┘ └─────────────────┘

Технологический стек

  • Python 3.7+ - основной язык разработки
  • OSMnx - работа с OpenStreetMap данными, построение графов дорог
  • NetworkX - алгоритмы поиска кратчайших путей
  • Pandas & NumPy - обработка и анализ данных
  • SciPy - статистический анализ и метрики качества
  • Matplotlib & Plotly - визуализация результатов
  • Folium - интерактивные карты
  • Shapely - геопространственные операции

Функциональность

1. Генерация персонажей

Система создает разнообразные профили людей с учетом:

  • Демографических характеристик (пол, возраст)
  • Профессиональной принадлежности (5 различных профессий)
  • Индивидуальных распорядков дня

Реализованные профессии:

  • Школьник (Schoolchild) - равномерное распределение по полу, возраст 7-19 лет
  • Врач (Doctor) - 70% женщины, возраст 23-60 лет
  • Офисный работник (OfficeWorker) - равномерное распределение, возраст 21-60 лет
  • Курьер (Courier) - 80% мужчины, возраст 18-40 лет
  • Продавец (Salesman) - 70% женщины, возраст 18-60 лет

2. Моделирование daily routine

Каждый персонаж имеет уникальный дневной маршрут, включающий:

  • Основное место деятельности (работа/учеба)
  • Второстепенные активности (магазины, спорт, др.)
  • Временные интервалы с случайными вариациями
  • Возвращение домой

3. Построение маршрутов

Алгоритм использует реальную картографическую основу:

  • Загрузка графа дорог из OpenStreetMap
  • Поиск кратчайших путей алгоритмами NetworkX
  • Учет различных типов транспорта (пеший, вело, авто)
  • Реалистичная временная модель перемещений

4. Визуализация результатов

Статическая визуализация:

  • Графики маршрутов с помощью Matplotlib
  • Тепловые карты плотности перемещений
  • Наложение на реальную карту улиц

Интерактивная визуализация:

  • Интерактивные карты Folium с анимированными маршрутами
  • Plotly heatmaps для анализа пространственного распределения
  • HTML-экспорт для веб-приложений

5. Валидация реалистичности

Система оценивает качество сгенерированных данных через сравнение с реальными датасетами:

Метрики оценки:

  • Jensen-Shannon divergence - расхождение распределений
  • Pearson & Spearman correlation - линейная и ранговые корреляции
  • Cosine similarity - косинусное сходство
  • Overlap coefficient - коэффициент перекрытия распределений
  • Normalized RMSE - нормированная среднеквадратичная ошибка

Реальные датасеты для сравнения:

  • Uber movement data (Нью-Йорк, сентябрь 2014)
  • NYC Taxi data (2015 год)

Структура проекта

project/
├── map.py                          # Основной скрипт генерации
├── movement.json                   # Сгенерированные траектории
├── movement New York 100.json      # Дамп данных для Нью-Йорка
├── uber-raw-data-sep14.csv         # Данные Uber
└── test_2015.csv                   # Данные такси Нью-Йорка

📈 Методы оптимизации

Кэширование вычислений

_node_cache = {}
def get_cached_nearest_node(x, y):
    """Кэширование поиска ближайших узлов графа"""
    key = (round(x, 6), round(y, 6))
    if key not in _node_cache:
        _node_cache[key] = ox.distance.nearest_nodes(G, x, y)
    return _node_cache[key]

Векторизованные операции

  • Массовая обработка геоданных через Pandas
  • Векторизованные вычисления расстояний
  • Пакетная визуализация маршрутов

Оптимизация запросов OSM

  • Предварительная загрузка графа города
  • Кэширование результатов пространственных запросов
  • Балансировка между точностью и производительностью

Научная ценность

Новизна подхода

  1. Комбинирование паттернов проектирования для задач генерации данных
  2. Многоуровневая система валидации реалистичности траекторий
  3. Интеграция реальных картографических данных с поведенческими моделями
  4. Комплексные метрики оценки качества синтетических данных

Практическое применение

  • Генерация тренировочных данных для ML-моделей
  • Симуляция городской мобильности для урбанистических исследований
  • Тестирование геospatial алгоритмов
  • Создание синтетических датасетов для исследований конфиденциальности

Результаты и метрики качества

Оценка реалистичности (на примере Нью-Йорка)

Сравнение с данными Uber:

  • Jensen-Shannon divergence: 0.12
  • Pearson correlation: 0.85
  • Overall realism score: 82%

Сравнение с данными такси:

  • Jensen-Shannon divergence: 0.15
  • Pearson correlation: 0.79
  • Overall realism score: 76%

Производительность

  • Время генерации 50 персонажей: ~45 секунд
  • Объем выходных данных: ~5-10 МБ на 100 персонажей
  • Масштабируемость: линейная зависимость от количества агентов

Визуализации

Проект включает разные форматы визуализации:

  1. Статические маршруты - PNG с наложением на карту улиц
  2. Интерактивные карты - HTML с Folium, анимацией перемещений
  3. Тепловые карты - Plotly для анализа плотности

Возможности расширения

Новые профессии

class Student(Profession):
    @property
    def possible_places(self):
        return [
            {"tag": "amenity", "place": "university", "type": "time", "value": ["8:00", "10:00"], "is_main": True},
            {"tag": "amenity", "place": "library", "type": "time", "value": ["14:00", "18:00"], "is_main": False}
        ]

Дополнительные метрики

  • Временные паттерны активности
  • Сезонные вариации поведения
  • Социально-экономические факторы

Интеграция с внешними системами

  • REST API для генерации данных
  • Экспорт в форматы GIS (GeoJSON, Shapefile)
  • Интеграция с симуляторами городской мобильности

Вклад и развитие

Проект представляет основу для исследований в области:

  • Генерации синтетических данных
  • Анализа городской мобильности
  • Геопространственного машинного обучения
  • Поведенческого моделирования

About

Комплексная система для генерации реалистичных траекторий перемещения людей в городской среде. Проект сочетает паттерны проектирования, пространственный анализ с OSMnx и статистическую валидацию против реальных данных

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages