Mesa

Mesa ist ein Framework für agentenbasierte Modellierung. Die Simulation erfolt in Schritten. Agenten und Modelle werden dabei als Klassen definiert und besitzen jeweils eine step Funktion, welche die Aktion innerhalb eines Schrittes definiert. Optional kann ein Scheduler verwendet werden, um die Aktivierung resp. die Reihenfolge der Aktivierung zu definieren (z.B. zufällig). Mesa bietet zudem Unterstützung für die Sammlung von Daten, das parametrisierte Ausführen von Simulationen sowie die Visualisierung.

from mesa import Agent, Model
from mesa.datacollection import DataCollector
from mesa.time import RandomActivation


class Customer(Agent):

    def __init__(self, unique_id, model):
        super().__init__(unique_id, model)
        self.had_coffee = False
        self.state = 'idle'

    def step(self):
        if self.state == 'idle':
            if self.model.coffee_machine_free:
                # Finally getting my coffee!
                self.state = 'waiting'
                self.model.coffee_machine_free = False
        elif self.state == 'waiting':
            # Got my coffee!
            self.state = 'done'
            self.model.coffee_machine_free = True
        elif self.state == 'done':
            # Already served
            pass
            

class CoffeeMachineModel(Model):

    def __init__(self):
        self.coffee_machine_free = True
        self.schedule = RandomActivation(self)
        for unique_id in range(50):
            self.schedule.add(Customer(unique_id, self))
        self.collector = DataCollector(agent_reporters={'State': 'state'})

    def step(self):
        self.collector.collect(self)
        self.schedule.step()


model = CoffeeMachineModel()
for x in range(50):
    model.step()

data = model.collector.get_agent_vars_dataframe()
data = data.xs(49, level='Step')['State']
data[data == 'done'].count()

Das Beispiel simuliert das ungeordnete Anstehen an einer Kaffeemaschine. Das Modell hat 50 Kunden, welche jeweils überprüfen, ob die Kaffemaschine frei ist und sich gegebenenfalls eine Kaffee entnehmen und die Maschine wieder freigeben. Die Reihenfolge der Kunden bei jedem Schritt ist zufällig. Bei jedem Schritt werden die Zustände der Kunden erfasst. Es werden 50 Schritte simuliert.

Mehr Informationen auf mesa.readthedocs.io Beispiele mit Anwendungsfällen in unserem Blog.