Creare un modello a eventi discreti con SimPy

Simulazione a eventi discreti in Python

Dr Diogo Costa

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

Prima di costruire il modello

  • Capire il sistema dinamico

  • Definire gli obiettivi del modello a eventi discreti

  • Identificare i processi:

    • in parallelo
    • in sequenza
  • Identificare le risorse SimPy (resource, container, store)

  • Definire l’architettura del modello:

    • Variabili di stato
    • Workflow del modello
    • Generator
Simulazione a eventi discreti in Python

Il sistema dinamico e gli obiettivi del modello

Capire il sistema dinamico

  • Quali aspetti ne modulano il comportamento?
  • Quali processi/eventi includere?

Obiettivi del modello

  • Spesso usato per ottimizzare sistemi
  • Quali aspetti vuoi ottimizzare?

    • Più clienti
    • Tempi di elaborazione più rapidi
    • Ottimizzare l’allocazione delle risorse
  • Variabili di stato per monitorare questi obiettivi

Simulazione a eventi discreti in Python

Identificare le risorse SimPy appropriate

Risorse condivise

simpy.Resources(env, capacity=4)
  • Risorse condivise tra processi

Esempi

  • Tavoli in un ristorante
  • Macchine in una fabbrica
  • Posti a teatro
  • Cassieri in un negozio

Container

simpy.Container(env, capacity, 
init=initial_capacity)
  • Risorsa che si comporta come serbatoio o cesta

  • Aggiungi e rimuovi quantità:

.put() e .get()

Esempi

  • Carburante in una stazione di servizio
  • Carbone in una centrale a carbone
Simulazione a eventi discreti in Python

Identificare le risorse SimPy appropriate

Store

  • Risorsa tipo negozio con più oggetti

  • Capacità illimitata (default)

  • Slot di capacità per oggetti arbitrari

  • Aggiungi e rimuovi oggetti:

.put() e .get()

Esempi

  • Negozi con articoli multipli
  • Magazzino
  • Officina
  • Casa
Simulazione a eventi discreti in Python

Concatena eventi con operatori bitwise

SimPy usa operatori bitwise per concatenare due eventi

Tipi di operatori in Python

  • Aritmetici, logici e di confronto

Operatori bitwise

  • Calcoli bit a bit su interi
  • Richiedono due operandi
    • Esempio: a & b, a >> b, a ^ b

In SimPy

  • Gli operatori bitwise generano condition event
  • Attendi entrambi o uno dei due eventi/processi

Operatori bitwise rilevanti per SimPy

  • Attende entrambi i processi: __and__() oppure &
  • Attende uno dei processi: __or__() oppure |
Simulazione a eventi discreti in Python

Ayo berlatih!

Simulazione a eventi discreti in Python

Preparing Video For Download...