0
votes

Prendre des valeurs fixes à partir du fichier CSV Tour par tour en NetLogo

J'ai du mal à écrire un modèle d'irrigation. Je veux que les tortues prennent des valeurs du fichier CSV avec les tiques. Il y a 100 valeurs dans la liste. Je veux 10 tortues à choisir en premier (disons 20) Valeur Tournez à tour d'objet., Turtle 0, 1,2 3. Les tortues prendront la 2e valeur (comme 22) ainsi de suite et ainsi de suite. Le concept est lié à la demande de l'eau qui est fixe et changera après 10 jours pour chaque tortue. 100 valeurs seront consommées dans 1000 tiques Toute aide à cet égard sera très appréciée.

merci


0 commentaires

3 Réponses :


2
votes

Voici un code qui pourrait vous aider à démarrer. Je suis abstrait du fichier CSV en créant simplement une liste, la liste de demande , de numéros de demande aléatoire - vous les liriez dans le fichier CSV au début de votre simulation. À partir de ce point, dix tortues sont créées avec une variable de la variable , Demande et dans une liste triée par Qui Number.

La procédure go utilise la coche actuelle et l'opérateur pour déterminer quel élément de la liste de demande est le bon pour cet ensemble de dix tiques et le MOD L'opérateur détermine quelle tortue (consommateur) dans la liste des consommateurs devrait, à cette coche, prendre cette valeur pour sa demande . Le Afficher montre simplement la demande de chaque tortue à la fin de chaque tick. xxx


1 commentaires

Merci beaucoup Charles. J'ai traduit dans mon modèle et le programme fonctionne bien. Je veux poser une autre chose. J'ajoute ci-dessous en réponse. s'il vous plaît donnez votre avis.



0
votes

IWR-PERDAD est un fichier CSV. Je veux demander si je ne trie pas et n'écrivez pas la liste des fermiers! Comment cela sera affiché dans la carte de voir pour voir si les codes fonctionnent bien.

Breed [farmers farmer]
globals [demand-list  IWR-perday farmers-list]
farmers-own [current-demand irrigation-turn ]

to setup
  clear-all
       create-farmers 10 [ set irrigation-turn [0]
                      ask farmer 0 [ setxy min-pxcor + 1 0]
                      ask farmer 1 [ setxy min-pxcor + 3 0]
                      ask farmer 2 [ setxy min-pxcor + 5 0]
                      ask farmer 3 [ setxy min-pxcor + 7 0]
                      ask farmer 4 [ setxy min-pxcor + 9 0]
                      ask farmer 5 [ setxy min-pxcor + 11 0]
                      ask farmer 6 [ setxy min-pxcor + 13 0]
                      ask farmer 7 [ setxy min-pxcor + 15 0]
                      ask farmer 8 [ setxy min-pxcor + 17 0]
                      ask farmer 9 [ setxy min-pxcor + 19 0]]
                       set farmers-list sort turtles
  import-data 
    reset-ticks

end

to go
  
foreach [0 1 2 3 4 5 6 7 8 9 ] [ ?1 ->
  ask farmers with [who = ?1] [let list-element floor ticks / 10 
      set current-demand item list-element IWR-perday]]
      show map [c -> [current-demand] of c] farmers-list
  tick
    tick
end
to import-data
    
    ;; Import water demand
  ifelse ( file-exists? "IWR-perday.txt" )
  [
    set IWR-perday []
    file-open "IWR-perday.txt"
    while [ not file-at-end? ]
    [
      *set IWR-perday sentence IWR-perday (list file-read)
    ]
    file-close
  ]
  [ user-message "There is no IWR-perday.txt file in current directory!" ]
end*


0 commentaires

1
votes

Si vous posez une nouvelle question, elle devrait vraiment être posée comme une nouvelle question, pas comme un complément à un ancien. Mais laissez-moi y répondre ici. J'ai pris votre code ci-dessus et j'ai apporté des changements. Tout d'abord, j'ai pris le Setxy demande hors du bloc Créer-Farmers. Tout ce qui est dans ce bloc est exécuté par chacun des agriculteurs créés afin, dans ce cas, il est exécuté 10 fois. Ensuite, essayez si vous pouvez tout ce que vous pouvez éviter qui . Vous n'avez presque jamais besoin d'eux. En particulier, Farmers-List contient la liste triée des agriculteurs et vous pouvez simplement l'utiliser pour demander directement à l'agriculteur approprié de définir sa demande. En outre, vous n'avez pas besoin de chaque agriculteur pour définir list-élément car il est identique pour tous les agriculteurs de n'importe quelle tick. Vous avez deux Cochez COMMANDES - Vous en voulez seulement un. Et enfin, vous voyez que j'ai simplifié votre commande lecture . Dans votre cas, Lecture de fichier renvoie une seule valeur, que vous pouvez simplement ajouter à la liste. XXX

Je pense que si vous exécutez ceci avec votre fichier de données, Ce que j'ai fait pour vérifier cela, vous verrez que dans chaque ensemble de dix tiques, la demande des dix tortues est fixée une à une. Avec plus de 1000 valeurs dans iwr-Perday , cela ira plus de 10 000 ticks!


1 commentaires

Ceci est censé finir par une application de 10000 ticks car cela contient des besoins en eau de la récolte dans tous les 10 jours pendant le nombre d'années. Merci pour l'aide. Cela signifie beaucoup.