Добавление агента из разных агентов в
Моя модель представляет собой сеть агентов, соединенных между собой ссылками. Я пытаюсь создать набор агентов из соседей агента и их соседей и т. Д. (Мне нужно это, чтобы назначить ему разные значения).
Однако, когда я создаю let с agentset в нем. агенты попросили сделать этот набор агентов своим, это пока хорошо. Но когда я хочу, чтобы оригинальный агент спросил его о своих соседях по второй линии, он просто возвращает набор агентов от одного из этих соседей, а не объединенные наборы агентов всех его соседей по второй линии, и я хочу, чтобы соседи сохранили своих собственных соседей в наборе агентов со всеми соседи из разных агентов в этом наборе.
Я не могу попросить позволить агенту просто сделать turtleset current-agentset new-agentset
так как в let
Вы не можете попросить переменную let. Так что код, который обычно set second-neighbors (turtle-set second-neighbors other-nieghbors
не работает, так как я не могу спросить вторых соседей уже в
Я также не могу сделать это глобальным или чем-то, так как это зависит от агента.
код у меня до сих пор выглядит так
ask companies [
let this-company self
let b link-neighbors
ask b [ let c link-neighbors with [self != this-company]
ask c [ let d link-neighbors with [not member? self b]
ask this-company [
set iburen b
set iiburen c
set iiiburen d
]
]
]
]
так что я хочу, чтобы все агенты в наборе агентов c сообщали о своих соседях по ссылкам, как они делают сейчас. Но также сохраните этих соседей по ссылкам в новом наборе агентов, который имеет всех соседей по ссылкам всех агентов в c. как простой II + 1, но чем с turtle-set (what I have) (what is new from the next agent asked)
то же самое относится и к
Если я сейчас запускаю модель, агенты сообщают о разных наборах агентов почти каждый тик. Они просто выбирают один набор агентов из любого из этих агентов вместо того, чтобы объединить их вместе.
1 ответ
Вот то, что я думаю, вам нужно:
extensions [ nw ]
breed [ companies company ]
companies-own [
buren ; a list of agentsets, with one item for each "level" of neighbors
]
to setup
clear-all
; create a random network and lay it out:
create-companies 20 [ create-links-with n-of 3 other companies ]
repeat 30 [ layout-spring turtles links 0.2 5 1 ]
let num-levels 3
ask companies [
let all-neighbors other nw:turtles-in-radius num-levels
set buren (list) ; initialize to empty list
foreach range num-levels [ i ->
let neighbors-at-this-level all-neighbors with [
nw:distance-to myself = i + 1
]
set buren lput neighbors-at-this-level buren
]
]
; demonstrate how to access the levels (sorted only for display purposes)
ask one-of companies [
show sort item 0 buren ; first level neighbors
show sort item 1 buren ; second level neighbors
show sort item 2 buren ; third level neighbors
]
end
Возможно, это не самый эффективный код, поскольку он проходит список всех соседей один раз для каждого уровня, но если у вас нет огромной сети, вы не должны это замечать.
Если вы действительно хотите использовать такие переменные, как iburen
, iiburen
а также iiiburen
Вы всегда можете использовать псевдонимы элементов списка:
set iburen item 0 buren
set iiburen item 1 buren
set iiiburen item 2 buren
... но я не рекомендую это Наличие ваших наборов агентов в списке должно побудить вас думать о своих уровнях в более общем виде.