2017-12-01 6 views
0

私はaskを使用して、私のカメのすべてを巡回したいですが、ではなく、はランダムであることを望みます。私のソリューションは、このリストの上に自分のIDでソートされたリスト、その後、ループにカメのすべてを追加することです:リスト内のすべてのカメを尋ねる方法

let sorted-turtles sort-on [who] turtles 
foreach sorted-turtles [ 
    x -> ask x [ ; x is the turtle 
    ; do something 
    ] 
] 
正しく動作

が、が大幅は私のモデルが遅くなります。

私の質問は:これは、すべてのカメに事前定義された順序で何かをするように頼むための最良の方法ですか?

私が直接リストにaskを使用しようとしている(例えばask sorted-turtles [ print who ]しかしNetLogoがaskがリストではなくagentsetを必要としていることを言います。事前に

おかげで、 ニック

答えて

2

まず、あなたの代わりにsort turtlesを使用することができますsort-on [who] turtlesです。同じことをしていますが、短くて熟語的です。速いのかどうかはわかりません(少しビット)。

foreach sorted-turtles [ x -> ask x [ ... ] ]パターンは十分に速くなければなりません。これはコストのかかるリスト作成です。

モデルの速度を向上させるためにできる主なことは、ソートされたカメのリストをグローバル変数に格納し、毎回並べ替えを行う代わりにそのリストを再利用することです。

しかし、あなたが絶えずカメを作ったり、殺したりしていない場合は、毎回ソートされたリストを再作成する必要があります。

+0

"...ソート済みリストを再作成する"またはリストを更新する。たとえば、新しいカメを作成する場合は、既にソートされたリストの正しい位置にカメを挿入します。 – mattsap

+2

@mattsap良い点。挿入が簡単なのは、おそらくリストの終わり(O(1))に起こるためですが、O(n)という正しいエージェントのリストをスキャンする必要があるため、削除が手間がかかります。あるいは、あなたは死んだエージェントをリストに残して、ループに '!= nobody'のチェックを追加することができますが、多くのエージェントが作成/殺されると管理が難しくなる可能性があります...状況によっては、それは価値がありません... –

+0

私が正しく思い出した場合、 'sort turtles'は既に内部的にソートされた順序であるので、実際にカメを並べ替える必要はありません –

関連する問題