2017-10-09 5 views
0

Comment trouver la variable spécifique à une tortue à partir d'une liste de tortues? J'essaie de faire la somme d'une variable d'une liste de tortues et de comparer cette somme à la valeur spécifique de la tortue demandant, mais je ne suis pas sûr de ce que serait la syntaxe.Comment trouver et sauvegarder la somme d'une variable d'une liste spécifique de tortues, Netlogo?

Chaque tortue a sa propre liste spécifique composée d'autres tortues demander [mylist], et je suis à la recherche de résumer leur var_x et le comparer à var_x de la tortue demande.

ask turtles [ 
set ListVarXSum (sum (var_x) of each turtle on list [mylist]) 
] 

Répondre

2

Si je comprends ce que vous êtes après, il pourrait être plus facile de ne pas utiliser une liste de tortues, mais d'utiliser un des tortues agentset à comparer à la place. Jetez un oeil à cet exemple simple et voir si elle accomplit ce dont vous avez besoin:

turtles-own [ 
    var_x 
    my_comparison_turtles 
] 

to setup 
    ca 
    crt 10 [ 
    set var_x 3 + random 10 
    setxy random-xcor random-ycor 
    ] 

    ask turtles [ 
    set my_comparison_turtles n-of 3 other turtles 
    ] 
    reset-ticks 
end 

to sum-compare 

    ask turtles [ 
    let temp_sum sum [var_x] of my_comparison_turtles 
    print (word "My var_x is " var_x ", and the sum of my comparison turtles' var_x is " temp_sum ".") 
    ] 

end 
3

La façon la plus directe pour faire ce que vous voulez est:

set ListVarXSum sum map [ t -> [ var-x ] of t ] mylist 

La map transforme primitive la liste des tortues en une liste remplie par les valeurs de var-x pour chacune de ces tortues. Vous pouvez ensuite additionner cette liste avec sum. Cela étant dit, Luke C a raison de dire qu'il est souvent plus pratique de stocker des agents dans un ensemble d'agents que dans une liste (sauf si vous avez besoin qu'ils soient dans un ordre spécifique ou que vous ayez des agents répétés).

Pour convertir une liste d'agents en un jeu d'agents, vous pouvez toujours utiliser la primitive turtle-set. En utilisant cela, vous pouvez faire:

set ListVarXSum sum [ var-x ] of turtle-set mylist 

Il lit plus agréable, mais il est plus lent en raison du temps nécessaire pour convertir la liste en un à chaque fois agentset. Si c'est une opération que vous devez faire souvent, il est préférable de stocker un jeu d'agents à l'avance (en utilisant éventuellement turtle-set pour convertir tout ce que vous mettez en mylist en un ensemble d'agents, ou en utilisant une primitive qui vous donne un ensemble d'agents de toute façon, comme l'exemple n-of de Luke.)

+0

Le jeu de tortues 'my_comparison_turtles' que recommande Luke C fonctionne, mais cela crée une nouvelle liste de tortues à chaque opération. Projet sage, j'ai besoin d'utiliser une liste pré-construite de tortues. Sinon, je devrais affirmer que cette liste est aléatoire à chaque fois, plutôt que la liste fixe construite autour d'hypothèses spécifiques. Est-il possible de lire dans un ensemble d'agents à l'aide de la commande read-from-string ou d'autres commandes associées à partir d'un fichier txt/csv? Cela fonctionnerait dans mon projet, mais chaque fois que j'essaye cela, cela crée un tout nouveau groupe de tortues sans rapport. – UserBRy

+0

La race avec laquelle je travaille s'appelle 'race [ménage ménage]'. – UserBRy

+0

Ou, en tant que pensée, serait-il possible d'utiliser une liste d'attributs d'agent, comme dire 'who'? Donc, quelque chose comme .... 'set ListVarXSum somme [var-x] de tortues avec [[who] de moi = mylist]' Donc, si j'ai un 'mylist' de' [5 10 30] ', il faudrait utiliser des agents 5, 10 et 30? – UserBRy