2016-06-06 4 views
1

Ich möchte den geteilten Block in einem Prozessmodell so verwenden, dass er eine Kopie des eingehenden Agenten mit denselben Parametern erstellt.anylogic, Prozessmodellierungsbibliothek: split. Wie kann ich die Eigenschaften der Kopie eines Agenten festlegen und referenzieren?

Was ich getan habe: eine Funktion SetupCopy (Agent, Original) mit Eingabeparameter Agent (das ist die Kopie) und Original (das ist der eingehende Agent). Die Funktion setzt die relevanten Parameter auf agent.someBooleanParameter = original.someBooleanParameter. Die Funktion wird im Split-Block in "Bei Exit-Kopie: SetupCopy (Agent, Original)" aufgerufen.

Problem: nach dem outCopy-Port des geteilten Blocks habe ich einen selectOutput-Block mit den Einstellungen verwendet True-Ausgabe auswählen: Wenn die Bedingung wahr ist: agent.someBooleanParameter Ich möchte diesen Parameter gleich dem jeweiligen Parameter des Originals sein Agent. Der Ausgabeblock wertet den Parameter jedoch immer auf false aus.

Ich habe bereits versucht, eine Ausgabe auf die Konsole des Parameters zu erhalten, indem ich On exit (false): System.out.println (agent.someBooleanParameter);

Wenn der Parameter des ursprünglichen Agenten wahr ist, ist die Ausgabe in der Konsole ebenfalls wahr, obwohl der Auswahlblock über den falschen Port beendet wird. Sehr verwirrend für mich. Was ist mein Fehler?

Kann mir jemand helfen, wie man die Parameter des kopierten Instanz des Mittels und Referenz der Parameter richtig eingestellt?

Dank

+1

Sie in zusätzliche liefern zu deiner Erklärung wäre hilfreich. Vielen Dank! –

+0

Was Sie getan haben, sieht korrekt aus. Wenn diese println-Anweisung "true" ausgibt und vom outF-Port des SelectOutput aufgerufen wird, sollte dies bedeuten, dass der Kopiervorgang ordnungsgemäß funktioniert hat und der SelectOutput-Block auf keinen Fall die falsche Route durchlaufen hat. –

Antwort

0

es wie das Ereignis von SelectOutput Block scheint, bevor Sie die coplete Kopie Ihres Agenten tun gefeuert.

um dies zu überprüfen, fügen Sie einfach eine Warteschlange zwischen diesen Blöcken hinzu und prüfen Sie, ob das Problem weiterhin auftritt.

0

Dies geschieht aufgrund der im SeletOutput-Block angegebenen Bedingung, bevor die Agentenkopie den Split-Block beendet und somit vor der Initialisierung im Feld Code beim Beenden initialisiert wird. Sie müssen den folgenden Java-Code in den Parameter New Agent (Kopie) des Split-Block geben Sie eine Kopie des eingehenden Mittel vor der Prüfung zu initialisieren:

Alle Codebeispiele oder Schnipsel
new MyAgent(agent.someBooleanParameter, ...) 
Verwandte Themen