Construirea unui model de evenimente discrete cu SimPy

Simulare de evenimente discrete în Python

Dr Diogo Costa

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

Înainte de a construi modelul

  • Înțelegerea sistemului dinamic

  • Definirea obiectivului/obiectivelor modelului

  • Identificarea proceselor:

    • care rulează în paralel
    • care rulează în secvență
  • Identificarea resurselor SimPy adecvate (resource, container, store)

  • Definirea arhitecturii modelului:

    • Identificarea variabilelor de stare
    • Fluxul de lucru al modelului
    • Generatoarele
Simulare de evenimente discrete în Python

Sistemul dinamic și obiectivele modelului

Înțelegerea sistemului dinamic

  • Care sunt aspectele care îi modulează comportamentul?
  • Ce procese/evenimente trebuie incluse?

Obiectivele modelului

  • Utilizat frecvent pentru optimizarea sistemelor
  • Ce aspecte doriți să optimizați?

    • Mai mulți clienți
    • Timpi de procesare mai rapizi
    • Optimizarea alocării resurselor
  • Variabile de stare pentru monitorizarea acestor obiective

Simulare de evenimente discrete în Python

Identificarea resurselor SimPy adecvate

Resurse partajate

simpy.Resource(env, capacity=4)
  • Resurse partajate între procese

Exemple

  • Mese într-un restaurant
  • Mașini într-o fabrică
  • Locuri într-un teatru
  • Casieri într-un magazin

Containere

simpy.Container(env, capacity, 
init=initial_capacity)
  • Resursa funcționează ca un rezervor sau coș

  • Adăugare și eliminare de cantități:

.put() și .get()

Exemple

  • Rezerve de combustibil la o benzinărie
  • Cărbune într-o centrală pe cărbune
Simulare de evenimente discrete în Python

Identificarea resurselor SimPy adecvate

Store

simpy.Store(env, capacity=4)
  • Resursă similară unui magazin cu mai multe articole

  • Capacitate nelimitată (implicit)

  • Spații de capacitate pentru stocarea obiectelor arbitrare

  • Adăugare și eliminare de articole:

.put() și .get()

Exemple

  • Magazin cu mai multe articole
  • Cameră de depozitare
  • Atelier
  • Gospodărie
Simulare de evenimente discrete în Python

Concatenarea evenimentelor cu operatori pe biți

SimPy folosește operatori pe biți pentru a concatena două evenimente

Tipuri de operatori în Python

  • Operatori aritmetici, logici și de comparație

Operatori pe biți

  • Calcule pe biți asupra numerelor întregi
  • Necesită doi operanzi
    • Exemplu: a & b, a >> b, a ^ b

În SimPy

  • Operatorii pe biți generează un eveniment condiționat
  • Așteptare pentru ambele sau unul dintre două evenimente/procese

Operatori pe biți relevanți pentru SimPy

  • Așteaptă ambele procese: __and__() sau &
  • Așteaptă oricare proces: __or__() sau |
Simulare de evenimente discrete în Python

Să exersăm!

Simulare de evenimente discrete în Python

Preparing Video For Download...