2016-04-24 7 views
0

Ich bin ziemlich neu mit Java & AnyLogic also bitte auf mein Niveau für dieses.AnyLogic Agent-Based Simulationsagenten Wertübertragung

Gibt es eine Möglichkeit für Agenten, einen variablen Wert von einem anderen Agenten zu erhalten? In diesem Fall wären die Agenten vom selben Typ. Daher haben sie alle dieselben Variablen, aber da es Variablen mit zufälligen Anfangswerten und nicht Parametern sind, sind die Werte nicht gleich.

Agenten werden auch anfangs über Small-World-Verbindungen verbunden und diese Verbindungen werden während der Läufe nicht geändert.

Wie können Agenten, die beispielsweise in einem Ereignis auftreten, einen Variablenwert von einem anderen Agenten erfassen (z. B. erhält Agent i den Variablenwert X von Agent j). Dieser Wert würde in eine kleine Gleichung eingegeben werden, um den Wert der Variablen X des Agenten i zu modifizieren. Mit anderen Worten, der Agent I wäre von seinem verbundenen Agenten j betroffen und würde daher seinen Wert von X ändern.

Ich habe mehrere Kombinationen von .getConnectedAgent() und .get ohne Erfolg ausprobiert. Ich versuche jetzt, die Werte von X für jeden Agenten in eine Datenbank zu extrahieren und dann diese Datenbank zu verwenden, um den Wert von X von Agent j durch Agent i zu sammeln, aber ich mache dort keine Fortschritte.

Die Werte, die extrahiert werden müssen, sind double s, aber ich könnte die Variablen in Ganzzahlen ändern, wenn es einfacher wäre.

+0

Benjamin (gut) macht noch deutlicher beantworten, wenn Sie den Wert eines AnyLogic Variable x vom ersten Agenten Sie verbunden wurden erhalten wollten dann würden Sie 'getConnectedAgent (0) verwenden. x'. (Die Null in Klammern gibt AnyLogic * an, welcher * verbundene Agent verwendet werden soll, wobei Null der erste ist. Wenn Sie eine Small-World-Netzwerkumgebung verwendet haben, hat AnyLogic für Sie keine oder mehrere Verbindungen eingerichtet, wenn die Reihenfolge in diesem Fall lautet ein bisschen irrelevant.) –

+0

Sie müssten auch testen, dass * tatsächlich * eine Verbindung für den aktuellen Agenten vorhanden war, die es möglicherweise nicht gibt, zum Beispiel würden Sie den Code in ein 'if (connectedNumber()> 0) 'blockieren. –

Antwort

1

Es ist nicht notwendig, das in eine Datenbank zu extrahieren. Sie sollten etwas mehr um objektorientierte Programmierung lernen, Ihr Problem hat weniger mit AnyLogic zu tun als mit Java.

Wenn Sie eine Anzahl von Agents namens "MyAgents" haben, wobei jeder Agent eine Variable var mit einem zufälligen doppelten Wert hat, kann Agent 12 den doppelten Wert von Agent 14 abrufen, indem er var = get_Main().MyAgents.get(13).var aufruft.

Hier ist var auf der linken Seite die Variable des aufrufenden Agenten. get_Main() nimmt es in der Hierarchie eine Ebene höher, um auf seine eigene Population und andere Agenten zuzugreifen. Es greift dann auf den 14. Agenten (Java ist nullbasiert) und seinen var-Wert zu.

Wenn Sie vorhaben, getConnectedAgent() zu verwenden, müssen Sie zuerst die Agenten verbinden. Dies geschieht in gewissem Umfang, wenn Sie "Kleine Welt" verwenden, aber Sie möchten Verbindungen oft manuell definieren. Überprüfen Sie den Artikel "Link zu Agent" in der Hilfe.

prost

Verwandte Themen