Matematyczne modele systemów dynamicznych

Symulacja zdarzeń dyskretnych w Pythonie

Diogo Costa (PhD, MSc)

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

Czym jest model matematyczny?

Opis systemu naturalnego lub wywołanego przez człowieka za pomocą pojęć i języka matematycznego.

Modele można klasyfikować jako:

  • Dynamiczne vs. niedynamiczne
  • Dyskretne vs. ciągłe
  • Deterministyczne vs. probabilistyczne (stochastyczne)
  • Liniowe vs. nieliniowe
  • Inne

Modele matematyczne mogą być proste lub złożone.

  • Cyfrowe przybliżenia rzeczywistości
  • Niemożliwe jest uwzględnienie wszystkich procesów

George Box: "Wszystkie modele są błędne, ale niektóre są użyteczne."

Zdjęcie rzeki płynącej przez skalisty teren.

Symulacja zdarzeń dyskretnych w Pythonie

Przykład: model prognozowania procesów naturalnych

Model przepływu w rzece

Wykres obserwowanego i symulowanego przepływu w czasie na stacji hydrologicznej Goaya w Chinach. Model odwzorowuje zarejestrowane przepływy, które znacznie się zmieniają w czasie.

  • Model przewiduje przepływ dla stacji hydrologicznej Goaya w Chinach.

  • Prognoza opiera się na danych opadowych jako danych wejściowych modelu.

Inne przykłady

  • Prognoza pogody
  • Prognoza falowania oceanu
  • Jakość wody w jeziorach
  • Powodzie miejskie
  • I wiele innych zastosowań
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
Symulacja zdarzeń dyskretnych w Pythonie

Przykład: model prognozowania działalności człowieka

Prognozowanie inflacji

Wykres danych o inflacji w Wielkiej Brytanii (2002–2021) i prognozy (2022) opracowanej przez BNP Paribas. Prognoza wskazuje inflację na poziomie 7% w 2022 roku.

  • Prognozowanie inflacji jest kluczowe dla zapobiegania kryzysom gospodarczym

Inne przykłady

  • Łańcuch dostaw
  • Produkcja
  • Logistyka
  • Prognozy gospodarcze
  • Transport
  • Inne
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Symulacja zdarzeń dyskretnych w Pythonie

Ogólna struktura i komponenty kodu

  • 3 główne komponenty
  • Dane wejściowe i parametry modelu
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Konfiguracja uruchomienia
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Silnik 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]
Symulacja zdarzeń dyskretnych w Pythonie

Wyniki modelu

Przykład wyników modelu zdarzeniowo-dyskretnego dla działalności produkcyjnej

=> 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
Symulacja zdarzeń dyskretnych w Pythonie

Wizualizacja wyników modelu

  • Graficzna wizualizacja wyników: ułatwia identyfikację wzorców i punktów krytycznych.

  • Wizualizacja powinna być dostosowana do celów symulacji.

  • Przydatne pakiety do wizualizacji: matplotlib, seaborn, plotly.

Logo biblioteki Matplotlib. Logo biblioteki Seaborn. Logo biblioteki Plotly.

Przykłady

  • Wykresy liniowe lub punktowe danych modelu (y) względem czasu (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histogram grupujący dane x i zliczający wartości w każdym przedziale
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Symulacja zdarzeń dyskretnych w Pythonie

Czas na ćwiczenia!

Symulacja zdarzeń dyskretnych w Pythonie

Preparing Video For Download...