Ich sehe einen Verhaltensunterschied zwischen einer Agentset-Schaltfläche (Patch, Turtle, Link), die einen bestimmten Abschnitt des Codes und eine Observer-Schaltfläche ask
s patches
(oder turtles
oder links
) ausführt, um den gleichen Codeabschnitt auszuführen. Ist das ein Fehler in NetLogo? Ist das ein Fehler in meinem Code?Warum verhält sich eine Agentset-Schaltfläche anders als eine Beobachterschaltfläche, die den Agentensatz anfragt?
Antwort
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.