Modelli matematici di sistemi dinamici

Simulazione a eventi discreti in Python

Diogo Costa (PhD, MSc)

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

Cos'è un modello matematico?

Descrizione di un sistema naturale o umano tramite concetti e linguaggio matematici.

I modelli si classificano in:

  • Dinamici vs. non dinamici
  • Discreti vs. continui
  • Deterministici vs. probabilistici (stocastici)
  • Lineari vs. non lineari
  • Altri

I modelli matematici possono essere semplici o complessi.

  • Approssimazioni digitali della realtà
  • Impossibile includere tutti i processi

George Box: "Tutti i modelli sono sbagliati, ma alcuni sono utili."

Foto di un fiume che scorre tra rocce.

Simulazione a eventi discreti in Python

Esempio: modello per processi naturali

Modello del flusso in un fiume

Un grafico di portata osservata e simulata nel tempo alla stazione idrologica di Goaya in Cina. Il modello cattura le osservazioni. La portata varia molto nel tempo sia nel modello sia nei dati.

  • Questo modello prevede la portata alla stazione idrologica di Goaya, in Cina.

  • La previsione usa la pioggia come input del modello.

Altri esempi

  • Previsioni meteo
  • Previsione del moto ondoso
  • Qualità dell'acqua nei laghi
  • Alluvioni urbane
  • e molte altre applicazioni
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
Simulazione a eventi discreti in Python

Esempio: modello per attività umane

Prevedere l'inflazione

Un grafico dei dati storici d'inflazione nel Regno Unito (2002-2021) e della previsione (2022) di BNP Paribas. La previsione indica un'inflazione del 7% nel 2022.

  • Prevedere l'inflazione è cruciale per evitare crisi economiche

Altri esempi

  • Supply chain
  • Manifattura
  • Logistica
  • Previsioni economiche
  • Trasporti
  • Altro
1 https://www.ft.com/content/218d35ab-b044-467a-bb62-0d17547a4350
Simulazione a eventi discreti in Python

Componenti e struttura del codice

  • 3 componenti principali
  • Dati di input e parametri del modello
# Define model parameters
processes = {"process_1": 5,
             "process_2": 2,
             "process_3": 3}
  • Configurazione di esecuzione
# Simulation period
simulation_time = 365

# Run model
discrete_model(processes, simulation_time)
  • Motore del modello
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]
Simulazione a eventi discreti in Python

Output del modello

Esempio di output di un modello a eventi discreti per un'attività manifatturiera

=> 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
Simulazione a eventi discreti in Python

Visualizzare i risultati del modello

  • Visualizzazione grafica dei risultati: utile per individuare pattern e punti critici.

  • La visualizzazione va adattata agli obiettivi della simulazione.

  • Librerie utili: matplotlib, seaborn, plotly.

Logo della libreria Matplotlib. Logo della libreria Seaborn. Logo della libreria Plotly.

Esempi

  • Grafici 2D a linee o scatter dei dati modellati (y) vs. tempo (x)
plt.plot(x, y, color='green', marker='o', 
         markersize=12, linestyle='dashed', 
         linewidth=2)
  • Istogramma per raggruppare i dati in x e contare i valori per bin
plt.hist(x, 50, density=True, 
         facecolor='g', alpha=0.75)
Simulazione a eventi discreti in Python

Passons à la pratique !

Simulazione a eventi discreti in Python

Preparing Video For Download...