#netlogo
#netlogo
Вопрос:
Я хочу инициировать для каждой (неориентированной) ссылки два одномерных массива array1 и array2. При каждом тике, если одна из конечных точек удовлетворяет условию 1? в то время как другой удовлетворяет условию 2?, генерируется случайное число, и случайное число и текущий тик сохраняются в массив1 и массив2 соответственно. Я хочу, чтобы оба массива увеличивались в длину по мере выполнения программы.
Как мне инициировать такой массив для каждой ссылки и как мне обновлять его при проверке состояния его конечных точек?
На данный момент я настраиваю ссылки и черепахи, используя следующее
turtles-own[
condition1?
condition2?
]
links-own [
array1
array2
]
to set-up[
clear-all
reset-ticks
make-turtles
make-nodes ;; creates the nodes
ask turtles [
set condition1? true
set condition2? true
]
ask links [
set array1 []
set array2 []
]
]
Команда go содержит процедуру, которая изменяет значения условия1? и условие2?, хотя на самом деле это не моя проблема.
Чтобы обновить массив, я думаю о:
let prob 0
ask turtles[
ask link-neighbors
set prob random-float 100
;; I don't know what to put here.
;; If one of the endpoint satisfies condition1? while the other
;; satisfies condition 2, I want prob to be appended to array1
;; and the current tick appended to array2
]
]
Возможно, сработает процедура, которая вместо этого запрашивает ссылки?
Ответ №1:
Делать ли это как ask links
или ask turtles
зависит от того, насколько значим array1 против array2. Выполнение с точки зрения черепах означает, что вы всегда можете провести тестирование «я» по условию 1, а «другой» — по условию 2. Но как только вы дойдете до черепахи, вам будет проще пробежаться по ссылкам черепахи ( my-links
), а не по другим конечным черепахам ( link-neighbors
).
Способ, которым вы создали массивы (списки в терминологии NetLogo, если вы хотите проверить словарь на наличие доступных команд), в порядке.
Вот один из вариантов, using fput
, который имеет самый последний тест в начале (front put) списка. Не проверено, поэтому могут быть синтаксические ошибки.
ask turtles
[ ask my-links
if [condition1?] of myself and [condition2?] of other-end
[ set array1 fput random 100 array1
set array2 fput ticks array2
]
]
Возможно, вы захотите рассмотреть возможность использования направленных ссылок, чтобы array1 и array2 не содержали элементов для обоих направлений. Если это так, используйте my-out-links
.