Salabim

Salabim ist ein weiteres Framework für diskrete Ereignissimulation mit Prozessen, Prozessinteraktionen, geteilten Ressourcen, Warteschlangen, statistischer Probenahme, Überwachung und Animation. Prozesse werden als Klassen definiert, welche mittels yield pausiert werden können. Diese werden einem Scheduler (Environment) übergeben, welcher sie bis zu einem bestimmten Zeitpunkt ausführt (env.run). Ein Prozess kann entweder nach Abschluss seiner Aufgabe sich selbst beenden (d.h. die Funktion kehrt zurück) oder endet mit dem Ende der Simulation (d.h. die Funktion ist beinhaltet eine Endlos- schlaufe). Geteilte Ressourcen können mit request angefordert und release wieder freigegeben werden. Sobald eine Ressource angefordert wurde, muss mit yield gewartet werden, bis sie verfügbar ist.
from salabim import Environment, Component, ComponentGenerator, Resource
from salabim import Exponential, Triangular

class Customer(Component):

    def process(self):
        # waiting for coffee machine
        yield self.request(self.env.coffee_machine)

        # Wait for coffee
        yield self.hold(Triangular(10, 60, 15).sample())

        self.release(self.env.coffee_machine)

env = Environment()
env.coffee_machine = Resource()
ComponentGenerator(Customer, iat=Exponential((60*60)/50))
env.run(till=60*60)
Das Beispiel simuliert das Anstehen an einer Kaffeemaschine. Es gibt einen Prozess (Customer), welcher das Verhalten eines Kunden modelliert: Anstehen vor der Kaffeemaschine und warten bis diese frei wird, anschliessend Kaffezubereitung mit einer zufälligen, triangular-verteilten Wartezeit. Kunden werden über eine spezielle Komponente (ComponentGenerator) exponentiell-verteilt der Simulation hinzugefügt.
Mehr Informationen auf salabim.org.