Matematiska modeller av dynamiska system

Diskret händelsesimulering i Python

Diogo Costa (PhD, MSc)

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

Vad är en matematisk modell?

Beskrivning av ett naturligt eller mänskligt system med hjälp av matematiska begrepp och språk.

Modeller kan klassificeras som:

  • Dynamiska vs. icke-dynamiska
  • Diskreta vs. kontinuerliga
  • Deterministiska vs. probabilistiska (stokastiska)
  • Linjära vs. olinjära
  • Andra

Matematiska modeller kan vara enkla eller komplexa.

  • Digitala approximationer av verkligheten
  • Omöjligt att ta hänsyn till alla processer

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

Foto av en flod som rinner genom ett stenigt område.

Diskret händelsesimulering i Python

Exempel: modell för att förutsäga naturliga processer

Modell för flöde i en flod

En graf över observerat och simulerat flöde över tid vid den hydrologiska stationen Goaya i Kina. Modellen fångar de observerade flödesvärdena. Flödet varierar kraftigt över tid i både modell och observationer.

  • Den här modellen förutsäger vattenflödet för den hydrologiska stationen Goaya i Kina.

  • Förutsägelsen baseras på nederbördsinformation som används som modellindata.

Andra exempel

  • Väderprognoser
  • Havsvågsprognoser
  • Vattenkvalitet i sjöar
  • Översvämningar i städer
  • och många andra tillämpningar
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
Diskret händelsesimulering i Python

Exempel: modell för att förutsäga mänskliga aktiviteter

Förutsäga inflation

En graf över brittiska inflationsdata (2002–2021) och en prognos (2022) framtagen av BNP Paribas. Prognosen visar 7 % inflation år 2022.

  • Inflationsprognoser är avgörande för att bidra till att förebygga ekonomiska kriser

Andra exempel

  • Leveranskedjor
  • Tillverkning
  • Logistik
  • Ekonomiska prognoser
  • Transport
  • Övriga
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Diskret händelsesimulering i Python

Allmänna kodkomponenter och struktur

  • 3 huvudkomponenter
  • Indata och modellparametrar
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Körningskonfiguration
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Modellmotor
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]
Diskret händelsesimulering i Python

Modellutdata

Exempel på utdata från en diskret händelsemodell för en tillverkningsaktivitet

=> 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
Diskret händelsesimulering i Python

Visualisering av modellresultat

  • Grafisk visualisering av modellresultat: hjälper till att identifiera mönster och tröskelpunkter i systemet.

  • Visualiseringen bör anpassas efter simuleringens syften.

  • Många användbara visualiseringspaket finns tillgängliga: matplotlib, seaborn, plotly.

Logotyp för biblioteket Matplotlib. Logotyp för biblioteket Seaborn. Logotyp för biblioteket Plotly.

Exempel

  • 2D-linje- eller punktdiagram över modellerade data (y) mot motsvarande tidsvärden (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histogram för att gruppera data i x och räkna antalet värden i varje intervall
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Diskret händelsesimulering i Python

Nu kör vi en övning!

Diskret händelsesimulering i Python

Preparing Video For Download...