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

Дискретно-подієве моделювання в Python

Diogo Costa (PhD, MSc)

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

Що таке математична модель?

Опис природної або керованої людьми системи за допомогою математичних понять і мови.

Моделі поділяють на:

  • Динамічні vs. нединамічні
  • Дискретні vs. неперервні
  • Детерміновані vs. імовірнісні (стохастичні)
  • Лінійні vs. нелінійні
  • Інші

Математичні моделі можуть бути простими або складними.

  • Цифрові наближення реальності
  • Неможливо врахувати всі процеси

Джордж Бокс: «Усі моделі помилкові, але деякі корисні».

Фото річки, що тече крізь кам'янисту місцевість.

Дискретно-подієве моделювання в 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.

Приклади

  • 2D лінійні або точкові графіки змодельованих даних (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...