Budowanie modelu symulacji dyskretnej w SimPy

Symulacja zdarzeń dyskretnych w Pythonie

Dr Diogo Costa

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

Przed budową modelu

  • Zrozumienie systemu dynamicznego

  • Zdefiniowanie celu(-ów) modelu symulacji dyskretnej

  • Identyfikacja procesów:

    • działających równolegle
    • działających sekwencyjnie
  • Wybór odpowiednich zasobów SimPy (resource, container, store)

  • Zdefiniowanie architektury modelu:

    • Identyfikacja zmiennych stanu
    • Przepływ pracy modelu
    • Generatory
Symulacja zdarzeń dyskretnych w Pythonie

System dynamiczny i cele modelu

Zrozumienie systemu dynamicznego

  • Co moduluje jego zachowanie?
  • Jakie procesy/zdarzenia należy uwzględnić?

Cele modelu

  • Często stosowany do optymalizacji systemów
  • Co chcemy zoptymalizować?

    • Więcej klientów
    • Krótszy czas przetwarzania
    • Optymalizacja alokacji zasobów
  • Zmienne stanu do monitorowania tych celów

Symulacja zdarzeń dyskretnych w Pythonie

Wybór odpowiednich zasobów SimPy

Zasoby współdzielone

simpy.Resource(env, capacity=4)
  • Zasoby współdzielone między procesami

Przykłady

  • Stoliki w restauracji
  • Maszyny w fabryce
  • Miejsca w teatrze
  • Kasjerzy w sklepie

Kontenery

simpy.Container(env, capacity, 
init=initial_capacity)
  • Zasób działający jak zbiornik lub kosz

  • Dodawanie i pobieranie ilości:

.put() i .get()

Przykłady

  • Rezerwy paliwa na stacji benzynowej
  • Węgiel w elektrowni węglowej
Symulacja zdarzeń dyskretnych w Pythonie

Wybór odpowiednich zasobów SimPy

Store

simpy.Store(env, capacity=4)
  • Zasób jak magazyn z wieloma elementami

  • Pojemność nieograniczona (domyślnie)

  • Miejsca do przechowywania dowolnych obiektów

  • Dodawanie i pobieranie elementów:

.put() i .get()

Przykłady

  • Sklepy z wieloma produktami
  • Magazyn
  • Warsztat
  • Gospodarstwo domowe
Symulacja zdarzeń dyskretnych w Pythonie

Łączenie zdarzeń za pomocą operatorów bitowych

SimPy używa operatorów bitowych do łączenia dwóch zdarzeń

Typy operatorów w Pythonie

  • Arytmetyczne, logiczne i porównania

Operatory bitowe

  • Obliczenia bitowe na liczbach całkowitych
  • Wymagają dwóch operandów
    • Przykład: a & b, a >> b, a ^ b

W SimPy

  • Operatory bitowe generują zdarzenie warunkowe
  • Oczekiwanie na oba lub jedno z dwóch zdarzeń/procesów

Istotne operatory bitowe dla SimPy

  • Czeka na oba procesy: __and__() lub &
  • Czeka na jeden z procesów: __or__() lub |
Symulacja zdarzeń dyskretnych w Pythonie

Czas na ćwiczenia!

Symulacja zdarzeń dyskretnych w Pythonie

Preparing Video For Download...