Matematické modely dynamických systémů

Diskrétní simulace událostí v Pythonu

Diogo Costa (PhD, MSc)

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

Co je matematický model?

Popis přírodního nebo lidmi řízeného systému pomocí matematických pojmů a jazyka.

Modely lze klasifikovat jako:

  • Dynamické vs. nedynamické
  • Diskrétní vs. spojité
  • Deterministické vs. pravděpodobnostní (stochastické)
  • Lineární vs. nelineární
  • Ostatní

Matematické modely mohou být jednoduché nebo složité.

  • Digitální aproximace reality
  • Nelze zohlednit všechny procesy

George Box: "All models are wrong, but some are useful."

Fotografie řeky protékající skalnatou krajinou.

Diskrétní simulace událostí v Pythonu

Příklad: model pro předpověď přírodních procesů

Model průtoku v řece

Graf pozorovaného a simulovaného průtoku v průběhu času na hydrologické stanici Goaya v Číně. Model zachycuje pozorované záznamy průtoku. Průtok se v čase výrazně mění v modelu i pozorováních.

  • Tento model předpovídá průtok pro hydrologickou stanici Goaya v Číně.

  • Předpověď vychází ze srážkových dat použitých jako vstup modelu.

Další příklady

  • Předpověď počasí
  • Předpověď mořského vlnění
  • Kvalita vody v jezerech
  • Městské záplavy
  • A mnoho dalších aplikací
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
Diskrétní simulace událostí v Pythonu

Příklad: model pro předpověď lidských aktivit

Předpověď inflace

Graf britské inflace (2002–2021) a předpovědi (2022) od BNP Paribas. Předpověď ukazuje 7% inflaci v roce 2022.

  • Předpověď inflace je klíčová pro prevenci hospodářských krizí

Další příklady

  • Dodavatelský řetězec
  • Výroba
  • Logistika
  • Ekonomické předpovědi
  • Doprava
  • Ostatní
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Diskrétní simulace událostí v Pythonu

Obecná struktura a komponenty kódu

  • 3 hlavní komponenty
  • Vstupní data a parametry modelu
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Konfigurace spuštění
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Jádro modelu
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]
Diskrétní simulace událostí v Pythonu

Výstupy modelu

Příklad výstupu diskrétně-událostního modelu pro výrobní činnost

=> 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
Diskrétní simulace událostí v Pythonu

Vizualizace výsledků modelu

  • Grafická vizualizace výsledků modelu: pomáhá identifikovat vzory a zlomové body v systému.

  • Vizualizace by měla odpovídat cílům simulace.

  • Mnoho užitečných vizualizačních balíčků: matplotlib, seaborn, plotly.

Logo knihovny Matplotlib. Logo knihovny Seaborn. Logo knihovny Plotly.

Příklady

  • 2D spojnicové nebo bodové grafy modelovaných dat (y) vs. hodnoty času (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histogram pro rozdělení dat v x a počet hodnot v každém intervalu
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Diskrétní simulace událostí v Pythonu

Pojďme si procvičit!

Diskrétní simulace událostí v Pythonu

Preparing Video For Download...