2016-06-07 7 views
2

Ich versuche, Schildkröten auf der Grundlage ihrer Punktzahl bewegen (0-1 kontinuierliche Skala), so dass je niedriger die Punktzahl desto früher die Bewegung. Leider habe ich es versäumt, etwas zu entwickeln, das funktioniert. Der Code, um die Schildkröten zu machen ist:Wie bringe ich Schildkröten dazu, sich mit Rangfolge zu bewegen, basierend auf einem eigenen Merkmal?

breed[a] 
breed[s] 

turtles-own [score] 
set population 100 

to make_turtles 
create-s (population/2) 
    [set color blue 
     set size 3 
     setxy random max-pxcor random max-pycor 
     set score random-normal 0.75 0.1 
     if score > 1 [set score 0.9999999999] 
     if score < 0.5 [set score 0.50000001] 
     ] 
create-a (population/2) 
[set color red 
     set size 3 
     setxy random max-pxcor random max-pycor 
     set score random-normal 0.25 0.1 
     if score < 0 [set score 0.00000000000001] 
     if score > 0.5 [set score 0.499999999999] 
     ] 
end 

und ich habe sie richtig zu bewegen, ich brauche sie nur in der Reihenfolge ihrer ‚Partitur‘ zu bewegen. Vielen Dank im Voraus für irgendwelche Tipps!

Antwort

1

Sie können die Schildkröten nach ihrer Punktzahl sortieren und über die resultierende Liste iterieren, wobei jede Schildkröte aufgefordert wird, sich zu bewegen.

foreach sort-on [score] turtles [ ask ? [ move]] 
+0

Das hat den Trick! ABER es hat ein neues Problem aufgeworfen: Ich habe den Code in meinen Go-Befehl gesetzt und die Schildkröten bewegen sich in der richtigen Reihenfolge, aber jetzt dauert der Code viel zu lange (vermutlich weil er die Bewegungsreihenfolge neu berechnet). Gibt es eine Möglichkeit, die Liste im Setup-Befehl in eine Liste zu bringen, vielleicht einen Agentensatz (?), Um die Verarbeitungsanforderungen zu reduzieren? – Jesse001

+1

Sie möchten keinen Agentensatz verwenden, da dies die Reihenfolge entfernt. Weisen Sie stattdessen in Ihrem Setup-Befehl eine globale Variable dem Ergebnis der Sortierung zu. Sagen Sie in Ihrem Befehl go foreach [ask? [Bewegung]]. Das ist nur dann der Fall, wenn sich die Punkte nicht über die Zeit ändern. – mattsap

+0

Das schien definitiv zu helfen, aber es dauert immer noch viel länger, den Code als zuvor auszuführen. Ich werde versuchen, den Rest zu optimieren und zu sehen, was passiert. Vielen Dank! – Jesse001