Act-Methoden schreiben
Wenn Eigenschaftsformeln nicht ausreichen — schreiben Sie ein Rhai-Skript, das einmal pro Agent pro Zeitschritt läuft und mehrere Eigenschaften gemeinsam aktualisiert.
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:
- Wählen Sie den Knotentyp im Modellnavigator
- Öffnen Sie das Eigenschaften-Panel
- Suchen Sie den Abschnitt Act-Methode und klicken Sie, um den Editor aufzuklappen
- 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 verwendenset_prop, weil sie oft mehrere Eigenschaften aktualisieren.- Die Act-Methode liest
statemitagent.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
followsauf seine verbundenen Vorgänger, statt auf ein Ereignis zu warten.
Ein Schritt Verzögerung beim Lesen anderer Agents
Jeder set_prop-Schreibvorgang wird während des Schritts gesammelt und erst angewendet, nachdem alle Agents gelaufen sind — so kann kein Agent die halbfertige Aktualisierung eines anderen sehen, und das Ergebnis hängt nicht davon ab, welcher Agent zufällig zuerst lief. Die Folge: Wenn eine Act-Methode eine Eigenschaft liest, die die Act-Methode eines anderen Agents schreibt (oben pred.get_prop("state")), sieht sie den Wert des vorherigen Zeitschritts. Zustandsmaschinen wie die obige schreiten deshalb einen Schritt pro Zeitschritt voran — in der Regel genau das, was Sie wollen; erwarten Sie nur nicht, dass eine Kette von Waiting-Schritten innerhalb eines Zeitschritts durchkaskadiert.
Diese Verzögerung betrifft nur Act-Methoden. Eigenschaftsformeln werden nach ihren Abhängigkeiten geordnet und lesen verbundene Agents im aktuellen Schritt — siehe Verbundene Agents in Rhai lesen.
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
Dieser Inhalt wurde kollaborativ mit KI erstellt.