2016-01-12 10 views

risposta

5

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.

Problemi correlati