2017-03-11 3 views

Antwort

1

Ein Patch ist noch kein who denn das ist eine Schildkröte-only Variable; Patches haben stattdessen Koordinaten. Sie können Patches jedoch ihre eigene ID-Nummer geben und diese verwenden. Wenn Sie nur eine 5 x 5-Welt benötigen (wie in Ihrem Bild), können Sie im Netlogo-Code erreichen, was Sie wollen. Siehe zum Beispiel den folgenden Code (und beachte, dass ich die Welteinstellungen geändert habe to those seen here). Wenn Sie jedoch eine Welt mit mehr Patches wünschen, empfehle ich Ihnen, die gewünschten Patch-Werte aus einer Datei zu lesen.

globals [ 
    idlist 
    ordered_patches 
] 

patches-own [ 
    id 
] 


to setup 
    set idlist [ 9 10 11 12 13 24 1 2 3 14 23 8 0 4 15 22 7 6 5 16 21 20 19 18 17 ] 
    set ordered_patches sort patches 
end 


to assign-ids 

    (foreach ordered_patches idlist [ 
    [ o_patch _id ] -> 
     ask o_patch [ 
     set id _id 
     ] 
    ] 
) 

    ask patches [ 
    set plabel id 
    ] 

end 
+0

Vielen Dank Glück für detaillierte Antwort. Ich bin neu bei Netlogo. Ich hoffe, dass Sie nichts dagegen haben werden, dass ich frage, ob in der obigen Liste [o_patch_id] wieder geschrieben werden soll und ob o_patch gefragt wird. Und was ist der Zweck von _id. Muss ich hier wieder eine Liste anlegen? und was verstehen wir unter diesem Symbol ->. Ich habe dasselbe in Netlogo kopiert und versucht, aber viele Fehler erscheinen. bitte führen. – Sadaf

+1

Hallo Sadaf, ich hätte angeben sollen, dass ich Netlogo 6.0 verwende; Die Syntax für das 'foreach'-Primitiv unterscheidet sich leicht zwischen den Versionen 5 und 6, was die Ursache für Ihre Fehler sein kann, wenn Sie eine ältere Version als ich verwenden. Oder sie könnten auftreten, wenn nicht die gleichen Welteinstellungen wie oben verwendet werden. Ich empfehle den [Netlogo-Wörterbucheintrag] (http://ccl.northwestern.edu/netlogo/docs/dict/foreach.html) auf "foreach" zu lesen, um zu verstehen, was das '->' im obigen Code tut - Es hilft auch zu klären, dass "o_patch" und "_id" nur temporäre Variablen für "foreach" sind. –

+0

ok danke zur Klärung. Ich benutze jetzt NetLogo 6. Ich führe das gleiche Programm aus, bekomme aber diesen Fehler, da alle Listen-Argumente für FOREACH die gleiche Länge haben müssen. Fehler während Beobachter läuft FOREACH aufgerufen durch Prozedur ASSIGN-IDS aufgerufen von Button 'assign-IDs' – Sadaf

2

Wenn Sie nicht über die spezifische „Spirale“ -Sequenz in Ihrem Beispiel ist es egal, können Sie eine Variante von Luck-Lösung verwenden, die Standard-Patch-Reihenfolge, um die Vorteile von NetLogo der nimmt:

patches-own [ id ] 

to setup 
    clear-all 
    (foreach (sort patches) (range count patches) [ [p n] -> 
    ask p [ set id n ] 
    ]) 
    ask patches [ set plabel id ] 
end 

Or Sie könnten eine etwas andere Sortierreihenfolge verwenden, die mit sort-by angegeben wurde.

Das gesagt, ich weiß nicht, was Ihre Anforderungen sind, aber ich würde die Idee einer bestimmten ID für Patches in Frage stellen. Die meisten Dinge in NetLogo können getan werden, ohne jemals auf die ID eines Agenten zu verweisen. Die who Nummer selbst ist ein Relikt von sehr alten NetLogo-Versionen und sollte fast nie in modernen Code verwendet werden.

Wenn Sie auf einen bestimmten Patch verweisen möchten, beziehen Sie sich auf seine Koordinaten, zum Beispiel: patch -2 4.

Wenn Sie einen Patch für zukünftige Referenz speichern möchten, speichern Sie einen Verweis auf das Patch selbst, nicht irgendeine Art von ID. Zum Beispiel: ask turtles [ set my-patch one-of patches ].

+0

Danke für die Antwort und die Frage. Dies sind Kennungen für Wohnungen. 00 ist ein Uni-Patch und Rest sind Wohnungen in der Nähe der Universität. In jeder Runde werden die Studenten in die nächsten Wohnungen umziehen und wenn sie voll sind, dann in den äußeren Ring der Wohnungen, die weiter von der Universität entfernt sind. Diese Zahlen helfen, die Schüler an einen bestimmten Ort zu bewegen. Funktioniert diese Kennung, wenn ich sie setze? Außerdem verstehe ich P, n und Range nicht. was man in sie schreibt, um diese eindeutige Identifizierung zu erhalten. Danke – Sadaf

+0

Ich stimme Nicolas zu - es ist wahrscheinlich besser, zu tun, was Sie brauchen, ohne die Patches spezifische Identifizierung zu geben, vor allem, wenn die Studenten zufällig auf Gebäude im äußeren Ring bewegen. Wenn Sie sichtbare ID-Etiketten für die Gebäude wie angegeben haben möchten, funktioniert meine obige Antwort, aber es wird auf lange Sicht schwieriger, diese IDs in Prozeduren zu verwenden. –