2017-10-09 9 views
0

J'ai défini un ensemble d'attributs pour certains agents de production dans l'interface en tant que variables globales, puis les ai assignés à une liste (dans la configuration) qui est également globale et les agents utiliser son contenu.tracer un élément dans une liste qui se met à jour dans Netlogo

Le problème est que je ne peux pas les tracer.

définie dans l'interface comme des variables globales: p1-size = 9, p2-size = 13, p3-size = 14.5, p1-rate = 80, p2-rate = 50, p3-rate = 98

to setup 

    ca ; clear-all 
    reset-ticks 
    file-close-all 
    setup-patches 
    create-prod ; create producers 
    set size-set ((list p1-size p2-size p3-size)) 
    set rate-set ((list p1-rate p2-rate p3-rate)) 

Je veux tracer et surveiller la façon dont les changements de taux, et je rencontre une erreur en définissant ceci:

plot item 0 size-set 

Taille-set est global, mais l'erreur indique que "ITEM devrait être une chaîne ou une liste, mais a obtenu le numéro 0.

J'apprécierais toute aide à ce sujet

Merci,

Répondre

3

La reset-ticks primitive a l'effet secondaire de la mise à jour des parcelles. Dans votre code, vous appelez reset-ticksavant en réglant la valeur de size-set, donc au moment où votre parcelle appelle plot item 0 size-set, votre size-set global a toujours sa valeur par défaut de 0.

Deux solutions possibles:

  • Déplacer reset-ticks à la fin de votre procédure setup. De cette façon, size-set sera initialisé correctement lorsque votre parcelle sera mise à jour. Sauf si vous avez une raison très particulière de faire autrement, c'est la solution que vous devriez choisir. C'est la norme dans NetLogo d'appeler reset-ticks seulement à la fin de setup.

  • Vous ne devriez pas faire cela sauf si vous avez une bonne raison, mais vous pourriez également avoir une sorte de "condition de garde" dans votre instruction: if is-list? size-set [ plotxy ticks item 0 size-set ]. Notez l'utilisation de plotxy au lieu de plot pour vous assurer que vous tracez toujours à la bonne position x même si l'état de votre garde vous fait passer certaines tiques.