Wiskundige modellen van dynamische systemen

Discrete Event Simulation in Python

Diogo Costa (PhD, MSc)

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

Wat is een wiskundig model?

Beschrijving van een natuurlijk of mensgedreven systeem met wiskundige concepten en taal.

Modellen kun je indelen als:

  • Dynamisch vs. niet-dynamisch
  • Discreet vs. continu
  • Deterministisch vs. probabilistisch (stochastisch)
  • Lineair vs. niet-lineair
  • Overig

Wiskundige modellen kunnen simpel of complex zijn.

  • Digitale benaderingen van de werkelijkheid
  • Onmogelijk om alle processen mee te nemen

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

Foto van een rivier die door een rotsachtig gebied stroomt.

Discrete Event Simulation in Python

Voorbeeld: model om natuurlijke processen te voorspellen

Model van stroming in een rivier

Een plot van geobserveerde en gesimuleerde afvoer in de tijd bij het Goaya-hydrologisch station in China. Het model kan de geobserveerde afvoer reproduceren. De afvoer varieert sterk in de tijd in zowel model als observaties.

  • Dit model voorspelt de afvoer voor het Goaya-hydrologisch station in China.

  • De voorspelling is gebaseerd op neerslaginformatie als modelinvoer.

Andere voorbeelden

  • Weersverwachting
  • Golfvoorspelling op zee
  • Waterkwaliteit in meren
  • Stedelijke overstromingen
  • en vele andere toepassingen
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
Discrete Event Simulation in Python

Voorbeeld: model om mensgedreven activiteiten te voorspellen

Inflatie voorspellen

Een plot van Britse inflatiereeksen (2002-2021) en een voorspelling (2022) van BNP Paribas. De voorspelling toont 7% inflatie in 2022.

  • Inflatie voorspellen is cruciaal om economische crises te voorkomen

Andere voorbeelden

  • Supplychain
  • Productie
  • Logistiek
  • Economische voorspellingen
  • Transport
  • Overig
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Discrete Event Simulation in Python

Algemene code-onderdelen en structuur

  • 3 hoofdcomponenten
  • Invoergegevens en modelparameters
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Runconfiguratie
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Model-engine
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]
Discrete Event Simulation in Python

Modeluitvoer

Voorbeeld van uitvoer van een discrete-evenementenmodel voor een productieproces

=> START VAN SIMULATIE  (Tijd = 0 dagen) 
Tijd =    6,00 dagen  |  Proces voltooid: Transport van grondstof
Tijd =    9,00 dagen  |  Proces voltooid: Onderdelen bouwen
Tijd =   11,00 dagen  |  Proces voltooid: Onderdelen assembleren
Tijd =   14,00 dagen  |  Proces voltooid: Product verkopen
=> VOLTOOID: Supplychain-cyclus #1 | Tijd = 15,5 dagen
Tijd =   21,50 dagen  |  Proces voltooid: Transport grondstof
Tijd =   24,50 dagen  | Proces voltooid: Onderdelen bouwen
Tijd =   26,50 dagen  |  Proces voltooid: Onderdelen assembleren
Tijd =   29,50 dagen  |  Proces voltooid: Product verkopen
=> VOLTOOID: Supplychain-cyclus #2 | Tijd = 31,0 dagen
Discrete Event Simulation in Python

Visualisatie van modelresultaten

  • Grafische weergave van modelresultaten: helpt patronen en kantelpunten te vinden.

  • Visualisatie afstemmen op simulatiedoelen.

  • Veel pakketten beschikbaar: matplotlib, seaborn, plotly.

Logo van de Matplotlib-bibliotheek. Logo van de Seaborn-bibliotheek. Logo van de Plotly-bibliotheek.

Voorbeelden

  • 2D-lijn- of spreidingsplots van de gemodelleerde data (y) vs. de bijbehorende tijdwaarden (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Histogram om de data in x te groeperen en het aantal waarden per bin te tellen
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...