2016-05-27 4 views
1

「var」の値に基づいてカメを並べ替える必要があります。私のコードは次のとおりNetlogoソートプロセスのタイブレーカー

globals [liste] 
turtles-own [var] 
to setup 
clear-all 
create-turtles 5 [setxy (random 5) (random 5)] 
ask turtle 0 [set var 1] 
ask turtle 1 [set var 1] 
ask turtle 2 [set var 1] 
ask turtle 3 [set var 2] 
ask turtle 4 [set var 3] 

set liste [who] of turtles 
set liste sort-by [([var] of turtle ?1) < ([var] of turtle ?2)] liste 
show liste 

end 

このコードが動作していると私はいくつかのexceutions中

観察以下の結果を得た:[0 1 2 3 4]

オブザーバー:[1 0 2 3 4]

オブザーバー:[0 1 2 3 4]

Iという問題ソートプロセスが常に同じ結果を返すようにします。私の視点から見ると、タイブレイカーを追加することは可能ですが、Netlogoでどのように行うかわかりません。助言がありますか?

答えて

1

タイブレーカーを考慮した独自のカスタムレポーターを作成できます。以下では、私たちがvarsが等しいかどうかをチェックするカメ比較のレポーターを作成します。もしそうなら、who(タイブレーカーとして保証された一意の識別子)に基づいて比較します。それ以外の場合は、指定した変数でカメが比較されます。

私は、あなたのwhosのリストではなく、直接カメを渡すことができます。

to setup 
    ... 
    show sort-by turtle-compare turtles 
    ... 
end 

to-report turtle-compare [t1 t2] 
    report ifelse-value ([var] of t1 = [var] of t2) 
    [[who] of t1 < [who] of t2] 
    [[var] of t1 < [var] of t2] 
end 
+1

'ifelse-value'を使う方がいいでしょう。 – Alan

+0

よろしくお願いします。一定。 – mattsap

+0

それは動作します!ありがとう! – Zahzah