Математические модели динамических систем

Дискретно-событийное моделирование на Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Что такое математическая модель?

Описание природной или антропогенной системы с помощью математических концепций и языка.

Модели классифицируются по типу:

  • Динамические и нединамические
  • Дискретные и непрерывные
  • Детерминированные и вероятностные (стохастические)
  • Линейные и нелинейные
  • Другие

Математические модели бывают простыми и сложными.

  • Цифровые приближения реальности
  • Учесть все процессы невозможно

Джордж Бокс: «Все модели ошибочны, но некоторые полезны.»

Фотография реки, текущей среди скал.

Дискретно-событийное моделирование на Python

Пример: модель для прогнозирования природных процессов

Модель стока реки

График наблюдаемого и смоделированного стока реки во времени на гидрологической станции Гоая (Китай). Модель воспроизводит наблюдаемые данные стока. Сток существенно меняется во времени как в модели, так и в наблюдениях.

  • Модель прогнозирует сток реки для гидрологической станции Гоая (Китай).

  • Прогноз основан на данных об осадках, которые используются как входные данные модели.

Другие примеры

  • Прогноз погоды
  • Прогноз океанского волнения
  • Качество воды в озёрах
  • Городское затопление
  • И многие другие применения
1 Chen, C., He, W., Zhou, H. et al. A comparative study among machine learning and numerical models for simulating groundwater dynamics in the Heihe River Basin, northwestern China. Sci Rep 10, 3904 (2020). https://doi.org/10.1038/s41598-020-60698-9
Дискретно-событийное моделирование на Python

Пример: модель для прогнозирования антропогенной деятельности

Прогнозирование инфляции

График данных по инфляции в Великобритании (2002–2021) и прогноза на 2022 год от BNP Paribas. Прогноз показывает инфляцию на уровне 7% в 2022 году.

  • Точный прогноз инфляции крайне важен для предотвращения экономических кризисов

Другие примеры

  • Цепочки поставок
  • Производство
  • Логистика
  • Экономические прогнозы
  • Транспорт
  • Прочее
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Дискретно-событийное моделирование на Python

Основные компоненты и структура кода

  • 3 основных компонента
  • Входные данные и параметры модели
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Конфигурация запуска
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Ядро модели
def discrete_model(processes, simulation_time):

  # 1) Run end-condition
  while (time < simulation_time):
      process_names = list(processes.keys())

# 2) Loop over all processes for p in range(len(process_names)): process_name_p = process_names[p]
# 3) Account for effect of each process time += processes[process_name_p]
Дискретно-событийное моделирование на Python

Результаты модели

Пример вывода дискретно-событийной модели для производственного процесса

=> START OF SIMULATION  (Time = 0 days) 
Time =    6.00 days  |  Process Complete: Transport of raw material
Time =    9.00 days  |  Process Complete: Building components
Time =   11.00 days  |  Process Complete: Assembling parts
Time =   14.00 days  |  Process Complete: Selling product
=> COMPLETED: Supply-Chain cycle #1 | Time = 15.5 days
Time =   21.50 days  |  Process Complete: Transport raw material
Time =   24.50 days  | Process Complete: Building components
Time =   26.50 days  |  Process Complete: Assembling parts
Time =   29.50 days  |  Process Complete: Selling product
=> COMPLETED: Supply-Chain cycle #2 | Time = 31.0 days
Дискретно-событийное моделирование на Python

Визуализация результатов модели

  • Графическая визуализация результатов модели помогает выявлять закономерности и переломные точки в системе.

  • Визуализацию следует адаптировать к целям моделирования.

  • Доступно множество полезных пакетов для визуализации: matplotlib, seaborn, plotly.

Логотип библиотеки Matplotlib. Логотип библиотеки Seaborn. Логотип библиотеки Plotly.

Примеры

  • Двумерные линейные графики или диаграммы рассеяния: смоделированные данные (y) относительно значений времени (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Гистограмма для разбивки данных в x на интервалы и подсчёта значений в каждом интервале
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Дискретно-событийное моделирование на Python

Давайте потренируемся!

Дискретно-событийное моделирование на Python

Preparing Video For Download...