NetLogo не создает черепах в случайных интервалах - PullRequest
0 голосов
/ 06 февраля 2011

Я пытаюсь создать процедуру в 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 секунды создается новая черепаха.

Я что-то не так делаю?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Вот идея: не продолжайте каждый раз регенерировать новое случайное число, регенерируйте его после достижения таймера. Код:

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

Я не проверял его, но он должен решить проблему, поднятую Хосе.

1 голос
/ 06 февраля 2011

Ваш первый кусочек кода делает то, что должен, что создает черепаху почти каждое мгновение.

Это может быть не интуитивно понятно, но обратите внимание, что '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

на моем ноутбуке.

...