Клещевая петля в Нетлого - PullRequest
0 голосов
/ 13 июня 2018

Я делаю модель в Netlogo, и сейчас я пытаюсь сделать цикл для тиков.Я на самом деле хочу, чтобы черепахи шли к тому, что я определил как «лес», на некоторых временных шагах и переходили «домой» между другими временными шагами.Однако что-то идет не так, и я действительно не знаю, как решить проблему.

Мой код:

to go-home  
set mylist (list 120 240 360 480 600 720 840 960 1080 1200)
 let mylist2 [240 360 480 600 720 840 960 1080 1200 1320]
 ask turtles [if ticks > 80 and ticks <= 120 [facexy 0 35]]
  ask turtles [if ticks > ((one-of mylist) + 80) and ticks <= (one-of mylist2) [
       facexy 0 35]]
end

Я также пробовал использовать функцию цикла и функцию foreach, но для обеих функций функция go работает только для одного временного шага, а затем происходит сбой программы .. (Я полагаю, я делаю что-то не так)

1 Ответ

0 голосов
/ 13 июня 2018

Вы почти наверняка захотите кодовый блок, например:

to go-home
  if ticks > 80 and ticks <= 120 [ ask turtles [ facexy 0 35 ] ]
end

, чтобы ask находился внутри if (что означает, что if проверяется только один раз, а не один раз для каждой черепахи).

Однако более общая проблема заключается в том, как вы используете списки.Примитив one-of случайным образом выберет один из элементов в списке.Таким образом, ваш код может выбрать 720 из mylist и 480 из mylist2.Похоже, вы хотите переключаться каждые 120 ticks.Если это правильно, то вам вообще не нужны списки, вы можете просто использовать оператор mod с чем-то вроде:

to go-home
  ifelse ticks mod 240 < 120
  [ ask turtles [ facexy 0 35 ] ]
  [ ask turtles [ facexy 0 0 ] ]
end

Это будет иметь патч для лица 0 35 на 120 тиков (изменениезаголовок каждый tick, если требуется), затем отметка лица 0 0 для следующих 120 тиков, а затем снова 0 35 и т. д.

...