Bygga en diskret händelsemodell med SimPy

Diskret händelsesimulering i Python

Dr Diogo Costa

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

Innan vi bygger modellen

  • Förstå det dynamiska systemet

  • Definiera modellens mål

  • Identifiera processer:

    • som körs parallellt
    • som körs i sekvens
  • Identifiera lämpliga SimPy-resurser (resource, container, store)

  • Definiera modellens arkitektur:

    • Identifiera tillståndsvariabler
    • Modellens arbetsflöde
    • Generatorer
Diskret händelsesimulering i Python

Det dynamiska systemet och modellens mål

Förstå det dynamiska systemet

  • Vad påverkar systemets beteende?
  • Vilka processer/händelser behöver ingå?

Modellens mål

  • Används ofta för att optimera system
  • Vad vill du optimera?

    • Fler kunder
    • Kortare handläggningstider
    • Optimera resursfördelning
  • Tillståndsvariabler för att följa upp dessa mål

Diskret händelsesimulering i Python

Välj lämpliga SimPy-resurser

Delade resurser

simpy.Resource(env, capacity=4)
  • Resurser som delas mellan processer

Exempel

  • Bord på en restaurang
  • Maskiner i en fabrik
  • Platser på en teater
  • Kassiörer i en butik

Containers

simpy.Container(env, capacity, 
init=initial_capacity)
  • Resursen fungerar som en tank eller korg

  • Lägg till och ta bort mängd:

.put() och .get()

Exempel

  • Bränslelager vid en bensinstation
  • Kol i ett kolkraftverk
Diskret händelsesimulering i Python

Välj lämpliga SimPy-resurser

Store

simpy.Store(env, capacity=4)
  • Resurs som ett lager med flera objekt

  • Obegränsad kapacitet (standard)

  • Kapacitetsplatser för att lagra godtyckliga objekt

  • Lägg till och ta bort objekt:

.put() och .get()

Exempel

  • Butiker med flera varor
  • Förråd
  • Verkstad
  • Hushåll
Diskret händelsesimulering i Python

Kombinera händelser med bitvisa operatorer

SimPy använder bitvisa operatorer för att kombinera två händelser

Operatortyper i Python

  • Aritmetiska, logiska och jämförelseoperatorer

Bitvisa operatorer

  • Bitvisa beräkningar på heltal
  • Kräver två operander
    • Exempel: a & b, a >> b, a ^ b

I SimPy

  • Bitvisa operatorer genererar betingelsehändelser
  • Vänta på båda eller en av två händelser/processer

Relevanta bitvisa operatorer för SimPy

  • Väntar på båda processerna: __and__() eller &
  • Väntar på en av processerna: __or__() eller |
Diskret händelsesimulering i Python

Nu kör vi en övning!

Diskret händelsesimulering i Python

Preparing Video For Download...