#netlogo
Вопрос:
Я пытаюсь понять и посмотреть, можно ли изменить следующее:
У меня есть код, состоящий из 2 итераций. с конфигурацией точно такой, какая она есть. Нажав кнопку «Настройка-все», а затем 4 раза нажмите кнопку «Перейти один раз». Вызовите вторую итерацию. Но эта вторая итерация начинается с тика 1, а не с нуля. Почему это происходит? Есть ли способ решить эту проблему?
globals [ iteration ]
patches-own [ scale-patch ]
to setup-world
clearMethod
random-seed 1
ifelse iteration = 0
[setup-layers]
[setup-layers-2]
setup-turtles
reset-ticks
end
to clearMethod
clear-ticks
clear-turtles
end
to setup-all
clear-all
random-seed 1
ifelse iteration = 0
[setup-layers]
[setup-layers-2]
setup-turtles
reset-ticks
end
to setup-layers
ask patches [
set scale-patch random 10
set pcolor scale-color blue scale-patch -8 12 ]
end
to setup-layers-2
ask patches [
set scale-patch random 10
set pcolor scale-color green scale-patch -8 12 ]
end
to setup-turtles
crt 1 [ set color black ]
end
to go
moveproc
let n count turtles
if n = 0
[
ifelse iteration = 0
[
set iteration 1
setup-world
]
[
stop
]
]
tick
end
to moveproc
ask turtles [
right random 360
fd 1
if ticks >= 3
[
die
]
]
end
Заранее спасибо
Ответ №1:
Момент, когда вы меняете итерацию, находится в рамках go
процедуры (т. е. set iteration 1 setup-world
). Однако go
процедура также заканчивается tick
. Это означает, что при изменении итерации NetLogo сначала выполнит все новые настройки, которые включают reset-ticks
в себя (доведение тиков до 0), а затем выполнит tick
(доведение тиков до 1).
Если вам не нравится, что это происходит, и если вам нужно сохранить эту структуру (т. Е. go
Выполнить настройку), вы можете изменить go
процедуру таким образом, чтобы это tick
произошло до проверки условия изменения итерации:
to go
moveproc
tick
let n count turtles
if n = 0 [
ifelse iteration = 0
[set iteration 1
setup-world]
[stop]
]
end
PS: тот, который вы предоставили, — отличный минимально воспроизводимый пример
Комментарии:
1. Большое тебе спасибо, Маттео, за решение и объяснение :). Решено! И спасибо за множество советов о том, как задать вопрос 🙂