Vedo una differenza di comportamento tra un pulsante dell'agentet (patch, tartaruga, collegamento) che esegue una determinata sezione di codice e un pulsante dell'osservatore che ask
s patches
(o turtles
o links
) per eseguire la stessa sezione di codice. Si tratta di un bug in NetLogo? È un bug nel mio codice?Perché un pulsante Agentset si comporta diversamente da un pulsante dell'osservatore che chiede al gruppo agenti?
risposta
La causa della differenza di comportamento non è in realtà un bug, ma un angolo piuttosto oscuro di NetLogo. La primitiva ask-concurrent
si trova al centro di questo comportamento. Un pulsante dell'agente utilizza lo stesso meccanismo di ask-concurrent
dietro le quinte. Sostituire qualsiasi pulsante dell'agentet con un pulsante observer che utilizza ask-concurrent
per eseguire lo stesso codice sullo stesso agentet non dovrebbe modificare il comportamento del pulsante.
In genere le differenze tra ask
e ask-concurrent
non ammontano a molto. Le tartarughe possono muovere leggermente in modo diverso, ma funzioneranno praticamente allo stesso modo. In alcuni casi però, le differenze possono essere davvero drammatiche. La libreria dei modelli NetLogo fornisce un modello chiamato "Esempio concomitante" che esplora le differenze tra ask
e ask-concurrent
.
C'è anche una documentazione su questo nella Guida alla programmazione di NetLogo, nella sezione "Pulsanti di tartaruga, patch e collegamento per sempre" di http://ccl.northwestern.edu/netlogo/docs/programming.html#buttons; si applica anche la maggior parte della sezione su ask-concurrent allo http://ccl.northwestern.edu/netlogo/docs/programming.html#ask-concurrent.
Nota: l'uso di ask-concurrent
non è consigliato. Lo sto usando qui per chiarire il comportamento, ma dovrebbe essere non essere usato in generale.
Nota 2: In generale, l'approccio più sicuro e più prevedibile è quello di non utilizzare affatto tartaruga, patch e pulsanti di collegamento. Utilizzare invece solo i pulsanti Observer e utilizzare ask turtles
, o ask links
nel codice del pulsante, a seconda dei casi.