Присвоение вектора ссылке

#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 .