Act-Methoden schreiben

Act-Methoden schreiben

Eine Act-Methode ist ein Rhai-Skript, das an einen Knotentyp angehängt wird und einmal pro Agent pro Zeitschritt läuft. Während Eigenschaftsformeln jeweils einen Wert berechnen, kann eine Act-Methode mehrere Eigenschaften gemeinsam aktualisieren, Zustandsübergänge anstoßen und auf die Werte reagieren, die die Formeln gerade erzeugt haben.

Für die meisten Simulationen brauchen Sie keine Act-Methode. Wenn Eigenschaftsformeln die Aufgabe erledigen können, verwenden Sie sie — sie sind leichter zu lesen, leichter zu debuggen und schneller auszuwerten. Greifen Sie zu einer Act-Methode, wenn:

  • Mehrere Eigenschaften gemeinsam aktualisiert werden auf Basis einer gemeinsamen Bedingung (z. B. "wenn der Zustand Approved ist, setze die Rolle und erhöhe das Gehalt")
  • Zustandsübergänge von den Werten verbundener Agents abhängen (z. B. "warte, bis alle Vorgänger Completed sind, dann wechsle auf Active")
  • Bedingte Logik sich über mehrere Eigenschaften erstreckt und als getrennte Formeln unhandlich wäre

Wo Act-Methoden leben

Act-Methoden werden auf dem Knotentyp definiert, genau wie Eigenschaftsformeln:

  1. Wählen Sie den Knotentyp im Modellnavigator
  2. Öffnen Sie das Eigenschaften-Panel
  3. Suchen Sie den Abschnitt Act-Methode und klicken Sie, um den Editor aufzuklappen
  4. Schreiben Sie Ihr Skript

Jeder Agent dieses Typs führt das Skript zu jedem Zeitschritt aus — nachdem alle Eigenschaftsformeln fertig sind.

Eine erste Act-Methode: Abschluss eines Prozessschritts

Stellen Sie sich einen Prozessschritt vor, der voranschreitet, während er Active ist, und auf Completed wechselt, wenn der Fortschritt 100 % erreicht. Nach dem Abschluss prüfen nachgelagerte Schritte, die Waiting waren, ob ihre Vorgänger alle fertig sind, und werden selbst Active.

// Während Active, Fortschritt aufsummieren
if agent.get_prop("state") == "Active" {
    let new_progress = agent.get_prop("progress") + (1.0 / agent.get_prop("duration"));
    agent.set_prop("progress", new_progress);
    if new_progress >= 1.0 {
        agent.set_prop("state", "Completed");
    }
}

// Während Waiting, prüfen, ob alle Vorgänger Completed sind
if agent.get_prop("state") == "Waiting" {
    let predecessors = get_connected(agent, "follows");
    let all_done = true;
    for pred in predecessors {
        if pred.get_prop("state") != "Completed" {
            all_done = false;
        }
    }
    if all_done && predecessors.len() > 0 {
        agent.set_prop("state", "Active");
    }
}

Ein paar Dinge, die auffallen:

  • agent.set_prop(...) ist die Art, wie eine Act-Methode Werte schreibt. Eigenschaftsformeln nutzen es nicht — sie geben einfach einen Wert zurück. Act-Methoden verwenden set_prop, weil sie oft mehrere Eigenschaften aktualisieren.
  • Die Act-Methode liest state mit agent.get_prop("state") (ohne Offset) — das ist der Wert zum aktuellen Zeitschritt, einschließlich allem, was die Eigenschaftsformeln gerade dafür berechnet haben.
  • Der Graph ist das Kommunikationsmedium: Ein Waiting-Schritt schaut über den Link follows auf seine verbundenen Vorgänger, statt auf ein Ereignis zu warten.

Agent-spezifische Überschreibungen (bald verfügbar)

Standardmäßig führt jeder Agent eines Typs dieselbe Act-Methode aus. Agent-spezifische Überschreibungen — bei denen ein bestimmter Agent in einem bestimmten Szenario ein anderes Verhalten erhält, z. B. "Alice bekommt in Monat 6 einen einmaligen Bindungsbonus" — kommen in einer künftigen Version. Damit können Sie das Verhalten einzelner Instanzen anpassen, ohne das Metamodell mit einmaligen Typen zu überfrachten.

Die Dinge einfach halten

Die Versuchung bei einer Skriptsprache ist, alles in einen großen Block zu packen. Widerstehen Sie ihr. Die klarsten Modelle bleiben nah an Eigenschaftsformeln und greifen nur dort zu einer Act-Methode, wo es keine gute Alternative gibt — und wenn sie es tun, bleibt die Act-Methode auf ein Anliegen fokussiert (eine Zustandsmaschine, eine Aktualisierung mehrerer Eigenschaften). Mehrere kurze Act-Methoden auf verschiedenen Knotentypen schlagen eine einzige riesige.

Nächste Schritte

  • Eigenschaftsformeln schreiben — das einfachere Gegenstück zu Act-Methoden
  • Verbundene Agents in Rhai lesen — Graphdurchlauf in Skripten
  • Simulationsfehler und -warnungen diagnostizieren — wenn Skripte sich falsch verhalten
  • Rhai-Funktionsreferenz — jede Methode und jeder Helfer, der Skripten zur Verfügung steht