2016-01-12 5 views

Antwort

5

Die Ursache des Verhaltensunterschieds ist eigentlich kein Bug, sondern eine ziemlich obskure Ecke von NetLogo. Das Primitiv ask-concurrent liegt im Kern dieses Verhaltens. Eine Agentset-Schaltfläche verwendet denselben Mechanismus wie ask-concurrent im Hintergrund. Das Ersetzen einer beliebigen Agentset-Schaltfläche durch eine Observer-Schaltfläche, die ask-concurrent verwendet, um denselben Code auf demselben Agentensatz auszuführen, sollte das Verhalten der Schaltfläche nicht ändern.

In der Regel sind die Unterschiede zwischen ask und ask-concurrent nicht viel. Schildkröten können sich bewegen leicht anders, aber es wird im Grunde das gleiche funktionieren. In einigen Fällen können die Unterschiede jedoch sehr dramatisch sein. Die NetLogo-Modellbibliothek bietet ein Modell namens "Ask-Concurrent Example", das die Unterschiede zwischen ask und ask-concurrent untersucht.

Es gibt auch eine Dokumentation dazu im NetLogo-Programmierhandbuch im Abschnitt "Turtle, Patch und link forever" von http://ccl.northwestern.edu/netlogo/docs/programming.html#buttons; Ein Großteil des Abschnitts ask-concurrent unter http://ccl.northwestern.edu/netlogo/docs/programming.html#ask-concurrent gilt ebenfalls.

Hinweis: Die Verwendung von ask-concurrent wird nicht empfohlen. Ich benutze es hier, um das Verhalten zu klären, aber es sollte nicht im Allgemeinen verwendet werden.

Hinweis 2: Im Allgemeinen ist der sicherste und vorhersehbarste Ansatz überhaupt keine Turtle-, Patch- und Link-Buttons zu verwenden. Verwenden Sie stattdessen nur Observer-Schaltflächen und verwenden Sie je nach Bedarf ask turtles, ask patches oder ask links im Schaltflächencode.