Eigenschaftsformeln schreiben
Eigenschaftsformeln schreiben
Eine Eigenschaftsformel ist ein kurzer Ausdruck, der den Wert einer Eigenschaft zu jedem Zeitschritt berechnet. Stellen Sie sie sich als eine Tabellenformel vor, die den Graphen kennt: Sie kann andere Eigenschaften desselben Agents lesen, in vergangene Zeitschritte blicken und Links zu benachbarten Agents durchlaufen.
Formeln werden in Rhai geschrieben, einer kleinen Skriptsprache, die vertraut wirkt, wenn Sie jemals JavaScript, Python oder Excel-Formeln geschrieben haben. Sie müssen nicht die ganze Sprache lernen, um produktiv zu sein — die meisten nützlichen Formeln sind ein oder zwei Zeilen lang.
Wo Formeln leben
Formeln werden auf einem Knotentyp definiert (auf Metamodell-Ebene), sodass alle Agents dieses Typs standardmäßig dieselbe Formel teilen. So fügen Sie eine hinzu:
- Wählen Sie den Knotentyp im Modellnavigator (z. B. "Employee")
- Öffnen Sie das Eigenschaften-Panel
- Setzen Sie in der Eigenschaftsliste das Formel-Kontrollkästchen (mit f(x) markiert) für die Eigenschaft, die Sie steuern möchten
- Ein Formeleditor erscheint — tippen Sie dort Ihren Rhai-Ausdruck ein
Beim nächsten Auswerten der Simulation verwendet jeder Agent dieses Typs die Formel, um diese Eigenschaft zu jedem Zeitschritt zu füllen.
Die eigenen Werte des Agents lesen
Innerhalb einer Formel ist der aktuelle Agent als agent verfügbar:
agent.get_prop("salary") // aktueller Wert
agent.get_prop("salary", -1) // Wert von vor einem Zeitschritt
agent.get_prop("salary", -3) // Wert von vor drei Zeitschritten
Das zweite Argument ist ein Offset — negative Zahlen blicken in die Vergangenheit. So schreiben Sie selbstbezügliche Formeln ohne unendliche Rekursion: agent.get_prop("x", -1) liest den gestrigen Wert, um den heutigen zu berechnen.
Eine erste Formel: 3 % jährliche Gehaltserhöhung
Wenn Ihre Zeitschritte Monate sind, ein Gehalt, das im Januar um 3 % wächst und den Rest des Jahres gleich bleibt:
if __timestep % 12 == 0 && __timestep > 0 {
agent.get_prop("salary", -1) * 1.03
} else {
agent.get_prop("salary", -1)
}
__timestep ist der Index des aktuellen Schritts (0, 1, 2, …). Sie haben außerdem __dt (die Schrittweite des Szenarios) für zeitskalierte Raten.
Andere Agents über den Graphen lesen
Der Graph ist der Weg, über den Agents sich koordinieren. Um Werte aus verbundenen Agents zu ziehen:
// Gesamte Personalkosten über alle Teammitglieder
sum_prop(get_connected(agent, "has_member"), "salary")
get_connected liefert die Agents zurück, die über einen Beziehungstyp erreichbar sind. sum_prop, count_prop und alle Array-Methoden von Rhai (.filter(), .map(), .len()) funktionieren auf dem Ergebnis.
Wenn Formeln nicht ausreichen, greifen Sie zu einer Act-Methode
Eine Eigenschaftsformel berechnet einen Wert. Wenn ein Verhalten mehrere Eigenschaften auf einmal berührt oder wenn die Logik von der Reihenfolge der Eigenschafts-Aktualisierungen abhängt, schreiben Sie stattdessen eine Act-Methode — ein längeres Rhai-Skript, das an den Knotentyp angehängt wird. Siehe Act-Methoden schreiben.
Einfach anfangen, hochskalieren
Viele Modelle kommen ihr ganzes Leben lang mit einzeiligen Formeln aus. Es geht nicht darum, raffiniertes Rhai zu schreiben — es geht darum, die Fleißarbeit aus der Tabelle zu verbannen. Greifen Sie erst dann zu den fortgeschritteneren Mustern (Verlaufslesen, Graphdurchlauf, eigene Helfer aus rhai-sci), wenn die einfachere Form wirklich nicht ausdrücken kann, was Sie brauchen.
Nächste Schritte
- Verbundene Agents in Rhai lesen — Graphdurchlauf-Muster im Detail
- Act-Methoden schreiben — Aktualisierungen mehrerer Eigenschaften und Zustandsübergänge
- Simulationsfehler und -warnungen diagnostizieren — wenn eine Formel nicht das tut, was Sie erwarten
- Rhai-Funktionsreferenz — die vollständige Liste der Agent-Methoden und Helfer