Een discrete-evenementenmodel bouwen met SimPy

Discrete Event Simulation in Python

Dr Diogo Costa

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

Voordat we het model bouwen

  • Begrijp het dynamische systeem

  • Definieer doel(en) van het discrete-evenementenmodel

  • Identificeer processen:

    • parallel
    • sequentieel
  • Kies passende SimPy-resources (resource, container, store)

  • Definieer de architectuur:

    • Bepaal toestandsvariabelen
    • Workflow van het model
    • Generators
Discrete Event Simulation in Python

Het dynamische systeem en modeldoelen

Begrijp het dynamische systeem

  • Welke factoren sturen het gedrag?
  • Welke processen/events moeten mee?

Doelen van het model

  • Vaak om systemen te optimaliseren
  • Welke aspecten wil je optimaliseren?

    • Meer klanten
    • Snellere doorlooptijden
    • Betere inzet van resources
  • Toestandsvariabelen om deze doelen te monitoren

Discrete Event Simulation in Python

Kies de juiste SimPy-resources

Gedeelde resources

simpy.Resources(env, capacity=4)
  • Resources gedeeld tussen processen

Voorbeelden

  • Tafels in een restaurant
  • Machines in een fabriek
  • Stoelen in een theater
  • Kassiers in een winkel

Containers

simpy.Container(env, capacity, 
init=initial_capacity)
  • Resource werkt als een tank of mand

  • Hoeveelheid toevoegen en verwijderen:

.put() en .get()

Voorbeelden

  • Brandstofvoorraad bij een tankstation
  • Kolen in een kolencentrale
Discrete Event Simulation in Python

Kies de juiste SimPy-resources

Store

  • Resource als een opslag met meerdere items

  • Capaciteit is onbeperkt (standaard)

  • Capaciteitsvakken voor willekeurige objecten

  • Items toevoegen en verwijderen:

.put() en .get()

Voorbeelden

  • Winkels met meerdere artikelen
  • Opslagruimte
  • Werkplaats
  • Huishouden
Discrete Event Simulation in Python

Events combineren met bitwise-operatoren

SimPy gebruikt bitwise-operatoren om twee events te combineren

Typen operatoren in Python

  • Reken-, logische en vergelijkingsoperatoren

Bitwise-operatoren

  • Bitwise-bewerkingen op integers
  • Verwachten twee operanden
    • Voorbeeld: a & b, a >> b, a ^ b

In SimPy

  • Bitwise-operatoren genereren een condition event
  • Wacht op beide of één van twee events/processen

Relevante bitwise-operatoren voor SimPy

  • Wacht op beide processen: __and__() of &
  • Wacht op een van beide processen: __or__() of |
Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...