Ein diskretes Ereignismodell mit SimPy erstellen

Diskrete-Ereignis-Simulation mit Python

Dr Diogo Costa

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

Bevor wir das Modell bauen

  • Dynamisches System verstehen

  • Ziel(e) des diskreten Ereignismodells definieren

  • Prozesse identifizieren:

    • parallel laufend
    • sequenziell laufend
  • Passende SimPy-Ressourcen (resource, container, store) identifizieren

  • Architektur des Modells festlegen:

    • Zustandsvariablen bestimmen
    • Workflow des Modells
    • Generatoren
Diskrete-Ereignis-Simulation mit Python

Das dynamische System und Modellziele

Das dynamische System verstehen

  • Welche Aspekte steuern sein Verhalten?
  • Welche Prozesse/Ereignisse müssen rein?

Ziele des Modells

  • Oft zur Systemoptimierung genutzt
  • Welche Aspekte willst du optimieren?

    • Mehr Kundschaft
    • Schnellere Bearbeitungszeiten
    • Ressourcen besser zuteilen
  • Zustandsvariablen zur Überwachung dieser Ziele

Diskrete-Ereignis-Simulation mit Python

Passende SimPy-Ressourcen identifizieren

Geteilte Ressourcen

simpy.Resource(env, capacity=4)
  • Ressourcen, die zwischen Prozessen geteilt werden

Beispiele

  • Tische in einem Restaurant
  • Maschinen in einer Fabrik
  • Sitze im Theater
  • Kassen in einem Laden

Container

simpy.Container(env, capacity, 
init=initial_capacity)
  • Ressource verhält sich wie Tank oder Korb

  • Menge hinzufügen und entnehmen:

.put() und .get()

Beispiele

  • Treibstoffvorrat in einer Tankstelle
  • Kohle in einem Kohlekraftwerk
Diskrete-Ereignis-Simulation mit Python

Passende SimPy-Ressourcen identifizieren

Store

simpy.Store(env, capacity=4)
  • Ressource wie ein Laden mit mehreren Artikeln

  • Kapazität ist unbegrenzt (Standard)

  • Kapazitäts-Slots zum Speichern beliebiger Objekte

  • Elemente hinzufügen und entnehmen:

.put() und .get()

Beispiele

  • Läden mit mehreren Artikeln
  • Lagerraum
  • Werkstatt
  • Haushalt
Diskrete-Ereignis-Simulation mit Python

Events mit Bitoperatoren verknüpfen

SimPy nutzt Bitoperatoren, um zwei Events zu verknüpfen

Operatorarten in Python

  • Arithmetische, logische und Vergleichsoperatoren

Bitoperatoren

  • Bitweise Berechnungen auf Ganzzahlen
  • Erwarten zwei Operanden
    • Beispiel: a & b, a >> b, a ^ b

In SimPy

  • Bitoperatoren erzeugen ein Bedingungs-Event
  • Warte auf beide oder eines von zwei Events/Prozessen

Relevante Bitoperatoren für SimPy

  • Wartet auf beide Prozesse: __and__() oder &
  • Wartet auf einen der Prozesse: __or__() oder |
Diskrete-Ereignis-Simulation mit Python

Lass uns üben!

Diskrete-Ereignis-Simulation mit Python

Preparing Video For Download...