0

NetLogoで、0〜60秒ごとにタートルエージェントを作成するプロシージャを作成しようとしています。次のコードを使用してプロシージャをループで実行すると、ランダムジェネレーターが機能していないように見えます。グラフプロット(エージェントからティック)は線形です。

to go
  every random 60 [crt 1 [
    set xcor random 20 - 10
    set ycor random 20 - 10
  ]
]
  plot count turtles
end

しかし、私がやるとしたら:

to go
  every 2 [crt 1 [
    set xcor random 20 - 10
    set ycor random 20 - 10
  ]
]
  plot count turtles
end

期待通りに動作しているようです。2秒ごとに新しいカメが作成されます。

私は何か間違ったことをしていますか?

4

2 に答える 2

2

ここにアイデアがあります。毎回新しい乱数を再生成し続けるのではなく、タイマーに達した後に再生成してください。コード:

globals [t]
to setup
  set t random 60
end
to go
  every t [
    set t random 60
    crt 1 [
      set xcor random 20 - 10
      set ycor random 20 - 10
    ]
  ]
end

私はそれをテストしていませんが、Jose が提起した問題に対処する必要があります。

于 2011-02-16T17:48:36.053 に答える
1

コードの最初のビットは、ほぼすべての瞬間にタートルを作成するという、想定されていることを実行しています。

これは直感的ではないかもしれませんが、「go」が毎秒何千回も呼び出されていることに注意してください (マシンの速度によって異なります)。呼び出されるたびに、0 から 60 までの新しい乱数が生成されます。したがって、0 が生成される可能性は非常に高くなります。その場合、その時点でタートルが作成されます。

例として、「永久」ボタンから次のコードを実行し、出力される内容を確認します。

to go
  every random 60 [
    show timer ;shows how long its been since last reset-timer
    reset-timer
  ]
end

私は得る:

observer: 0.016
observer: 0.0060
observer: 0.016
observer: 0
observer: 0
observer: 0
observer: 0.0050
observer: 0
observer: 0
observer: 0

私のラップトップで。

于 2011-02-06T13:11:08.460 に答える