Порядок агентов в агентском наборе не совпадает
Я сомневаюсь и прошу прощения, если ответ очень очевиден. Я создал следующий код. Довольно просто и понятно:
patches-own [ tl ls ls2 ls3 ls4 tsl]
turtles-own [mysize]
to setup
clear-all
reset-ticks
crt 5
ask turtles [ set heading random 360 jump random 20 set mysize random-float 1]
asd
inspect patch 0 0
end
to asd
let old sum [mysize] of turtles
ask patches [ set tl other turtles
set tsl [self] of tl
set ls [distance myself] of tl
set ls2 [distance myself ^ 2] of tl
set ls3 [(mysize) / old] of tl
]
;print tl
end
to initial
set heading random 360 jump random 20 set mysize 1
end
to go
inspect patch 0 0
ask turtles [ fd 1 set mysize mysize + random-float 1]
let qwe random-float 1
print qwe
if qwe < 0.2 and count turtles > 2 [ask one-of turtles [die]]
if qwe > 0.8 [ ask one-of patches [sprout 1 [initial]]]
asd
tick
end
Как вы можете видеть, у меня есть функция проверки в коде и ниже снимок:
Мой вопрос: почему ls
а также ls2
агенты вышли из строя. Agentset TSL
показывает порядок черепах, поэтому другие наборы агентов, созданные на его основе, не должны следовать тому же порядку.
1 ответ
Если вы не сортируете их каким-либо образом, Netlogo будет запрашивать агентов в наборе агентов в случайном порядке. Функционально ask tl
следует той же логике, что и ask turtles
и то же самое касается извлечения переменных из набора агентов. Например, если вы используете командный центр, чтобы попробовать код ниже несколько раз (после запуска вашего setup
а также asd
), вы заметите, что порядок запрашиваемых агентов не всегда одинаков.
ask patch 0 0 [ print [distance myself] of tl ]
Все это говорит о том, что создание списка "tsl" патча не зависит от создания других ваших списков. Это не упорядоченный список, это список случайно названных черепах из набора агентов "tl". Один из способов получить последовательный порядок набора агентов - это использовать один из sort
примитивы.